我使用弹性搜索版本1.7.5
我从这篇文章中得到了一些想法: Elastic search Not filter inside and filter
下面的查询似乎没有过滤掉与item_category_id
相关联的项目.17。是否存在可以看到的语法错误?在not
数组内的filters
之外定义的术语正常工作。
{
query: {
filtered: {
filter: {
and: {
filters: [
{ not: {
filter: {
terms: {item_category_ids: [17] }
}
}
},
{ term: { user_inactive: false } },
{ term: { kind: 1 } }
]
}
}
}
}
答案 0 :(得分:2)
ES 2.0中的filtered
and and/not
queries have been deprecated,您应该使用bool/filter/must_not
代替:
{
"query": {
"bool": {
"filter": [
{
"bool": {
"must_not": {
"terms": {
"item_category_ids": [
17
]
}
}
}
},
{
"term": {
"user_inactive": false
}
},
{
"term": {
"kind": 1
}
}
]
}
}
}
对于ES 1.7,您需要将查询更改为:
{
"query": {
"constant_score": {
"filter": {
"bool": {
"must_not": {
"terms": {
"item_category_ids": [
17
]
}
},
"must": [
{
"term": {
"user_inactive": false
}
},
{
"term": {
"kind": 1
}
}
]
}
}
}
}
}
答案 1 :(得分:0)
这就是我所追求的。
{
query: {
filtered: {
filter: {
and: [
{ terms: { published_posted_community_ids: @community_ids } },
{ term: { user_inactive: false } },
{ terms: { kind: 1 } },
{ not: { terms: { item_category_ids: 17 } } }
]
}
}
}
}