匹配术语分离

时间:2014-12-10 01:22:17

标签: elasticsearch

我是Elasticsearch的新手,发现查询DSL非常笨拙。我试图返回所有匹配2个不同字段的值的文档。这是我构建查询的方式,但它不起作用:

POST myindex/type/_search
{
   "query": {
       "filtered": {
          "filter": {
              "terms": {
                 "ref": ["1431007639", "1431007633"],
                 "advertiserName": ["Ad1", "ad2"]
              }
          }
       }
   }
}

如果有效,则应返回其reffield为1431007639或1431007633的所有文档,以及(union)所有advertiserName为Ad1或Ad2的文档。

如果我遗漏其中一个条件,结果对于单一条件是正确的。当我以这种方式混合这两个条件时,返回的文档数量不正确。

有人能帮我创建一个简单的OR查询吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您不能在同一个terms过滤器中使用多个字词过滤器。试试这个:

POST myindex/type/_search
{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "should": [
                        {
                            "terms" : {
                                "ref": ["1431007639", "1431007633"]
                            }
                        },
                        {
                            "terms" : {
                                "advertiserName": ["Ad1", "ad2"]
                            }
                        }
                    ]
                }
            }
        }
    }
}

您可以在ES bool filter docs中看到更多内容。