Elasticsearch 针对两个字段的两组术语

Elasticsearch two sets of terms against two fields

我正在尝试使用 Elasticsearch 来 return 在两个领域有不同术语的文档。不知道怎么写,应该是这样的:

query:
    field1: "term set #1"
    field2: "very different term set #2"

理想情况下,术语集应该是字符串数组。我希望对所有术语和字段匹配进行 ORed,以便最好的文档在每个字段中都有所有匹配,但如果任何字段有 none,那没问题。

您可以先尝试类似下面的查询。这是一个非常简单的查询,将查找 field1 匹配 term set onefield2 匹配 very different term set two 的文档。您不需要指定术语数组,因为 ES 会在分析阶段在幕后为您完成,即它将采用 term set one 并将其分解为标记 termsetone 并将它们与 field1 进行匹配。同样,对于 field2

另请注意,我已经指定了 or 运算符,尽管它是默认运算符,只是为了说明还有一个 and,您在某些时候是否需要它。

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "field1": "term set one",
            "operator": "or"
          }
        },
        {
          "match": {
            "field2": "very different term set two",
            "operator": "or"
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

试一试,告诉我们进展如何。

您可以使用 Terms Querybool should 来实现这一点,假设您希望在不进行分析的情况下匹配准确的值。 Terms Query 的美妙之处在于它隐含地处理一组值,并且它隐含地是一个 OR 操作。

{
   "query": {
      "bool": {
         "should": [
            {
               "terms": {
                  "field1": [
                     "field1 value1",
                     "field1 value2",
                     "field1 value3"
                  ]
               }
            },
            {
               "terms": {
                  "field2": [
                     "field2 value1",
                     "field2 value2",
                     "field2 value3"
                  ]
               }
            }
         ]
      }
   }
}