当前位置:   article > 正文

Elasticsearch Java Rest Client (Search API)官方文档中文翻译_java-elasticsearch官方文档

java-elasticsearch官方文档

目录

Search API   elasticsearch官方文档

一、SearchRequest

1 基本调用

2 SearchRequest的参数说明

2.1 将请求范围限定指定为user索引

2.2 设置查询的路由分片

2.3 指定优先从某个分片去查询

3 searchSourceBuilder

3.1 searchSourceBuilder基本调用方法

4 Building queries 设置查找条件

4.1 创建QueryBuilder:

4.2 配置QueryBuilder参数

4.3 将QueryBuilder对象都必须添加到SearchSourceBuilder

5 排序

6过滤数据源

7高亮请求

8聚合请求

9建议请求

二、SearchResponse

1请求本身的信息,如 HTTP 状态码,执行时间,或者请求是否超时

2查询影响的分片数量的统计信息,成功和失败的分片

3检索 SearchHits(命中数据)

3.1获取hits

3.2 SearchHits 中包含了所有命中的全局信息,如查询命中的数量或者最大分值

3.3查询每一条命中数据的信息如index、type、id、score

3.4以map形式获取命中内容


Search API   elasticsearch官方文档

一、SearchRequest

用于与搜索文档、聚合、建议相关的任何操作,还提供了请求突出显示结果文档的方法

1 基本调用

  1. SearchRequest searchRequest = new SearchRequest(); //1
  2. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //2
  3. searchSourceBuilder.query(QueryBuilders.matchAllQuery()); //3
  4. searchRequest.source(searchSourceBuilder); //4

                1创建搜索请求。如果没有参数,这将对所有索引运行。

                2大多数搜索参数都添加到SearchSourceBuilder中。它为进入搜索请求主体的所有内容提供了setter。

                3向SearchSourceBuilder添加一个match_all查询。

                4将SearchSourceBuilder添加到SearchRequest。

2 SearchRequest的参数说明

2.1 将请求范围限定指定为user索引

SearchRequest searchRequest = new SearchRequest("user"); 
 searchRequest.indices("banl","hh");

2.2 设置查询的路由分片

searchRequest.routing("routing"); 

2.3 指定优先从某个分片去查询

searchRequest.preference("_local"); 

3 searchSourceBuilder

大多数控制搜索行为的选项都可以在SearchSourceBuilder上设置,它或多或少包含与RESTAPI的搜索请求正文中的选项等效的选项。

3.1 searchSourceBuilder基本调用方法

  1. SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); //1
  2. sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy")); //2
  3. sourceBuilder.from(0); //3
  4. sourceBuilder.size(5); //4
  5. sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); //5

                1使用默认选项创建SearchSourceBuilder。

                2设置查询。可以是任何类型的QueryBuilder

                3设置“从”选项,该选项确定要从中开始搜索的结果索引。默认值为0。

                4设置大小选项,该选项确定要返回的搜索命中数。默认值为10。

                5设置一个可选超时,用于控制允许搜索的时间。

在此之后,只需将SearchSourceBuilder添加到SearchRequest

4 Building queries 设置查找条件

搜索查询是使用QueryBuilder对象创建的。Elasticsearch的查询DSL支持的每种搜索查询类型都有一个QueryBuilder。

4.1 创建QueryBuilder:

MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("user", "kimchy"); //1

                1创建一个全文匹配查询,在字段“user”上匹配文本“kimchy”。

4.2 配置QueryBuilder参数

创建后,QueryBuilder对象提供了配置其创建的搜索查询选项的方法:

  1. matchQueryBuilder.fuzziness(Fuzziness.AUTO); //1
  2. matchQueryBuilder.prefixLength(3); //2
  3. matchQueryBuilder.maxExpansions(10); //3

                

                1在匹配查询上启用模糊匹配    例如,搜索 quick brown fox 时会匹配一个包含 fast brown foxes 的文档

                2在匹配查询上设置前缀长度选项

                3设置最大扩展选项以控制查询的模糊过程                

还可以使用QueryBuilders实用程序类创建QueryBuilder对象。此类提供了可用于使用流畅编程风格创建QueryBuilder对象的帮助器方法:

  1. ueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("user", "kimchy")
  2. .fuzziness(Fuzziness.AUTO)
  3. .prefixLength(3)
  4. .maxExpansions(10);

4.3 将QueryBuilder对象都必须添加到SearchSourceBuilder

无论使用何种方法创建它,QueryBuilder对象都必须添加到SearchSourceBuilder,如下所示:

searchSourceBuilder.query(matchQueryBuilder);

5 排序

SearchSourceBuilder允许添加一个或多个SortBuilder实例。有四种特殊实现(Field、Score、GeoDistance和ScriptSortBuilder)

  1. sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC)); //1
  2. sourceBuilder.sort(new FieldSortBuilder("id").order(SortOrder.ASC)); //2

                1按分数递减排序(默认值)

                2按_id字段升序排序   

                添加多个则都起作用 上面代码则是按照分数排序也按照id排序

6过滤数据源

默认情况下,查询请求会返回文档的内容 _source ,当然我们也可以配置它。例如,禁止对 _source 的获取

sourceBuilder.fetchSource(false);

也可以使用通配符模式以更细的粒度包含或排除特定的字段:

  1. String[] includeFields = new String[] {"title", "user", "innerObject.*"};
  2. String[] excludeFields = new String[] {"_type"};
  3. sourceBuilder.fetchSource(includeFields, excludeFields);

7高亮请求

可以通过在 SearchSourceBuilder 上设置 HighlightBuilder 完成对结果的高亮,而且可以配置不同的字段具有不同的高亮行为

  1. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  2. HighlightBuilder highlightBuilder = new HighlightBuilder();
  3. HighlightBuilder.Field highlightTitle =
  4. new HighlightBuilder.Field("title"); // title 字段高亮
  5. highlightTitle.highlighterType("unified"); // 配置高亮类型
  6. highlightBuilder.field(highlightTitle); // 添加到 builder
  7. HighlightBuilder.Field highlightUser = new HighlightBuilder.Field("user");
  8. highlightBuilder.field(highlightUser);
  9. searchSourceBuilder.highlighter(highlightBuilder);

8聚合请求

要实现聚合请求分两步

  1. 创建合适的 ``AggregationBuilder`
  2. 作为参数配置在 ``SearchSourceBuilder` 上
  1. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  2. TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_company")
  3. .field("company.keyword");
  4. aggregation.subAggregation(AggregationBuilders.avg("average_age")
  5. .field("age"));
  6. searchSourceBuilder.aggregation(aggregation);

9建议请求

SuggestionBuilder 实现类是由 SuggestBuilders 工厂类来创建的

  1. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  2. SuggestionBuilder termSuggestionBuilder =
  3. SuggestBuilders.termSuggestion("user").text("kmichy");
  4. SuggestBuilder suggestBuilder = new SuggestBuilder();
  5. suggestBuilder.addSuggestion("suggest_user", termSuggestionBuilder);
  6. searchSourceBuilder.suggest(suggestBuilder);

二、SearchResponse

查询执行完成后,会返回 SearchResponse 对象,并在对象中包含查询执行的细节和符合条件的文档集合

1请求本身的信息,如 HTTP 状态码,执行时间,或者请求是否超时

  1. RestStatus status = searchResponse.status(); // HTTP 状态码
  2. TimeValue took = searchResponse.getTook(); // 查询占用的时间
  3. Boolean terminatedEarly = searchResponse.isTerminatedEarly(); // 是否由于 SearchSourceBuilder 中设置 terminateAfter 而过早终止
  4. boolean timedOut = searchResponse.isTimedOut(); // 是否超时

2查询影响的分片数量的统计信息,成功和失败的分片

  1. int totalShards = searchResponse.getTotalShards();
  2. int successfulShards = searchResponse.getSuccessfulShards();
  3. int failedShards = searchResponse.getFailedShards();
  4. for (ShardSearchFailure failure : searchResponse.getShardFailures()) {
  5. // failures should be handled here
  6. }

3检索 SearchHits(命中数据)

3.1获取hits

SearchHits hits = searchResponse.getHits();

3.2 SearchHits 中包含了所有命中的全局信息,如查询命中的数量或者最大分值

  1. long totalHits = hits.getTotalHits();
  2. float maxScore = hits.getMaxScore();

3.3查询每一条命中数据的信息如index、type、id、score

  1. SearchHit[] searchHits = hits.getHits();
  2. for (SearchHit hit : searchHits) {
  3. String index = hit.getIndex();
  4. String type = hit.getType();
  5. String id = hit.getId();
  6. float score = hit.getScore();
  7. }

3.4以map形式获取命中内容

  1. String sourceAsString = hit.getSourceAsString();
  2. Map<String, Object> sourceAsMap = hit.getSourceAsMap();
  3. String documentTitle = (String) sourceAsMap.get("title");
  4. List<Object> users = (List<Object>) sourceAsMap.get("user");
  5. Map<String, Object> innerObject =
  6. (Map<String, Object>) sourceAsMap.get("innerObject");

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/457697
推荐阅读
相关标签
  

闽ICP备14008679号