一尘不染

带有多个过滤器的ElasticSearch

elasticsearch

我正在尝试建立一个查询,该查询将找到所有用户文档(docType
=用户),然后根据许多过滤器对其进行过滤。例如位置,性别,年龄等。过滤器是根据我正在构建的搜索功能上的用户输入来添加/删除的。

以下没有结果:

{
    "query": {
        "filtered": {
            "query": {
                "match_all": {}
             },
             "filter": {
                 "and": {
                     "filters": 
                     [
                         {
                             "term": {
                                 "doc.docType": "user"
                             }
                         },
                         {
                             "term": {
                                 "doc.data.profile.location" : "CA"
                             }
                         }
                     ]
                 }
             }
        }
    }
}

以下返回结果:

{
    "query": {
        "filtered": {
            "query": {
                "field": {
                    "doc.data.profile.location" : "CA"
                }
             },
             "filter": {
                 "and": {
                     "filters": 
                     [
                         {
                             "term": {
                                 "doc.docType": "user"
                             }
                         }
                     ]
                 }
             }
        }
    }
}

后者虽然返回结果,但从长远来看是行不通的,因为我可能想为年龄,性别等添加一个额外的过滤器,而且我似乎无法添加多个字段。如果我删除位置过滤器,则第一个查询有效。


阅读 411

收藏
2020-06-22

共1个答案

一尘不染

布尔过滤器使您可以将多个链在一起MUSTSHOULD并将多个SHOULD_NOT请求合并在一起。允许您将其构造为一个查询。

2020-06-22