Я пытаюсь запросить поле альтернативные имена сопоставления ( отображение географических названий ), которое состоит из списка всех различных названий страны. Поле имеет текстовый тип.
Цель состоит в том, чтобы получить исходное название страны, учитывая запрос, который является другой записью, возможно с опечатками:
GET /geonames/_search
{
some_query_with_parameter("Republique Francaise")
}
Должен вернуть документ, соответствующий страна "Франция". Моя первая попытка была:
GET /geonames/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": {
"query": "Republique Francaise",
"operator": "and",
"fuzziness": "AUTO",
"boost": 3
}
}
},
{
"match": {
"alternativenames": {
"query": "Republique Francaise",
"operator": "and",
"fuzziness": "AUTO",
"boost": 1
}
}
}
],
"minimum_should_match": 1,
"filter": {
filtering documents which represent countries, long and not relevant to show
}
}
}
Но это заставляет такие страны, как Джибути или Мали, иметь более высокие оценки, чем Франция. Это связано с тем, что анализатор по умолчанию разбивает запрос на ["Republique", "Francaise"], а в таких странах, как Djiouti, есть много альтернативных имен, включая варианты "Republique" и "Francaise" из-за бывших колоний. У Джибути действительно есть названия, такие как «République de Djibouti», «Somal ie Francaise» в области альтернативные имена . Обратите внимание, что эти имена взяты из geonames.org
Поэтому я попытался использовать анализатор ключевых слов, надеясь, что оценка будет вычислена по всем именам. Я попытался запросить только поле альтернативные имена , чтобы понять, как ведет себя этот анализатор:
GET /geonames/_search
{
"query": {
"bool": {
"must":
{
"match": {
"alternativenames": {
"query": "Republique Francaise",
"analyzer": "keyword",
"fuzziness": "AUTO",
"boost": 1
}
}
},
"filter": {
filtering documents which represent countries, long and not relevant to show
}
}
}
Но, к моему удивлению, хотя "Republique Francaise" точно присутствует в поле альтернативные имена , этот запрос не возвращает совпадений. Извлечение поля альтернативных имен для документа, представляющего Францию:
alternativenames:[
...,
"Pransya",
"Prantsusmaa",
"Ranska",
"Republic of France",
"Republique Francaise",
"République Française",
"Ubaranja",
"Ubufaransa",
"Ufaransa",
...
]
Итак, мои вопросы:
- Во-первых, почему запрос с использованием анализатора ключевых слов возвращает ноль совпадений при запросе "Republique Francaise"? К вашему сведению, в этом сопоставлении есть 174 альтернативных имени для этой страны.
- Затем, как я могу реализовать следующую стратегию скоринга: учитывая имя запроса c, , суммируем нечеткие оценки только 5 лучших совпадений из списка альтернативных имен , с весами затухания. Сопоставление должно выполняться на уровне всей строки, т. Е. «Republique Francaise» не следует разбивать на [«Republique», «Francaise»]?