Elasticsearch JAVA API大致分如下四类:
1.TransportClient
步骤1:获取client
步骤2:执行对应的增、删、改、查操作
/** * Query Search * @param index * @param type * @param term * @param queryString */ private static void querySearch(String index, String type,String term,String queryString){ Client client = createTransportClient(); SearchResponse response = client.prepareSearch(index) .setTypes(type) // 设置查询类型 // 1.SearchType.DFS_QUERY_THEN_FETCH = 精确查询 // 2.SearchType.SCAN = 扫描查询,无序 // 3.SearchType.COUNT = 不设置的话,这个为默认值,还有的自己去试试吧 .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) // 设置查询关键词 .setQuery(QueryBuilders.matchQuery(term, queryString)) .addHighlightedField(term) .setHighlighterPreTags("<em>") .setHighlighterPostTags("</em>") // 设置查询数据的位置,分页用 .setFrom(0) // 设置查询结果集的最大条数 .setSize(60) // 设置是否按查询匹配度排序 .setExplain(true) // 最后就是返回搜索响应信息 .execute() .actionGet(); SearchHits searchHits = response.getHits(); System.out.println("-----------------在["+term+"]中搜索关键字["+queryString+"]---------------------"); System.out.println("共匹配到:"+searchHits.getTotalHits()+"条记录!"); SearchHit[] hits = searchHits.getHits(); for (SearchHit searchHit : hits) { //获取高亮的字段 Map<String, HighlightField> highlightFields = searchHit.getHighlightFields(); HighlightField highlightField = highlightFields.get(term); System.out.println("高亮字段:"+highlightField.getName()+"\n高亮部分内容:"+highlightField.getFragments()[0].string()); Map<String, Object> sourceAsMap = searchHit.sourceAsMap(); Set<String> keySet = sourceAsMap.keySet(); for (String string : keySet) { //key value 值对应关系 System.out.println(string+":"+sourceAsMap.get(string)); } System.out.println(); } }
2.RestClient
ES5.0引入一个新的客户端RestClient,使用HTTP API elasticsearch代替内部协议,这需要更少依赖,也不需要关注那么多版本。
HttpEntity entity = new NStringEntity( "{ \"query\": { \"match_all\": {}}}", ContentType.APPLICATION_JSON); // alternative: performRequestAsync Response response = restClient.performRequest("POST", "/_search", emptyMap(), entity); String json = toString(response.getEntity()); // ...
3.Jest
Jest是ES的Java HTTP Rest客户端
/** * @brief:全文检索入口 * @throws Exception */ private static void fullTextQuery(String queryString) throws Exception { JestClient jestClient = JestExample.getJestClient(); //工厂模式实现 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.queryStringQuery(queryString)); Search search = new Search.Builder(searchSourceBuilder.toString()) // .addIndex("article") .build(); SearchResult result = jestClient.execute(search); System.out.println(result.getJsonString()); }
4.Spring Data Elasticsearch
...
1)、API对比:http://blog.florian-hopf.de/2016/11/java-clients-elasticsearch.html
2)、官网API地址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.3/index.html
3)、Jest地址:https://github.com/searchbox-io/Jest
4)、代码示例:https://github.com/ameizi/elasticsearch-jest-example