Фонетические результаты поиска целых чисел с Elasticserach
Простите меня, поскольку я новичок в Elasticsearch, но я следую фонетическому руководству по началу работы, найденному здесь: Фонетическое соответствие
У меня есть следующее
POST /app
{
"settings": {
"index": {
"analysis": {
"filter": {
"dbl_metaphone": {
"type": "phonetic",
"encoder": "double_metaphone"
}
},
"analyzer": {
"dbl_metaphone": {
"tokenizer": "standard",
"filter": "dbl_metaphone"
}
}
}
}
},
"mappings": {
"movie": {
"properties": {
"title": {
"type": "string",
"fields": {
"phonetic": {
"type": "string",
"analyzer": "dbl_metaphone"
}
}
},
"year": {
"type": "string",
"fields": {
"phonetic": {
"type": "string",
"analyzer": "dbl_metaphone"
}
}
}
}
}
} }
Я добавляю некоторые результаты, выполнив:
POST /app/movie
{ "title": "300", "year": 2006"} & { "title":"500 days of summer", "year": "2009" }
Я хочу запросить фильм "300", введя этот запрос, хотя:
POST /app/movie/_search
{
"query": {
"match": {
"title.phonetic": {
"query": "three hundred"
}
}
}
}
но я не получаю результатов. Если изменить мой запрос на "300", хотя он работает просто отлично.
Если я сделаю:
GET /app/_analyze?analyzer=dbl_metaphone&text=300
{
"tokens": [
{
"token": "300",
"start_offset": 0,
"end_offset": 3,
"type": "<NUM>",
"position": 0
}
]
}
Я вижу, что есть только номер возвращаемого токена, а не буквенно-цифровая версия, такая как:
GET /app/_analyze?analyzer=dbl_metaphone&text=three hundred
{
"tokens": [
{
"token": "0R",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "TR",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "HNTR",
"start_offset": 6,
"end_offset": 13,
"type": "<ALPHANUM>",
"position": 1
}
]
}
Есть ли что-то, чего мне не хватает в моем фонетическом запросе, который я должен определить, чтобы получить как числовые, так и буквенно-цифровые токены?
2 ответа
Это невозможно. Двойной Метафон - это форма алгоритма фонетического кодирования. Проще говоря, он пытается закодировать одинаково произнесенные слова к одному и тому же ключу.
Это облегчает поиск таких терминов, как имена, которые могут быть написаны по-разному, но звучат одинаково.
Как видно из алгоритма, двойной метафон игнорирует цифры / цифры. Вы можете прочитать больше о двойном метафоне здесь.
Лучшим примером фонетического сопоставления является поиск "Джуди Штайнхейзер", когда поисковым запросом является [Jodi Stynehaser].
Если вам нужна возможность поиска по номерам с использованием английского языка, вам нужно создать синонимы или альтернативный текст во время индексации, чтобы в Elasticsearch хранились как "300", так и "триста".
Не должно быть слишком сложно найти / написать функцию, которая конвертирует целые числа в английский.
Вызывайте свою функцию при создании документа для загрузки в ES.
В качестве альтернативы, напишите это в Groovy и назовите его как скрипт Transform в вашем отображении.