Здравствуйте.
У меня есть конфигурация индекса:
{
"settings": {
"analysis": {
"filter": {
"translit_english": {
"type": "phonetic",
"encoder": "beider_morse",
"rule_type": "approx",
"name_type": "generic",
"languageset": [
"english"
]
},
"translit_cyrillic": {
"type": "phonetic",
"encoder": "beider_morse",
"rule_type": "approx",
"name_type": "generic",
"languageset": [
"cyrillic"
]
}
},
"analyzer": {
"translit_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"translit_english",
"translit_cyrillic"
]
}
}
}
},
"mappings": {
"properties": {
"my_field": {
"type": "search_as_you_type",
"analyzer": "translit_analyzer",
"max_shingle_size": 3
}
}
}
}
И есть несколько документов:
{
"my_field": "напиток Coca-Cola"
}
и
{
"my_field": "напиток Burn"
}
и
{
"my_field": "напиток Fanta"
}
Когда я делаю поисковой запрос ниже, то ожидаемо получаю в ответе документ "напиток Coca-Cola", так как срабатывает префиксный поиск.
{
"query": {
"multi_match": {
"fields": [
"my_field",
"my_field._2gram",
"my_field._3gram"
],
"operator": "and",
"query": "ко",
"type": "bool_prefix"
}
}
}
Но при этом, когда я делаю такой же запрос, но с другой поисковой строкой ("бе"), ожидающей в ответе "напиток Burn" - ответа не получаю. Хотя тут также должен был сработать префиксный поиск.
{
"query": {
"multi_match": {
"fields": [
"my_field",
"my_field._2gram",
"my_field._3gram"
],
"operator": "and",
"query": "бе",
"type": "bool_prefix"
}
}
}
То же самое и для "напиток Fanta", поисковой запрос "фан" не выдает ничего, хотя по префиксу должно искать.
Анализатор из конфигурации индекса выдает валидные токены для "Burn" и "бе", "Coca" и "ко" соответственно.
Версия ES: 7.7.1
Помогите разобраться, в чем дело.
UPD
По query: "fan" - "напиток Fanta" тоже не ищется. То есть дело, видимо, не в фонетике. Не отрабатывает почему-то префиксный поиск?