Springboot整合最新版elasticSearch参考以前的文章:SpingBoot:整合ElasticSearch 7.2.0html
SearchRequest用于与搜索文档,聚合,建议有关的任何操做,还提供了在结果文档上请求突出显示的方法.java
在最基本的形式中,咱们能够向请求添加查询:elasticsearch
searchRequest = indexName==null?new SearchRequest():new SearchRequest(indexName);//建立SeachRequest . 没有参数,这将针对全部索引运行.
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//大多数搜索参数都添加到SearchSourceBuilder . 它为搜索请求正文中的全部内容提供了setter.
searchSourceBuilder.query(QueryBuilders.matchAllQuery());//将match_all查询添加到SearchSourceBuilder .
searchRequest.source(searchSourceBuilder);//将SearchSourceBuilder添加到SeachRequest .
highLevelClient.search(searchRequest, RequestOptions.DEFAULT);复制代码
咱们先来看一下SearchRequest
一些可选参数:ide
SearchRequest searchRequest = new SearchRequest("posts"); //将请求限制为索引post
还有一些其余有趣的可选参数:ui
searchRequest.routing("routing"); // 设置路由参数spa
什么是 routing 参数?rest
当索引一个文档的时候,文档会被存储在一个主分片上。在存储时通常都会有多个主分片。Elasticsearch 如何知道一个文档应该放置在哪一个分片呢?这个过程是根据下面的这个公式来决定的:code
shard = hash(routing) % number_of_primary_shards复制代码
routing
是一个可变值,默认是文档的 _id
,也能够设置成一个自定义的值 number_of_primary_shards
是主分片数量 全部的文档 API 都接受一个叫作 routing
的路由参数,经过这个参数咱们能够自定义文档到分片的映射。一个自定义的路由参数能够用来确保全部相关的文档——例如全部属于同一个用户的文档——都被存储到同一个分片中。htm
searchRequest.indicesOptions(IndicesOptions.lenientExpandOpen()); // 设置`IndicesOptions`控制如何解析不可用的索引以及如何扩展通配符表达式
searchRequest.preference("_local"); // 使用首选项参数例如执行搜索以优先选择本地分片. 默认是跨分片随机化. 复制代码
控制搜索行为的大多数选项均可以在SearchSourceBuilder
上设置, SearchSourceBuilder
包含与Rest API的搜索请求主体中的选项至关或更少的选项.
如下是一些常见选项的几个示例:
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); // 使用默认选项建立`SearchSourceBuilder`
QueryStringQueryBuilder queryStringQueryBuilder = QueryBuilders._queryStringQuery_("关键词");//搜索关键字
sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy")); // 设置查询. 能够是任何类型的`QueryBuilder`
sourceBuilder.from(0); // 设置肯定结果索引的`from`选项以开始搜索. 默认为0\.
sourceBuilder.size(5); // 设置`size`选项,肯定要返回的搜索命中数. 默认为10\.
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); // 设置一个可选的超时,控制容许搜索的时间. 复制代码
在此以后,只需将SearchSourceBuilder
添加到SearchRequest
:
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("posts");
searchRequest.source(sourceBuilder);复制代码
官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.2/java-rest-high-search.html#java-rest-high-search
做者:onlooker
来源:三无青年博客