当前位置: 首页 > 面试题库 >

Elasticsearch数组属性必须包含给定的数组项

庾和昶
2023-03-14
问题内容

我的文件看起来像:

{
    "tags" => [
        "tag1",
        "tag2",
    ],
    "name" => "Example 1"
}

{
    "tags" => [
        "tag1",
        "tag3",
        "tag4"
    ],
    "name" => "Example 2"
}

我现在想要的是进行术语搜索,其中给定数组可能看起来像:

[tag1, tag3]

预期命中应在哪里:

{
    "tags" => [
        "tag1",
        "tag3",
        "tag4"
    ],
    "name" => "Example 2"
}

但是,当我执行类似的查询时:

GET _search
{
    "query": {
        "filtered": {
           "query": {
               "match_all": {}
           },
           "filter": {
               "bool": {
                   "must": [
                      {
                          "terms": {
                             "tags": [
                                "tag1",
                                "tag3"
                             ]
                          }
                      }
                   ]
               }
           }
       }
    }
}

由于示例1和示例2都包含tag1或tag3,因此获得了“示例1”和“示例2”作为匹配。通过查看文档中的术语,我发现术语实际上是一个包含查询。

在这种情况下,如何在使用tag1和tag3查询时确保示例2是唯一匹配项?


问题答案:

您需要通过添加到过滤器来将
执行模式 设置为 “和” ,以便所有术语都必须包含在文档中才能被视为匹配项"execution": "and"``terms

GET _search
{
   "query": {
      "filtered": {
         "query": {
            "match_all": {}
         },
         "filter": {
            "terms": {
               "tags": [
                  "tag1",
                  "tag3"
               ],
               "execution": "and"
            }
         }
      }
   }
}

这实际上bool must与使用所有术语的合集构建过滤器相同,但形式更紧凑。



 类似资料:
  • 问题内容: 我有一个像 如何检查此数组以查看Magenic是否存在?除非必须,否则我不想循环播放。我正在处理几千条记录。 更新 由于这是一个受欢迎的帖子,所以我想分享一些新发现。看来@CAFxX已经分享了!我应该更经常阅读这些内容。 借助 ECMAScript 2015 ,使用新的箭头功能甚至更加简单: 问题答案: 2018 edit :这个答案来自2011,当时浏览器没有广泛支持数组过滤方法和箭

  • null null null 我只是不知道如何将两者结合起来,这样小数点后才是强制性的。 我如何解决这个问题?

  • 我正在尝试使用DynamoDB JavaScript shell创建一个简单的表,我得到了这个异常: 下面是我试图创建的表: 但是,如果我将第二个属性添加到KeySchema,它就可以正常工作。a工作台下方: 我不想将范围添加到密钥架构。知道怎么修吗?

  • 我在laravel上有一个注册和登录系统,没有电子邮件验证。今天,我想使用以下指南添加电子邮件验证:https://mailtrap.io/blog/laravel-email-verification/完成所有操作后,我尝试注册一个用户,但出现了错误“传递到App\Http\Controllers\Auth\RegisterController::validator()的参数1必须是在第32行的

  • 这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小。 输出如下: (2, 3) 示例 2 # 这会调整数组大小 import numpy as np a = np.array([[1,2,3],[4,5,6]]) a.shape = (3,2) 输出如下: [[1, 2] [3, 4] [5, 6]] NumPy 也提供了reshape函数来调整数组大小。 import n

  • 问题内容: 我有一套文件,例如 如标题中所述:是否可以使用Nest过滤包含给定标签的所有文档? 例如,上面的记录将匹配[‘c’,’d’] 还是应该手动构建多个“ OR”? 问题答案: 编辑:下面的位集可能是有趣的读物,但答案本身有点过时。 其中一些功能在2.x中有所变化。Slawek还在另一个答案中指出,在这种情况下,查询是使搜索干燥的一种简便方法。最后重构为当前最佳实践。—nz 您可能需要带有子