Добрый день, подскажите, как правильно построить autocomplete для товаров в магазине,
чтобы при подаче на входе iPhone предлагались не товары а вариации продолжения фразы:
iphone 6s
iphone 11 16Gb
как тут http://joxi.ru/DmBPz8acJ3Ev5A
на данный момент удалось настроить, только продолжение вводимой фразы, при этом если не начат ввод нового слова, предложений не выводится
форма данных в индексе:
"body" => array:6 [
"title" => "Холодильник ATLANT ХМ 4423-060 N"
"title_tags" => array:5 [
0 => "Холодильник"
1 => "Холодильник ATLANT"
2 => "Холодильник ATLANT ХМ"
3 => "Холодильник ATLANT ХМ 4423-060"
4 => "Холодильник ATLANT ХМ 4423-060 N"
]
"title_keyword" => " Холодильник ATLANT ХМ 4423-060 N "
"description" => "линейка: PREMIUM 44 Serie, ШхВхГ: 59.50х196.50х62.50 см, класс энергопотребления A, общий объем 320 л, No Frost"
"category" => ""
"brand" => "ATLANT"
]
"index" => "product_index_11232assd5453"
"type" => "product_11232assd5453"
"id" => 2942
mapping
'_source' => [
'enabled' => true
],
'properties' => [
'title' => [
'type' => 'text',
'analyzer' => 'a_analyzer',
'search_analyzer' => 'f_analyzer'
],
'title_keyword' => [
'type' => 'text',
'analyzer' => 'trigram',
'search_analyzer' => 'trigram'
],
'description' => [
'type' => 'text',
'analyzer' => 'a_analyzer',
'search_analyzer' => 'f_analyzer'
],
'category' => [
'type' => 'text',
"index" => false
],
'brand' => [
'type' => 'text',
'analyzer' => 'a_analyzer',
'search_analyzer' => 'f_analyzer'
],
'title_tags' => [
'type' => 'text',
'analyzer' => 'a_analyzer',
'search_analyzer' => 'f_analyzer',
// "payloads" => false
],
]
index_settings
'analysis' => [
'filter' => [
'autocomplete_filter' => [
'type' => 'edge_ngram',
'min_gram' => '1',
'max_gram' => '15'
],
'russian_stop' => [
'type' => 'stop',
'stopwords' => '_russian_'
],
'russian_stemmer' => [
'type' => 'stemmer',
'language' => 'russian'
],
'my_synonyms' => [
'type' => 'synonym',
'synonyms' => [
'купить => телефон',
'телефон => смартфон',
]
],
"my_phonetic_cyrillic" => [
"type" => "phonetic",
"encoder" => "beider_morse",
"rule_type" => "approx",
"name_type" => "generic",
"languageset" => ["cyrillic"]
],
"my_phonetic_english" => [
"type" => "phonetic",
"encoder" => "beider_morse",
"rule_type" => "approx",
"name_type" => "generic",
"languageset" => ["english"]
]
],
'analyzer' => [
"trigram" => [
"type" => "custom",
"tokenizer" => "standard",
"filter" => ["lowercase", "shingle"]
],
"rus_en_key_analyzer" => [
"char_filter" =>[
"rus_en_key",
"en_rus_key"
],
"tokenizer" => "standard",
"token_filter" => ["lowercase"]
],
"reverse" => [
"type" => "custom",
"tokenizer" => "standard",
"filter" => ["lowercase", "reverse"]
],
'a_analyzer' => [
'type' => 'custom',
'tokenizer' => 'standard',
"char_filter" =>[
"rus_en_key",
"en_rus_key"
],
'filter' => ['lowercase', 'autocomplete_filter']
],
'f_analyzer' => [
'type' => 'custom',
'tokenizer' => 'standard',
"char_filter" =>[
"rus_en_key",
"en_rus_key"
],
'filter' => [
"lowercase",
"russian_stemmer",
"russian_stop",
"my_phonetic_english",
"my_phonetic_cyrillic"
]
],
'reuters' => [
'type' => 'custom',
'tokenizer' => 'standard',
'filter' => ['lowercase', 'stop', 'kstem']
],
],
"char_filter" =>[
"rus_en_key" =>[
"type" => "mapping",
"mappings" => [
"a => ф",
"b => и",
"c => с",
"d => в",
"e => у",
"f => а",
]
],
"en_rus_key" =>[
"type" => "mapping",
"mappings" => [
"ф => a",
"и => b",
"с => c",
"в => d",
"у => e",
"а => f",
]
]
]
]