Я хотел бы запросить свой индекс elasticsearch, чтобы получить документы, которые не содержат определенного значения в массиве. Например, если мой запрос:
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 10,
"sort": [],
"facets": {}
}
И набор данных:
{
"took": 1,
"hits": {
"total": 1,
"hits": [
{
"_index": "product__1434374235336",
"_type": "product",
"_id": "AU33Xeny0K4pKlL-a7sr",
"_source": {
"interdictions": ["S0P","SK3"],
"code": "foo"
}
},
{
"_index": "product__1434374235336",
"_type": "product",
"_id": "AU33Xeny0K4pKlL-a7sr",
"_source": {
"interdictions": ["S0P","S2V","SK3"],
"code": "bar"
}
}
]
}
}
Цель состоит в том, чтобы исключить все продукты, содержащие запрет "S2V"
. Сначала я думал об использовании missing
filter
:
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"must_not": [],
"should": []
}
},
"filter": {
"missing": {
"terms": {
"interdictions": [
"S2V"
]
}
}
},
"from": 0,
"size": 10,
"sort": [],
"facets": {}
}
Но elasticsearch не может проанализировать запрос: QueryParsingException[[product__1434374235336] [missing] filter does not support [interdictions]]; }]",
. Затем я попытался с must_not
:
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"must_not" : {
"terms" : {
"interdictions" : ["S2V"]
}
}
}
},
"from": 0,
"size": 10
}
Но вывод неверный, т.к. он возвращает продукт с S2V
запретами.
Итак... Каков правильный способ сделать это?
Спасибо !