Проблема в том, что вы используете неправильный encoder
. metaphone
не может соответствовать этим.
Что вам нужно использовать, это double_metaphone
для ваших входных данных. Он основан на реализации алгоритма phoneti c. Я предлагаю вам понять свои данные и алгоритм, чтобы убедиться, что алгоритм phoneti c лучше всего подходит для ваших целей.
Отображение:
{
"analysis": {
"analyzer": {
"double_meta_true_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"true_doublemetaphone"
]
}
},
"filter": {
"true_doublemetaphone": {
"type": "phonetic",
"encoder": "double_metaphone",
"replace": true
}
}
}
}
Он соответствует документации.
Почему метафон не соответствует:
GET http://localhost:9200/city2/_analyze
{
"field":"meta_true",
"text":"Mayrhofen"
}
дает
{
"tokens": [
{
"token": "MRHF",
"start_offset": 0,
"end_offset": 9,
"type": "<ALPHANUM>",
"position": 0
}
]
}
А анализ ниже
{
"field":"meta_true",
"text":"Mayerhofen"
}
дает
{
"tokens": [
{
"token": "MYRH",
"start_offset": 0,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 0
}
]
}
Double_Metaphone работает следующим образом:
GET
{
"field":"doublemeta_true",
"text":"Mayerhofen"
}
И
{
"field":"doublemeta_true",
"text":"Mayerhofen"
}
и
{
"field":"doublemeta_true",
"text":"Mayrhofen"
}
дает
{
"tokens": [
{
"token": "MRFN",
"start_offset": 0,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 0
}
]
}