• SearchRequest用于与搜索文档、聚合、定制查询有关的任何操作


    SearchRequest用于与搜索文档、聚合、定制查询有关的任何操作,还提供了在查询结果的基于上,对于匹配的关键词进行突出显示的方法。

    1,首先创建搜索请求对象:
    SearchRequest searchRequest = new SearchRequest();
    2,对搜索请求进行基本参数设置
    1)设置查询指定的某个文档库:

    SearchRequest searchRequest = new SearchRequest("posts");
    searchRequest.types("doc");
    2)查询多个文档库,其中多个文档库名之间用逗号隔开

    SearchRequest searchRequest = new SearchRequest("posts2","posts", "posts2", "posts1");
    或者这样设置:

    SearchRequest searchRequest = new SearchRequest();
    // 指定只能在哪些文档库中查询:可以添加多个且没有限制,中间用逗号隔开
    searchRequest.indices("posts2","posts", "posts2", "posts1");
    默认是去所有文档库中进行查询

    3)指定查询的文档库中的文档类型:

    searchRequest.types("doc1");
    或多种类型,同样是文档类型之间用逗号隔开:

    searchRequest.types("doc1", "doc1", "doc2");
    4)设置指定查询的路由分片

    searchRequest.routing("routing");
    5)用preference方法去指定优先去某个分片上去查询(默认的是随机先去某个分片)

    searchRequest.preference("_local");
    6)向主搜索请求中可以添加搜索内容的特征参数

    a.创建  搜索内容参数设置对象:SearchSourceBuilder

    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    b. 将SearchSourceBuilder对象添加到搜索请求中:

    searchRequest.source(searchSourceBuilder);
    3,为搜索的文档内容对象SearchSourceBuilder设置参数:
           大多控制搜索内容的行为参数都可以在SearchSourceBuilder上进行设置,SearchSourceBuilder包含与Rest API的搜索请求主体中类似的参数选项。 以下是一些常见选项的几个示例:

    1)查询包含指定的内容:

    a.查询所有的内容

    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    b.查询包含关键词字段的文档:如下,表示查询出来所有包含user字段且user字段包含kimchy值的文档

    sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy"));
    c.上面是基于QueryBuilders查询选项的,另外还可以使用MatchQueryBuilder配置查询参数

    MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("user", "kimchy");
    // 启动模糊查询
    matchQueryBuilder.fuzziness(Fuzziness.AUTO);
    // 在匹配查询上设置前缀长度选项
    matchQueryBuilder.prefixLength(3);
    // 设置最大扩展选项以控制查询的模糊过程
    matchQueryBuilder.maxExpansions(10);
    d.也可以使用QueryBuilders实用程序类创建QueryBuilder对象。此类提供了可用于使用流畅的编程样式创建QueryBuilder对象的辅助方法:

    QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("user", "kimchy")
    .fuzziness(Fuzziness.AUTO)
    .prefixLength(3)
    .maxExpansions(10);
    注:无论用于创建它的方法是什么,都必须将QueryBuilder对象添加到SearchSourceBuilder
    searchSourceBuilder.query(matchQueryBuilder);
    3)设置查询的起始索引位置和数量:如下表示从第1条开始,共返回5条文档数据

    sourceBuilder.from(0);
    sourceBuilder.size(5);
    4)设置查询请求的超时时间:如下表示60秒没得到返回结果时就认为请求已超时

    sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
    5)默认情况下,搜索请求会返回文档_source的内容,但与Rest API中的内容一样,您可以覆盖此行为。例如,您可以完全关闭_source检索:

    sourceBuilder.fetchSource(false);
    该方法还接受一个或多个通配符模式的数组,以控制以更精细的方式包含或排除哪些字段

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

    本节内容待续,敬请关注 ...
    ————————————————
    版权声明:本文为CSDN博主「未名who」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_2300688967/article/details/83902943

  • 相关阅读:
    Linux中gdb 查看core堆栈信息
    爱因斯坦名言
    Symbian OS 源码下载方式
    Windows 2003+VS2005+SP1 “无法使用此产品的安装源,请确认安装源存在,并且您可以访问它”的错误
    Visual Studio 2012 Ultimate RTM 序列号
    STL容器erase的使用陷阱
    C++ 迭代器失效
    C++ 类的静态成员详细讲解[静态成员变量链接错误]
    Ubuntu 启动黑屏解决
    android中KSOAP2中的anytype{}问题
  • 原文地址:https://www.cnblogs.com/zeenzhou/p/11497948.html
Copyright © 2020-2023  润新知