Я пытаюсь создать и автозаполнять места назначения и хочу повысить результаты с помощью целочисленного поля популярности.
Я пытаюсь с помощью этого запроса function_score
'query' => [
'function_score' => [
'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
]
],
[
"multi_match"=>[
"query"=>$text,
"fields"=>[
"destination_name_*.exact"
],
"boost" => 2
]
]
]
]
],
'field_value_factor' => [
'field'=>'popularity'
]
],
],
Mapping &настройки:
'settings' => [
'analysis' => [
'filter' => [
'ngram_filter' => [
'type' => 'edge_ngram',
'min_gram' => 2,
'max_gram' => 20,
]
],
'analyzer' => [
'ngram_analyzer' => [
'type' => 'custom',
"tokenizer" => "standard",
'filter' => ['lowercase', 'ngram_filter'],
]
]
],
],
'mappings' =>[
'doc' => [
"properties"=> [
"destination_name_en"=> [
"type"=> "text",
"term_vector"=> "yes",
"analyzer"=> "ngram_analyzer",
"search_analyzer"=> "standard",
"fields" => [
"exact" => [
"type" => "text",
"analyzer" => "standard"
]
]
],
"destination_name_es"=> [
"type"=> "text",
"term_vector"=> "yes",
"analyzer"=> "ngram_analyzer",
"search_analyzer"=> "standard",
"fields" => [
"exact" => [
"type" => "text",
"analyzer" => "standard"
]
]
],
"destination_name_pt"=> [
"type"=> "text",
"term_vector"=> "yes",
"analyzer"=> "ngram_analyzer",
"search_analyzer"=> "standard",
"fields" => [
"exact" => [
"type" => "text",
"analyzer" => "standard"
]
]
],
"popularity"=> [
"type"=> "integer",
]
]
]
]
Я устанавливаю значение 10 в популярность в канкуне, и когда я начинаю, я пишу "ca", первый вариант - канкун.Эта работа, как и ожидалось ...
Но проблема возникает, когда я пытаюсь найти другой город, где значение популярности равно 0, как Пуэрто-Вальярта.Когда я пишу «Пуэрто-Ва», я получаю следующие результаты:
1.-Валь д'Аоста 2.-Пуэрто-Лопес 3.-Бристоль - В.А. и многие другие ... (но не Пуэрто-Вальярта)
Важно подчеркнуть, что без оценки функции и field_value_factor этот запрос работает, как ожидать (возврат в первую позицию, пуэрто-вальярта.)
Я хочу добавить возможность повышения популярности городов сцелочисленное значение.
Есть предложения?
Спасибо!