• elasticsearch 口水篇(3)java客户端


    elasticsearch有丰富的客户端,java客户端有Jest。其原文介绍如下:

    Jest is a Java HTTP Rest client for ElasticSearch.It is actively developed and tested by Searchly.

    A sample Java application using Jest can be found on GitHub https://github.com/searchbox-io/java-jest-sample.

    [http://www.searchly.com/documentation/developer-api-guide/java-jest/]

    下面我们做一个很简单的实例,以下几个功能:

    1)批量添加1000个user对象;

    2)通过id进行查询;

    3)通过name进行查询;

    user对象定义:

    package com.fox.c1;
    
    import io.searchbox.annotations.JestId;
    
    /**
     * @author huangfox
     * @date 2014年1月22日 下午5:31:52
     * 
     */
    public class User {
    	@JestId
    	private Long id;
    	private String name;
    	private int age;
    
    	public Long getId() {
    		return id;
    	}
    
    	public void setId(Long id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    }
    

      

    简单实现一个工厂类,用来获得JestHttpClient,如下:

    package com.fox.c1;
    
    import io.searchbox.client.JestClientFactory;
    import io.searchbox.client.config.HttpClientConfig;
    import io.searchbox.client.http.JestHttpClient;
    
    /**
     * @author huangfox
     * @date 2014年1月22日 下午5:16:15
     * 
     */
    public class ESFactory {
    	private static JestHttpClient client;
    
    	private ESFactory() {
    
    	}
    
    	public synchronized static JestHttpClient getClient() {
    		if (client == null) {
    			JestClientFactory factory = new JestClientFactory();
    			factory.setHttpClientConfig(new HttpClientConfig.Builder(
    					"http://localhost:9200").multiThreaded(true).build());
    			client = (JestHttpClient) factory.getObject();
    		}
    		return client;
    	}
    
    	public static void main(String[] args) {
    		JestHttpClient client = ESFactory.getClient();
    		System.out.println(client.getAsyncClient());
    		System.out.println(client.getServers());
    		client.shutdownClient();
    	}
    }
    

      

    测试类:

    package com.fox.c1;
    
    import io.searchbox.client.JestResult;
    import io.searchbox.client.http.JestHttpClient;
    import io.searchbox.core.Get;
    import io.searchbox.core.Index;
    import io.searchbox.core.Search;
    import io.searchbox.indices.CreateIndex;
    import io.searchbox.indices.DeleteIndex;
    
    import java.io.IOException;
    
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    
    /**
     * @author huangfox
     * @date 2014年1月22日 下午5:32:20
     * 
     */
    public class ESTest {
    
    	private JestHttpClient client = ESFactory.getClient();
    
    	/**
    	 * indexing
    	 * 
    	 * @param indexName
    	 */
    	public void index(String indexName) {
    		try {
    			// drop
    			DeleteIndex dIndex = new DeleteIndex(new DeleteIndex.Builder(
    					indexName));
    			client.execute(dIndex);
    			// create
    			CreateIndex cIndex = new CreateIndex(new CreateIndex.Builder(
    					indexName));
    			client.execute(cIndex);
    			// add doc
    			for (int i = 0; i < 1000; i++) {
    
    				User user = new User();
    				user.setId(new Long(i));
    				user.setName("huang fox " + i);
    				user.setAge(i % 100);
    				Index index = new Index.Builder(user).index(indexName)
    						.type(indexName).build();
    				client.execute(index);
    			}
    			//
    			client.shutdownClient();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * getting by id
    	 * 
    	 * @param indexName
    	 * @param query
    	 */
    	public void get(String indexName, String query) {
    		Get get = new Get.Builder(indexName, query).build();
    		try {
    			JestResult rs = client.execute(get);
    			System.out.println(rs.getJsonString());
    			//
    			client.shutdownClient();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * query
    	 * 
    	 * @param query
    	 */
    	public void search(String query) {
    		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    		searchSourceBuilder.query(QueryBuilders.queryString(query));
    		searchSourceBuilder.field("name");
    		Search search = new Search.Builder(searchSourceBuilder.toString())
    				.build();
    		try {
    			JestResult rs = client.execute(search);
    			System.out.println(rs.getJsonString());
    			//
    			client.shutdownClient();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	public static void main(String[] args) {
    		ESTest t = new ESTest();
    		String indexName = "user";
    		// indexing
    		t.index(indexName);
    		// getting by id
    		t.get(indexName, "2");
    		// query
    		String query = "fox";
    		t.search(query);
    	}
    
    }
    

      

    index 批量添加建议使用bulk,效率高(减少通讯次数):

    public void indexBulk(String indexName) {
    		try {
    			// drop
    			DeleteIndex dIndex = new DeleteIndex(new DeleteIndex.Builder(
    					indexName));
    			client.execute(dIndex);
    			// create
    			CreateIndex cIndex = new CreateIndex(new CreateIndex.Builder(
    					indexName));
    			client.execute(cIndex);
    			// add doc
    			Bulk.Builder bulkBuilder = new Bulk.Builder();
    			for (int i = 0; i < 1000; i++) {
    
    				User user = new User();
    				user.setId(new Long(i));
    				user.setName("huang fox " + i);
    				user.setAge(i % 100);
    				Index index = new Index.Builder(user).index(indexName)
    						.type(indexName).build();
    				bulkBuilder.addAction(index);
    			}
    			client.execute(bulkBuilder.build());
    			//
    			client.shutdownClient();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    

      

  • 相关阅读:
    Class.getSimpleName()的作用
    win7下制作ubuntu系统安装启动盘和U盘安装ubuntu全过程
    奈奎斯特三大准则
    [转]OFDM中保护间隔和循环前缀抵抗ISI和ICI
    频偏
    移动通信里面,OFDM技术所说的“载波相互正交”是什么意思?
    虚拟盘符映射
    npm 安装与常用命令
    ASP.NET WebAPI HTTPS
    记录下自己写的gulp打包脚本
  • 原文地址:https://www.cnblogs.com/huangfox/p/3542858.html
Copyright © 2020-2023  润新知