Я пытаюсь найти слово в списке документов в elasticsearch, исключая выражение, содержащее это слово.
Например, я хотел бы найти в следующем списке слово «хорошо», но мягко исключить выражение «довольно хорошо»:
Чтобы он возвращал 1 и 3, потому что у него есть экземпляр «хорошо», не содержащийся в выражении «вполне хорошо». Я пытался использовать BooleanQuery или SpanNotQuery, но документ № 3 каждый раз исключается.
Другой способ — использовать анализатор, удаляющий выражения, по которым я не хочу запускать поиск. Однако это делает мое исключение очень статичным, и его нельзя установить во время запроса.
Знаете ли вы, если и как это было бы возможно?
Моя беда, SpanNotQuery действительно помог, я, должно быть, сначала неправильно протестировал его.
Этот запрос дает ожидаемый результат:
{
"query": {
"span_not": {
"include": {
"span_term": { "field": "good" }
},
"exclude": {
"span_near": {
"clauses": [
{ "span_term": {"field": "quite" }},
{ "span_term": {"field": "good" }}
],
"slop": 0,
"in_order": true
}
}
}
}
}