elasticsearch针对两个字段搜索两组术语

ac1kyiln  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(2)|浏览(423)

我正在尝试使用elasticsearch返回在两个字段中具有不同术语的文档。不知道怎么写这个,可能是这样的:

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

理想情况下,术语集应该是字符串数组。我希望所有的条款和字段点击率被或,这样最好的文件将有所有点击率在每个领域,但如果任何领域没有,那就可以了。

bq9c1y66

bq9c1y661#

您可以从尝试下面的查询开始。这是一个非常简单的查询,可以找到 field1 比赛 term set one 或者 field2 比赛 very different term set two . 您不需要指定一个术语数组,因为es将在分析阶段为您提供帮助,即需要 term set one 把它分解成代币 term , set 以及 one 把它们和 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
    }
  }
}

试试看,让我们知道进展如何。

wn9m85ua

wn9m85ua2#

你可以用 Terms Query 以及 bool should 为了实现这一点,假设您希望在不进行分析的情况下匹配精确的值。世界之美 Terms Query 它隐式地处理一个值数组,并且隐式地是一个 OR 操作。

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

相关问题