ElasticSearch - 使用 FilterBuilders

2023-12-20

我是 ElasticSearch 和 Couchbase 的新手。我正在构建一个示例 Java 应用程序来了解有关 ElasticSearch 和 Couchbase 的更多信息。

正在阅读ElasticSearch Java API http://www.elasticsearch.org/guide/reference/query-dsl/,过滤器更适合在不需要按分数排序的情况下以及用于缓存的情况下使用。 我仍然没有弄清楚如何使用 FilterBuilders 并有以下问题:

  • Can FilterBuilders单独使用可以搜索吗?
  • 或者它们是否总是必须与Query? (如果属实,有人可以举个例子吗?)
  • 浏览文档时,如果我想根据字段值执行搜索并想使用 FilterBuilders,我该如何实现呢? (使用AndFilterBuilder or TermFilterBuilder or InFilterBuilder?我不太清楚他们之间的区别。)

对于第三个问题,我实际上通过使用查询和过滤器的搜索进行了测试,如下所示。 当我尝试使用搜索时,我得到空结果(没有行)FilterBuilders。我不确定我做错了什么。

任何例子都会有帮助。我在浏览文档时遇到了困难,我发现这些文档很少,甚至搜索导致了各种不可靠的用户论坛。

private void processQuery() {
        SearchRequestBuilder srb = getSearchRequestBuilder(BUCKET);
        QueryBuilder qb = QueryBuilders.fieldQuery("doc.address.state", "TX");
        srb.setQuery(qb);

        SearchResponse resp = srb.execute().actionGet();
        System.out.println("response :" + resp);
    }

private void searchWithFilters(){
        SearchRequestBuilder srb = getSearchRequestBuilder(BUCKET);
        srb.setFilter(FilterBuilders.termFilter("doc.address.state", "tx"));
        //AndFilterBuilder andFb = FilterBuilders.andFilter();
        //andFb.add(FilterBuilders.termFilter("doc.address.state", "TX")); 
        //srb.setFilter(andFb);
        SearchResponse resp = srb.execute().actionGet();
        System.out.println("response :" + resp);
    }

--更新 -

正如答案中所建议的,更改为小写“tx”是可行的。这个问题解决了。我还有以下问题:

  • 在什么场景下,过滤器与查询一起使用?这将达到什么目的?
  • 之间的区别InFilter, TermFilter and MatchAllFilter。任何插图都会有所帮助。

是的,您应该使用过滤器来排除执行查询时考虑的文档。过滤器速度更快,因为它们不涉及任何评分,并且也可缓存。

也就是说,很明显你必须使用带有以下内容的过滤器:搜索API http://www.elasticsearch.org/guide/reference/api/search/,它执行查询并接受可选的过滤器。如果您只有一个过滤器,则可以使用全部匹配 http://www.elasticsearch.org/guide/reference/query-dsl/match-all-query/与您的过滤器一起查询。过滤器可以是简单的过滤器,也可以是复合过滤器,以便将多个过滤器组合在一起。

关于Java API http://www.elasticsearch.org/guide/reference/java-api/,使用的名称是可用的过滤器的名称,没有太大区别。看一下这个搜索示例 http://www.elasticsearch.org/guide/reference/java-api/search/例如。在你的代码中我看不到你在哪里做setFilter在你的SearchRequestBuilder目的。您似乎也不需要 and 过滤器,因为您使用的是单个过滤器。此外,您可能正在使用默认映射进行索引,因此术语“TX”是小写的。这就是为什么当您使用术语过滤器搜索时找不到任何匹配项。尝试搜索小写的“tx”。

如果您想在索引时保留“TX”术语,您可以更改映射,可能将该字段设置为not_analyzed如果它应该只是一个令牌。否则,您可以更改过滤器,您可能想查看分析的查询,以便以与内容索引相同的方式分析您的查询。

看看查询 DSL 文档 http://www.elasticsearch.org/guide/reference/query-dsl/有关查询和过滤器的更多信息:

  • MatchAllFilter http://www.elasticsearch.org/guide/reference/query-dsl/match-all-filter/:匹配您的所有文档,但我想说没那么有用
  • TermFilter http://www.elasticsearch.org/guide/reference/query-dsl/term-filter/:过滤字段包含术语的文档(未分析)
  • AndFilter http://www.elasticsearch.org/guide/reference/query-dsl/and-filter/:复合过滤器用于放入两个或多个过滤器

不知道你的意思InFilterBuilder,找不到任何具有此名称的过滤器。

查询通常包含用户通过文本搜索框输入的内容。过滤器是细化搜索的更多方式,例如单击构面条目。这就是为什么您仍然需要查询加上一个或多个过滤器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch - 使用 FilterBuilders 的相关文章

随机推荐

  • 如何在摩纳哥编辑器中添加打开下拉菜单的操作?

    我知道如何在 Monaco 编辑器的上下文菜单中添加条目 editor addAction 如何添加打开下拉列表的操作作为 命令面板 操作 正如中提到的这个问题 https github com Microsoft monaco edito
  • 使用终端,如何让 OS X 使用 PHP 的 MAMP 版本

    我目前正在学习 Yii 框架 昨天运行的教程之一要求我测试项目的数据库连接 这里的细节并不是太重要 但基本上当我运行 shell 并输入命令时 它会抛出如下错误 server trackstar charlieryan protected
  • Windows 服务的心跳活动

    我有许多 Windows 服务 用 C 4 0 编写 它们以不同的时间间隔连接到数据库并执行各种复杂的任务 其中一些任务每天仅每隔 X 小时发生一次 但是 服务器支持团队想知道 Windows 服务是否确实在运行 因为任务之间可能存在很大的
  • Logstash:是否可以将文档保存在内存中?

    我正在尝试将数据保存在内存中 以便能够在过滤器部分中快速检索 事实上 当我收到新文档时 我想检索以前的相关文档以计算一些新指标 谁能告诉我这是否可能 如果是 我怎样才能实现这一目标 非常感谢 Joe 实现这一目标最接近的方法是使用elast
  • 如何使用另一个表中的随机行更新表的每一行

    我正在构建我的第一个去识别脚本 但我的方法遇到了问题 我有一张桌子dbo pseudonyms whose firstname列填充有 200 行数据 此 200 行列中的每一行都有一个值 无空值 这个表还有一个id数字为 1 200 的列
  • React & Clarifai:未捕获的 ReferenceError:流程未定义

    我正在使用 Clarifai API 中的人脸检测模型构建一个 React 应用程序 当我import Clarifai from clarifai VS Code 提示我此警告 Could not find a declaration f
  • 如何使用python从gs存储桶中获取文件数量

    我想计算 gs 存储桶中的文件数量 该存储桶的文件夹名为我的文件管理器 假设项目名称为PrName存储桶名称是测试文件那么我如何使用 python 3 读取该存储桶中存在的文件数量 你可以使用方法 list blobs 在您的存储客户端上计
  • PHP自定义基于字符串出现次数的排序函数?

    假设我有一个数组 arr array Animal Dog Subject Physics Place Tokyo Sport Tennis 我想要usort具有以下标准 如果它包含tokyo排名第一 如果包含tennis排名第二 如果包含
  • JSON key 可以是字符串或对象

    我想解析一些 JSON 但其中一个键要么是字符串 要么是对象 这是我当前的结构 https github com PhillippOhlandt pmtoapib blob master CollectionItemRequest go L
  • 什么是 objc_msgSend 以及为什么它占用如此多的处理时间?

    我一直在分析我的回合制游戏应用程序 并且遇到了一个有趣的 也许 问题 根据下图 似乎objc msgSend占用了我的应用程序运行时间的近一分钟 这是什么 这是代码写得不好的标志吗 谢谢 正如 user1118321上面所说 objc ms
  • 在设计时设置复合 WF4 活动的内部属性

    我想创建一个复合 Windows 工作流活动 在 NET 4 下 其中包含预定义的 ReceiveAndSendReply 活动 有些属性是预定义的 但其他属性 特别是 ServiceContractName 需要在设计器中设置 我可以将其
  • 如何(正确)在 AWS Lambda 函数中使用外部凭证?

    我有一个用 Python 编写的 非常基本但工作完美 AWS lambda 函数 但是它具有要连接到的嵌入式凭据 1 外部网络服务 2 DynamoDB 表 该函数的作用相当基本 它针对服务发布登录信息 使用凭证 1 然后将部分响应状态保存
  • 有人可以解释一下这个 bash 命令吗?

    从网站上可以看到RVM https rvm io bash lt lt curl https rvm io releases rvm install head 第一个小于号有什么作用 关于 lt 我知道这是一个愚蠢的问题 但我很想了解这一点
  • 有关 XML 布局标签属性的 Android SDK 信息

    我正在研究 Android SKD 文档 我想知道在哪里可以找到有关定义应用程序界面布局时使用的 XML 标签属性的信息 例如安卓 名称 安卓 id class 片段标签的属性等 我在参考文档中找不到它们 该文档仅列出了 Java 类的文档
  • Django:ValueError:以 10 为基数的 int() 的文字无效:

    我正在尝试 django 中的一些东西 只是一个简单的表单 它将添加每次登录数据库的尝试 它导致 ValueError invalidliteral for int with base 10 我已经检查了很多问题 但无法克服此错误 我有这样
  • 真正的客户端 HTML 包括

    HTML 不支持客户端包含其他 HTML 例如使用 C 获取 include指示 相反 客户端 HTML 包含的主要工具似乎是iframe object 尤其是 jQuery 的 load See 这个线程 https stackoverf
  • 如何在HTML页面中播放视频

    我正在尝试在 HTML 页面上播放 mp4 视频 我搜索了网络并发现在 HTML5 中我可以使用video像下面这样的标签
  • 在 Clojure 中如何迭代直到达到固定点?

    我经常处于这样的位置 我的代码如下所示 iterate improve x 我正在寻找第一个值 该值不再比前一个值有所改进 两者都不filter nor take while帮助他们找到一个明显的解决方案 然而 我犹豫着要不要写出来 loo
  • mpld3:如何使用插件更改工具栏的位置?

    mpld3 显示的工具栏通常位于屏幕的右下角 我希望它位于屏幕的右上角 似乎可以找到控制工具栏位置的代码here https github com jakevdp mpld3 blob cec043807d18d788221455f1933
  • ElasticSearch - 使用 FilterBuilders

    我是 ElasticSearch 和 Couchbase 的新手 我正在构建一个示例 Java 应用程序来了解有关 ElasticSearch 和 Couchbase 的更多信息 正在阅读ElasticSearch Java API htt