我是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查询吗?
谢谢!
答案 0 :(得分:0)
您不能在同一个terms
过滤器中使用多个字词过滤器。试试这个:
POST myindex/type/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"terms" : {
"ref": ["1431007639", "1431007633"]
}
},
{
"terms" : {
"advertiserName": ["Ad1", "ad2"]
}
}
]
}
}
}
}
}
您可以在ES bool filter docs中看到更多内容。