Elasticsearch中的多种类型仅针对特定类型

时间:2015-05-13 05:42:49

标签: php elasticsearch

我创建了名为“testindex”的索引和三种类型,称为type1,type2,type3。我需要这三种类型的过滤数据。我这样过滤了。

GET testindex/type1,type2,type3/_search
{"query":{
    "filtered":{
        "query":{
            "match_phrase_prefix":{"title":"c"}
        },
        "filter":{
            "bool":{
                "must":[
                    {
                        "term":{
                          "status": "1"
                        }    
                    }
                    ]
            }

        }

    }

} 

这样可以正常使用,但问题是 type3 没有状态字段。我需要考虑仅针对type1和type2而不针对type3进行过滤。我需要帮助来解决这个问题。

1 个答案:

答案 0 :(得分:3)

执行此操作的一种方法是使用基本上选择的or过滤器:

  • 具有test1
  • test2status = 1类型的文档
  • 或类型test3的文档,status字段
  • 没有条件

此查询应该有效:

{
  "query": {
    "filtered": {
      "query": {
        "match_phrase_prefix": {
          "title": "h"
        }
      },
      "filter": {
        "or": [
          {
            "bool": {
              "must": [
                {
                  "term": {
                    "status": "1"
                  }
                },
                {
                  "terms": {
                    "_type": [
                      "test1",
                      "test2"
                    ]
                  }
                }
              ]
            }
          },
          {
            "term": {
              "_type": "test3"
            }
          }
        ]
      }
    }
  }
}