Я новичок в ES.
У меня есть два поля в моих данных includes_publishers и exclude_publishers . Оба эти списка являются взаимоисключающими.
Я пытаюсь создать запрос, который проверил бы, существует ли значение в include_publishers ИЛИ значение NOT-существует в исключенных_публикаторах ИЛИ (оба поля включены_публикаторы и исключенные_публикаторы НЕ существуют)
Я пытаюсь достичь этого, комбинируя условие must_not в секции must следующим образом:
{
"query": {
"bool": {
"should": [{
"match": {
"rights.included_publishers": "ABCD"
}
},
{
"bool": {
"must_not": [{
"exists": {
"field": "rights.included_publishers"
}
}, {
"exists": {
"field": "rights.excluded_publishers"
}
},
{
"match": {
"rights.excluded_publishers": "ABCD"
}
}
]
}
}
],
"minimum_should_match": 1
}
}
}
Все записи должны быть возвращены где:
либо ABCD существует в списке включенных_публикаторов, либо само поле include_publishers не существует.
ABCD НЕ существует в списке исключенных_публикаторов ИЛИ само поле исключенных_публикаторов не существует.
Этот запрос работает после того, как я заменил «term» на «match» в первом случае (редактируется позже). Я получаю правильный набор результатов. Я не уверен, охватывает ли он все случаи.