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": "кир"}}
]
}
}
}
Но мне не нравится это решение, так как приходится бить предложение на слова, можно ли как это реализовать по другому? Отправлять одним слово сочетанием. Буду благодарен за помощь.