我正在尝试在elasticsearch查询中实现NOT
条件。
我可以在filter
内实施bool
,还是需要单独编写
过滤如下。那里有什么最佳解决方案?
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "fashion"
}
},
{
"term": {
"post_status": "publish"
}
}
]
}
},
"filter": {
"not": {
"filter": {
"term": {
"post_type": "page"
}
}
}
}
}
答案 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查询的可读查询。