Добрый день, можно еще пару вопросов?
Собственно делаю поиск по городам, регионам, странам. Сами данные о этих локациях лежат в мускуле, каждый в своей таблице. В Elasticsearch гружу лишь наименование и делаю по нему поиск, там же вижу id из мускуля и дальше работаю с данными.
Создал такой маппинг:
'properties' => ['mysql__id' => [
'type' => 'integer',
'index' => 'not_analyzed',
],
'type__place' => [
'type' => 'text',
'index' => 'not_analyzed',
],
'name' => [
'type' => 'text',
'analyzer' => 'ru_index_om',
'search_analyzer' => 'ru_search',
'fields' => [
'with_synonyms' => [
'type' => 'text',
'analyzer' => 'ru_index_wm'
]
]
],
'synonims' => [
'type' => 'text',
'analyzer' => 'ru_index_wm',
'search_analyzer' => 'ru_search',
'fields' => [
'with_synonyms' => [
'type' => 'text',
'analyzer' => 'ru_index_wm'
]
]
]]
ru_index_om - анализатор без морфологии
ru_index_wm - анализатор с морфологией
Поиск делаю таким запросом:
'query' => ['bool' => [
'must' => [
'bool' => [
'minimum_should_match' => 1,
'should' => [
'query_string' => [
'default_operator' => 'AND',
'query' => 'сев',
'fields' => [
'name^4', 'name.with_synonyms^3',
'synonyms^2', 'synonyms.with_synonyms^1',
]
]
]
]
],
'should' => [
'bool' => [
'minimum_should_match' => 0,
'should' => [
..........................
]
]
],
]
]
Там где многоточие - если не пишу ничего то находит варианты, если же указываю вот такое:
'term' => [
'type__place' => 'city',
'boost' => 4
],
'term' => [
'type__place' => 'country',
'boost' => 1
],
'term' => [
'type__place' => 'region',
'boost' => 2
]
То перестает выдавать результат вообще.
Немного поясню - я ожидал что boost будет поднимать данные о городах над регионами, а это условие просто перестает выводить результаты. Не могу понять почему ((