zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    第二十一章流 1流的操作 简单
    第二十章友元类与嵌套类 1友元类 简单
    第十九章 19 利用私有继承来实现代码重用 简单
    第二十章友元类与嵌套类 2嵌套类 简单
    第十九章 8链表类Node 简单
    第二十一章流 3用cin输入 简单
    第十九章 10 图书 药品管理系统 简单
    第十九章 11图书 药品管理系统 简单
    第二十一章流 4文件的输入和输出 简单
    第十九章 12 什么时候使用私有继承,什么时候使用包含 简单
  • 原文地址:https://www.cnblogs.com/zeenzhou/p/11497948.html
Copyright © 2011-2022 走看看