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(); } }