Мягкий must_not в эластичном поиске - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь найти слово в списке документов вasticsearch, исключая выражение, содержащее это слово.

Например, я хотел бы найти в следующем списке слово «хороший»."но исключите выражение" довольно хорошо "мягким способом:

  1. Это хороший документ.
  2. Это довольно хороший документ.
  3. Этохороший документЭто действительно очень хорошо.

Так что он вернет 1 и 3, потому что у него есть экземпляр «хорошо», который не содержится в выражении «очень хорошо».Я попытался использовать BooleanQuery или SpanNotQuery, но каждый раз исключается документ № 3.

Другой способ - использовать анализатор, который удаляет выражения, по которым я не хочу выполнять поиск.Однако это делает мое исключение очень статичным и не может быть установлено во время запроса.

Вы знаете, возможно ли и как это возможно?

1 Ответ

0 голосов
/ 28 февраля 2019

Мое плохое, 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
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...