Я новичок в Elasticsearch, и я пытаюсь создать фильтр для извлечения документов, имеющих определенные атрибуты.Фильтр вложенных объектов Elasticsearch
атрибуты определяются как вложенные объекты в отображении так:
"attributes": {
"type": "nested",
"properties" : {
"id": {
"type": "integer"
},
...
}
}
}
Я пытаюсь выполнить сложный запрос в виде:
(attribute.id == 1 OR attribute.id == 2) AND (attribute.id == 3 OR attribute.id == 4)
Согласно тому, что я имею прочитайте до сих пор. Я создал следующий запрос к:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"nested": {
"path": "attributes",
"filter": {
"bool": {
"must": [
{ "bool" : {
"should" : [
{ "term": { "attributes.id": 1 }},
{ "term": { "attributes.id": 2 }}
]
}},
{ "bool" : {
"should" : [
{ "term": { "attributes.id": 3 }},
{ "term": { "attributes.id": 4 }}
]
}}
]
}
}
}
}
}
},
"sort": {
"date": { "order": "desc" }
}
}
Однако это не возвращает никакой информации, зультаты. Если я удалю один из двух bools
в блоке must
, он правильно фильтрует документы.
Такая же проблема существует (без результатов), если изменить запрос (для тестирования) по адресу:
"must": [
{ "term": { "attributes.id": 3 }},
{ "bool" : {
"should" : [
{ "term": { "attributes.id": 1 }},
{ "term": { "attributes.id": 2 }}
]
}}
]
для моего понимания переводит к attributes.id == 3 AND (attributes.id == 1 OR attributes.id == 2)
Это elasticsearch 2.x. Что я делаю неправильно?
Возможно, каждая статья 'bool' может быть в своем собственном« вложенном »предложении? Вместо того, чтобы все это было обернуто в одном. –
@EvaldasBuinauskas Я попробую и вернусь к вам. – mobius
Можете ли вы разместить образец документа, который вы ожидаете получить от этого запроса? – goalie7960