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

时间:2015-05-26 00:31:19

标签: elasticsearch search-engine

我尝试使用Elasticsearch返回在两个字段中具有不同字词的文档。不知道怎么写这个会是这样的:

/var/folder

理想情况下,术语集是字符串数组。我希望所有术语和字段命中都是ORed,这样最好的文档会在每个字段中都有所有匹配,但如果任何字段没有,那就没问题。

2 个答案:

答案 0 :(得分:1)

您可以尝试尝试类似下面的查询。这是一个非常简单的查询,可以查找文档,其field1匹配term set onefield2匹配very different term set two。你不需要指定一个术语数组,因为ES会在分析阶段为你做这件事,即它需要term set one并将其分解为标记term,{{ 1}}和set并将其与one匹配。同样,对于field1

另请注意,我已经指定了field2运算符,即使它是默认的,只是为了说明存在or,您是否也需要它。

and

尝试一下,让我们知道它是怎么回事。

答案 1 :(得分: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"
                  ]
               }
            }
         ]
      }
   }
}