zoukankan      html  css  js  c++  java
  • SpringBoot:Java High Level REST Client 搜索 API

    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);
    

    官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.2/java-rest-high-search.html#java-rest-high-search

    作者:onlooker
    来源:三无青年博客
    原文:https://www.35youth.cn/715.html
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    在Ubuntu18.04.2LTS上安装搜狗输入法
    生活点滴:java基础知识细化
    乘风破浪:LeetCode真题_041_First Missing Positive
    乘风破浪:LeetCode真题_040_Combination Sum II
    乘风破浪:LeetCode真题_039_Combination Sum
    乘风破浪:LeetCode真题_038_Count and Say
    乘风破浪:LeetCode真题_037_Sudoku Solver
    乘风破浪:LeetCode真题_036_Valid Sudoku
    乘风破浪:LeetCode真题_035_Search Insert Position
    乘风破浪:LeetCode真题_034_Find First and Last Position of Element in Sorted Array
  • 原文地址:https://www.cnblogs.com/35youth/p/11411908.html
Copyright © 2011-2022 走看看