当前位置: 首页 > 知识库问答 >
问题:

在elasticsearch中,必须匹配数组中的一个,具有可选的额外查询项

上官高翰
2023-03-14

我试图创建一个弹性搜索查询,它必须匹配单独字段上的三个查询之一,并且还有一个额外的查询,而不是需要匹配的。执行bool查询和Must子句的问题是,它必须匹配所有3个,而使用'应该'时,它并不总是匹配所需的,除非使用minimum_should_match设置为2。在这种情况下,由于最小匹配,它在匹配3个必需文档之一的文档上不匹配。

我当前的查询是这样的(对不起,这里没有代码)

query-bool-必须-query 1-query 2-query 3-应该-query 4

我也尝试了以下方法,但它没有使第四个查询成为可选的

查询-bool-应该-查询1-查询2-查询3-查询4-minimum_should_match: 2

如何创建一个必须与三个查询中的一个匹配的查询,并有选择地将第四个查询的级别提高。

共有1个答案

孔砚
2023-03-14

嵌套bool查询应该会得到您想要的结果。我们需要匹配查询1、查询2或查询3,同时可以选择匹配查询4。

"query": {
    "bool": {
        "must": [
           {
               "bool": {
                   "should": [
                      {
                          //query1
                      },
                      {
                          //query2
                      },
                      {
                          //query3
                      }
                   ],
                   "minimum_number_should_match": 1
               }
           }
        ],
        "should": [
           {
               //query4
           }
        ]
    }
}

查询必须至少匹配查询1到查询3的一个should子句,并且可以选择匹配查询4。

同时匹配查询1、2、3和4的文档将排名最高,因为我假设您不是指独占或。

 类似资料:
  • 问题内容: 前几天,我接受了亚马逊的采访,他们问我一个问题,涉及以下问题。 给定2个整数数组,其中包含任意数量的正负元素,请查找出现在两个数组中的数字。 我能够非常轻松地解决此问题,因此它将具有计算复杂性,但是不幸的是,这还将具有空间复杂性。可以通过遍历每个数组中的所有元素而无需额外的内存来完成此操作,但这将是。 在我解释完该方法之后,面试官问我是否可以想到一种在计算上为O(n)但不会使用任何额外

  • 我想要找到一个文件的名称包含'Bob',并有一个位置在'paducah'或'smyrna'。 以下是我现在所拥有的: 我知道问题出在location数组上,因为如果我将它改为一个没有数组的元素,那么查询就可以正常工作。 这是我能找到的最接近的答案。 它没有工作,我收到以下错误: [term]查询格式错误,应为[END_OBJECT],但找到[FIELD_NAME]

  • 很抱歉提出这个问题,但ElasticSearch查询可能会令人困惑。。。 目标:创建一个类似谷歌搜索查询的查询。输入的单词越多,得到的匹配结果越少。例如“四川酱”比“木兰四川酱”产生更多的结果。我的索引有一个博客文章类型,它有字段“标题”、“标签”、“类别”。ElasticSearch必须找到与查询中的所有单词相匹配的每个文档。文字可以遍布各个领域。例如,如果一个文档的标题包含“木兰”,它的标签包

  • 我正在使用带有静态编程语言的android持久性库。 Dao看起来像这样 这对我来说似乎很好,但我得到了这个错误 错误:查询中的每个绑定变量必须有一个匹配的方法参数。找不到:countryId的方法参数 我可以看到参数被命名为,那么可能是什么问题呢? 仅供参考:这是CountryDao_I生成的代码mpl.java 在这种方法中,我看到arg0在方法中的任何地方都没有使用。 编辑:这似乎在新插件中

  • 我正在使用android的房间数据库。在我最近更新到静态编程语言1.7.0之前,它一直运行良好。现在我得到以下错误: 这是我的刀: 这是我的身材 当我将Kotlin降级到1.6.21时,它运行良好。这是科特林病毒还是我做错了什么?

  • 我有一个文档结构像上面的对象,我想只返回用户谁有名称'abc',但问题是它匹配名称'abc',但返回所有数组。我只想要匹配的用户。 映射-