Elasticsearch条件过滤器

时间:2016-06-28 15:56:08

标签: elasticsearch

我需要使用某种条件逻辑过滤掉文档(我认为),但我无法使其正常工作。

我的文件是这样的: {type: 'A'} {type: 'B', foo: ['bar']} {type: 'B', foo: []}

现在我需要过滤掉type为空的foo'B'的所有文档。 在伪代码中,查询将是: if(type == 'B' && foo == []) { // filter out this document } 我的主要查询如下所示: query: { filtered: { query: { bool: { must: { match_all: [] } } }, filter: { bool:{ must_not: { term: {'_hidden': true} } } } } } Elasticsearch版本是1.5.0

1 个答案:

答案 0 :(得分:0)

如果我明白了,是吗? 如果type == a,则所有具有将返回的文档。 如果输入== b且字段foo不在那里它们会返回,有意义吗?

{
   "query": {
      "filtered": {
         "query": {
            "match_all": {}
         },
         "filter": {
            "bool": {
               "should": [
                  {
                     "term": {
                        "type": "a"
                     }
                  },
                  {
                      "bool": {
                          "must": [
                             {
                                 "term": {
                                    "type": "b"
                                 }
                             }
                          ],
                          "must_not": [
                             {
                                 "missing": {
                                    "field": "foo"
                                 }
                             }
                          ]
                      }
                  }
               ]
            }
         }
      }
   }
}