ElasticSearch的Java Rest HighLevel Client使用:

  • ES6.3.2
  • Spring Boot 2.0.4
  • Maven 3.5.4

首先强调一点:使用Spring框架结合Maven进行ES导入时,需要对ES版本号先行进行声明,否则Spring默认版本和后续在依赖中的ES版本会报冲突

冲突报错:Java API: java.lang.ClassNotFoundException: org.elasticsearch.common.settings.ImmutableSettings

pom修改位置:

与后续依赖的elasticsearch-rest-high-level-client版本一致。

搜索功能的Java Client

1 创建Client

RestHighLevelClient restHighLevelClient = new RestHighLevelClient(

 RestClient.builder(new HttpHost(hostName,port,"http"))

)

给Client中配入ES集群的ip,端口。

2 构建匹配条件

QueryBuilder queryBuilder = QueryBuilders.termsQuery("model_classification.keyword","需要人工查看","直接推送");
QueryBuilder queryBuilder_title = QueryBuilders.matchQuery("title",keyword).boost(10);

构建了两条匹配条件,第一条匹配doc中的model_classification字段,要求其内容需要为"需要人工查看","直接推送"中的任意一条;第二条匹配doc的title字段,要求其与keyword进行比较,并设置权重10.

3 组合匹配条件

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

首先创建bool匹配条件

boolQueryBuilder.must(queryBuilder);
boolQueryBuilder.should(queryBuilder_title);

将之前构造的匹配条件添加到bool条件中,用must去设定必须满足的条件,should去设置加分项。

3 创建查询

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.fetchSource(new String[]{"id","title","abstract","source","date"},null);
sourceBuilder.query(boolQueryBuilder);
…
sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));
sourceBuilder.sort(new FieldSortBuilder("_id").order(SortOrder.DESC));

在创建的查询中可以设置需要获取的字段,需要匹配的条件等。同时可以设置排序字段,为了避免同分造成的排序振荡现象,建议设置两个字段。

4 创建搜索Request

SearchRequest request = new SearchRequest(indexName);
request.types(typeName);
request.searchType("dfs_query_then_fetch");
request.source(sourceBuilder);

创建Request,设置request针对的index和doc类型,同时设定searchType并将上文构建的查询添加其中。

5 解析反馈结果

SearchResponse response = restHighLevelClient.search(request);
SearchHits hits = response.getHits();
for (SearchHit hit:hits) {
    Map tempSource = hit.getSourceAsMap();
…
}

通过Client发起请求并捕获response,从response中捕捉命中,然后解析命中字段,命中字段中的source为doc中的存储字段,其它为一些ES集群添加的一些功能性字段,如_source等。

你可能感兴趣的:(ElasticSearch的Java Rest HighLevel Client使用:)