Я несколько часов пытался найти лучший способ создания и автозаполнения, которые поддерживают многоязычный поиск городов.(ES / EN), нечеткость и получение приоритета для точного соответствия (покажите это в верхней части результатов), но я не могу найти хороший способ выполнить эту задачу.
Мое текущее решение работает очень хорошо во многих случаях, нокогда я ищу для цыган, первый вариант - «Яссо-Восточная Румыния, Румыния», а цыганская Италия - это тридцать функция (точное совпадение)
Результат Json:
[{"_index":"destinations","_type":"doc","_id":"_X80XWcBn2nzTu98N7_F","_score":75.50012,"_source":{"destination_name_en":"Iasi-East Romania","destination_name_es":"Iasi-East Romania","destination_name_pt":"Iasi-East Romania","country_code":"RO","country_name":"ROMANIA","destination_id":7953,"popularity":"0"}},{"_index":"destinations","_type":"doc","_id":"7380XWcBn2nzTu98OMZl","_score":73.116455,"_source":{"destination_name_en":"La Romana","destination_name_es":"La Romana","destination_name_pt":"La Romana","country_code":"DO","country_name":"DOMINICAN REPUBLIC","destination_id":2816,"popularity":"0"}},{"_index":"destinations","_type":"doc","_id":"1X80XWcBn2nzTu98OMZl","_score":71.4391,"_source":{"_index":"destinations","_type":"doc","_id":"8H80XWcBn2nzTu98OMZl","_score":52.018818,"_source":{"destination_name_en":"Rome","destination_name_es":"Roma","destination_name_pt":"Roma","country_code":"IT","country_name":"ITALY","destination_id":6338,"popularity":"0"}}]
Rightтеперь это мое лучшее решение ..
Отображение:
'settings' => [
'analysis' => [
'filter' => [
'autocomplete_filter' => [
"type"=> "edge_ngram",
"min_gram"=> 1,
"max_gram"=> 20,
]
],
'analyzer' => [
'autocomplete' => [
"type" => "custom",
'tokenizer' => "standard",
'filter' => ['lowercase', 'asciifolding', 'autocomplete_filter'],
]
],
],
],
'mappings' =>[
'doc' => [
"properties"=> [
"destination_name_en"=> [
"type"=> "text",
"analyzer"=> "autocomplete",
"search_analyzer"=> "standard",
],
"destination_name_es"=> [
"type"=> "text",
"analyzer"=> "autocomplete",
"search_analyzer"=> "standard",
],
"destination_name_pt"=> [
"type"=> "text",
"analyzer"=> "autocomplete",
"search_analyzer"=> "standard",
],
"popularity"=> [
"type"=> "integer",
]
]
]
]
Поиск:
'query' => [
"bool" => [
"should" => [
[
"multi_match"=>[
"query"=>$text,
"fields"=>[
"destination_name_*"
],
"type"=>"most_fields",
"boost" => 2
]
],
[
"multi_match"=>[
"query"=>$text,
"fields"=>[
"destination_name_*"
],
"fuzziness" => "1",
"prefix_length"=> 2
]
]
]
]
]
Кроме того, я хочу добавить повышение к определенному месту назначения, используя ее значение популярности.
Я надеюсь, что кто-то может привести меня с примером или указанием того, куда идти.
Я был бы очень признателен