弹性搜索中没有条件

时间:2013-12-04 07:00:39

标签: elasticsearch

我正在尝试在elasticsearch查询中实现NOT条件。 我可以在filter内实施bool,还是需要单独编写 过滤如下。那里有什么最佳解决方案?

{
   "query": {
      "bool": {
     "must": [
        {
           "query_string": {
          "query": "fashion"
           }
        },
        {
           "term": {
          "post_status": "publish"
           }
        }
     ]
      }
   },
   "filter": {
      "not": {
     "filter": {
        "term": {
           "post_type": "page"
        }
     }
      }
   }
}

1 个答案:

答案 0 :(得分:4)

您可以使用must_not子句:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "_all": "fashion"
                    }
                },
                {
                    "term": {
                        "post_status": "publish"
                    }
                }
            ],
            "must_not": {
                "term": {
                    "post_type": "page"
                }
            }
        }
    }
}

另外,我建议使用匹配过滤器而不是query_string,因为query_string需要更严格的Lucene语法(因此更容易出错),而匹配更像搜索框:它会自动转换人类对Lucene查询的可读查询。