elasticsearch有豐富的客戶端,java客戶端有Jest。其原文介紹以下:java
Jest is a Java HTTP Rest client for ElasticSearch.It is actively developed and tested by Searchly.git
[http://www.searchly.com/documentation/developer-api-guide/java-jest/]github
下面咱們作一個很簡單的實例,如下幾個功能:api
1)批量添加1000個user對象;app
2)經過id進行查詢;elasticsearch
3)經過name進行查詢;ide
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,以下:ui
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(); } }
測試類:this
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(); } }