elasticsearch: поиск предложения по нескольким префиксам

у меня есть маппинг:

 "searchString": {
          "properties": {
            "ru": {
              "type": "text",
              "analyzer": "custom_analyzer_for_string"
            }

Вот какие токены я получаю при анализе строки при сохранении:

POST delivery_point/_analyze
{
  "analyzer": "custom_analyzer_for_string",
  "text": "Постамат: Пятерочка: Кировоградская (7701-298) Кировоградская ул., д. 42"
}



{
  "tokens": [
    {
      "token": "постамат",
      "start_offset": 0,
      "end_offset": 8,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "пятерочка",
      "start_offset": 10,
      "end_offset": 19,
      "type": "<ALPHANUM>",
      "position": 1
    },
    {
      "token": "кировоградская",
      "start_offset": 21,
      "end_offset": 35,
      "type": "<ALPHANUM>",
      "position": 2
    },
    {
      "token": "7701",
      "start_offset": 37,
      "end_offset": 41,
      "type": "<NUM>",
      "position": 3
    },
    {
      "token": "298",
      "start_offset": 42,
      "end_offset": 45,
      "type": "<NUM>",
      "position": 4
    },
    {
      "token": "кировоградская",
      "start_offset": 47,
      "end_offset": 61,
      "type": "<ALPHANUM>",
      "position": 5
    }
  ]
}

Что я хочу сделать? Я хочу написать запрос такой, чтобы я написал "постам кир" и получил только документы где есть эти оба документа. Сейчас мне удалось реализовать желаемое так:

GET delivery_point/_search
{
  "query": {
    "bool" : {
      "must": [
        { "prefix": { "searchString.ru": "постам" }},
        { "prefix": { "searchString.ru": "кир"}}
      ]
    }
  }
}

Но мне не нравится это решение, так как приходится бить предложение на слова, можно ли как это реализовать по другому? Отправлять одним слово сочетанием. Буду благодарен за помощь.


Ответы (0 шт):