Упрощенный индекс Elasticsearch для «статей» содержит документы с полями domain_name
и tag
, а также некоторое другое содержимое.
tag
ограничен несколькими значениями ключевых слов, такими как source1
, source2
, где tag
может иметь только одно значение в каждом документе. domain_name
- это одно значение в каждом документе
Я хотел бы вернуть набор документов, где tag=source1
, которые не включают domain_name
из другого запроса, где tag=source2
В двух шагах это будет что-то вроде:
установлен для исключения
{
"query": {
"term" : { "tag" : "source2" }
}
}
Результаты будут обработаны для получения массива domain_name
значений, по одному из каждого возвращенного документа.
Затем второй запрос получит все интересующие его элементы, а затем исключит термы, которых он не имеет (список доменных имен из предыдущего запроса).
запрос минус установлен для исключения
{
"query": {
"bool": {
"must": {
"term" : { "tag" : "source1" }
},
"must_not": {
"terms": {
"tag": [<array of domain_name values>]
}
}
}
}
}
Возможно ли это в одном запросе или с использованием агрегатов? Индексы и наборы результатов не будут большими, поэтому я меньше беспокоюсь о производительности, чем об удобстве.
Дополнительный вопрос, можно ли это определить непосредственно в Кибане?