在单个搜索短语中使用must和must_not的有效方法是什么?

时间:2017-03-02 09:31:02

标签: java elasticsearch

我是ElasticSearch的新手,目前看来是必须且必须没有搜索条件的类型。 我有以下查询DSL:

curl -XPOST 'localhost:9200/employee/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}'

现在我的问题是,有什么办法可以优化上面的查询吗? 就像,如果我必须搜索多个must和must_not标准,查询将变得非常大并且难以管理。有什么方法可以将must和must_not结合在一个搜索短语下吗?

1 个答案:

答案 0 :(得分:1)

据我所知,你可以使用“should”将几个匹配放在“bool”语句中(不确定为什么它不能直接用于一个“bool”语句):

修改实际上要进行多次匹配,没有太复杂的请求,以下内容应该正常工作:

{
  "query": {
    "bool":{
          "must": [
            {"match":{"age":"40"}},
            {"match":{"name": "John"}}
          ]
          , "must_not": [
                {"match":{"age":"40"}},
            {"match":{"name": "John"}}
          ]
        }
  }
}

不幸的是,mustmust_not无法合并