Multi_match bool_prefix с фонетическим анализатором не работает как ожидается

Здравствуйте.
У меня есть конфигурация индекса:

        {
    	"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" тоже не ищется. То есть дело, видимо, не в фонетике. Не отрабатывает почему-то префиксный поиск?

Видится, что проблема именно на стыке запроса и кастомного анализатора translit_analyzer.
Потому что если добавить аналогичное поле с russian анализатором и сделать аналогичный запрос - префиксный поиск работает как ожидается.

		"my_field_2": {
			"type": "search_as_you_type",
			"analyzer": "russian",
			"max_shingle_size": 3
		}

Анализаторы, работающие с корнями слов, с префиксными запросами идеально работать не будут, так как в первом случае идет разбор по полному слову, а во втором - по непонятной части.

@Igor_Motov, спасибо за ответ.
Подскажите, может есть какое-то альтернативное решение тут?
Задача: осуществлять поиск с учетом транслитерации (то, чего я пытался добиться, добавив анализатор из первого поста), используя при этом 'as you type' поиск (то, для чего создан тип search_as_you_type).
Анализатор 'translit_analyzer' для нашего юз-кейса показал приемлемые результаты, но хотелось бы еще разрешить ситуацию с 'as you type' поиском.

Альтернативное решение - индексировать два раза: один раз для поиска as you type без фильтров типа russian, и второй раз - для поиска, с нужными фильтрами.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.