SpringBoot:Java High Level REST Client 搜索 API
程序员文章站
2023-11-23 10:31:52
Springboot整合最新版elasticSearch参考之前的文章: "SpingBoot:整合ElasticSearch 7.2.0" Search API SearchRequest用于与搜索文档,聚合,建议有关的任何操作,还提供了在结果文档上请求突出显示的方法. 在最基本的形式中,我们可以 ......
springboot整合最新版elasticsearch参考之前的文章:spingboot:整合elasticsearch 7.2.0
search api
searchrequest用于与搜索文档,聚合,建议有关的任何操作,还提供了在结果文档上请求突出显示的方法.
在最基本的形式中,我们可以向请求添加查询:
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);
optional arguments
我们先来看一下searchrequest
一些可选参数:
searchrequest searchrequest = new searchrequest("posts"); //将请求限制为索引
还有一些其他有趣的可选参数:
searchrequest.routing("routing"); // 设置路由参数
什么是 routing 参数?
当索引一个文档的时候,文档会被存储在一个主分片上。在存储时一般都会有多个主分片。elasticsearch 如何知道一个文档应该放置在哪个分片呢?这个过程是根据下面的这个公式来决定的:
shard = hash(routing) % number_of_primary_shards
-
routing
是一个可变值,默认是文档的_id
,也可以设置成一个自定义的值 -
number_of_primary_shards
是主分片数量
所有的文档 api 都接受一个叫做 routing
的路由参数,通过这个参数我们可以自定义文档到分片的映射。一个自定义的路由参数可以用来确保所有相关的文档——例如所有属于同一个用户的文档——都被存储到同一个分片中。
searchrequest.indicesoptions(indicesoptions.lenientexpandopen()); // 设置`indicesoptions`控制如何解析不可用的索引以及如何扩展通配符表达式 searchrequest.preference("_local"); // 使用首选项参数例如执行搜索以优先选择本地分片. 默认是跨分片随机化.
using the searchsourcebuilder
控制搜索行为的大多数选项都可以在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);
官方文档:
作者:onlooker
来源:三无青年博客
原文:
版权声明:本文为博主原创文章,转载请附上博文链接!
推荐阅读
-
SpringBoot:Java High Level REST Client 搜索 API
-
Java High Level REST Client 使用教程
-
SpringBoot:Java High Level REST Client 搜索 API
-
整合elasticsearch-rest-high-level-client报错nested exception is java.lang.NoSuchFieldError:IGNORE_DEPREC
-
Java High Level REST Client 使用教程
-
整合elasticsearch-rest-high-level-client报错nested exception is java.lang.NoSuchFieldError:IGNORE_DEPREC