match-phrase-prefix

Похож на запрос match_phrase, но соответствует терминам как целой фразе, рассматривая последний термин как префикс.

Запрос match_phrase_prefix

Используйте запрос match_phrase_prefix, чтобы указать фразу для поиска в заданном порядке. Документы, содержащие указанную вами фразу, будут возвращены. Последний неполный термин в фразе интерпретируется как префикс, поэтому любые документы, содержащие фразы, начинающиеся с указанной фразы и префикса последнего термина, будут возвращены.

Запрос аналогичен match_phrase, но создает префиксный запрос из последнего термина в строке запроса.

Для различий между запросами match_phrase_prefix и match_bool_prefix смотрите раздел о запросах match_bool_prefix и match_phrase_prefix.

Пример базового запроса match_phrase_prefix:

GET _search
{
  "query": {
    "match_phrase_prefix": {
      "title": "ветер дует"
    }
  }
}

Чтобы передать дополнительные параметры, вы можете использовать расширенный синтаксис:

GET _search
{
  "query": {
    "match_phrase_prefix": {
      "title": {
        "query": "ветер дует",
        "analyzer": "stop"
      }
    }
  }
}

Пример

Рассмотрим индекс с следующими документами:

PUT testindex/_doc/1
{
  "title": "Ветер поднимается"
}

PUT testindex/_doc/2
{
  "title": "Ушедший с ветром"
}

Следующий запрос match_phrase_prefix ищет полное слово “ветер”, за которым следует слово, начинающееся на “под”:

GET testindex/_search
{
  "query": {
    "match_phrase_prefix": {
      "title": "ветер под"
    }
  }
}

Ответ содержит соответствующий документ:

{
  "took": 6,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0.92980814,
    "hits": [
      {
        "_index": "testindex",
        "_id": "1",
        "_score": 0.92980814,
        "_source": {
          "title": "Ветер поднимается"
        }
      }
    ]
  }
}

Параметры

Запрос принимает имя поля (<field>) в качестве параметра верхнего уровня:

GET _search
{
  "query": {
    "match_phrase_prefix": {
      "<field>": {
        "query": "текст для поиска",
        ...
      }
    }
  }
}

Параметры <field> принимают следующие значения. Все параметры, кроме query, являются необязательными.

Параметр Тип данных Описание
query Строка Строка запроса, используемая для поиска. Обязательный параметр.
analyzer Строка Анализатор, используемый для токенизации текста строки запроса.
max_expansions Положительное целое число Максимальное количество терминов, на которые может расширяться запрос. Неопределенные запросы “расширяются” на количество совпадающих терминов, находящихся на расстоянии, указанном в параметре fuzziness. Затем OpenSearch пытается сопоставить эти термины. По умолчанию значение равно 50.
slop 0 (по умолчанию) или положительное целое число Контролирует степень, в которой слова в запросе могут быть перепутаны и все еще считаться совпадением. Согласно документации Lucene: “Количество других слов, разрешенных между словами в фразе запроса. Например, чтобы поменять местами два слова, требуется два перемещения (первое перемещение ставит слова одно над другим), поэтому для разрешения перестановок фраз значение slop должно быть как минимум два. Значение ноль требует точного совпадения.”