Настройка фонетического анализа Elasticsearch для использования Double Metaphone с другим языком (PT-BR)
У меня есть экземпляр Elasticsearch[6.2], и я пытаюсь использовать двойной метафон с другим языком. Я пробовал это, но это работало только с английскими словами.
Например, на португальском (pt-br) X и CH имеют одинаковый звук, поэтому при поиске в результатах должны быть указаны все документы, соответствующие обоим. Еще одна информация состоит в том, что искомое слово может быть найдено в любом поле документа и в любой части искомого поля.
Вот конфигурация и создание индекса:
PUT /docs
{
"settings": {
"analysis": {
"analyzer": {
"brazilian": {
"tokenizer": "standard",
"filter": [
"standard",
"my_ascii_folding",
"lowercase",
"brazilian_stemmer",
"brazilian_stop",
"dbl_metaphone"
]
},
"dbl_metaphone": {
"tokenizer": "standard",
"filter": "dbl_metaphone"
}
},
"filter": {
"my_ascii_folding": {
"type": "asciifolding",
"preserve_original": true
},
"brazilian_stemmer": {
"type": "stemmer",
"language": "brazilian"
},
"brazilian_stop": {
"type": "stop",
"stopwords": "_brazilian_"
},
"dbl_metaphone": {
"type": "phonetic",
"encoder": "double_metaphone"
}
}
}
}
}
И вот, отображение для индекса создано:
PUT /docs/_mapping/content
{
"properties": {
"id_documento": {
"type": "long"
},
"nome": {
"type": "text",
"fields": {
"phonetic": {
"type": "text",
"index": true,
"analyzer": "dbl_metaphone"
}
}
},
"descricao": {
"type": "text",
"fields": {
"phonetic": {
"type": "text",
"index": true,
"analyzer": "dbl_metaphone"
}
}
},
"id_tipo": {
"type": "long"
},
"tipo": {
"type": "text",
"fields": {
"phonetic": {
"type": "text",
"index": true,
"analyzer": "dbl_metaphone"
}
}
},
"id_pasta": {
"type": "long"
},
"permissao": {
"type": "text",
"fields": {
"phonetic": {
"type": "text",
"index": true,
"analyzer": "dbl_metaphone"
}
}
},
"permissao_pasta": {
"type": "text",
"fields": {
"phonetic": {
"type": "text",
"index": true,
"analyzer": "dbl_metaphone"
}
}
},
"bloqueado": {
"type": "boolean"
},
"resumoIndice": {
"type": "text",
"fields": {
"phonetic": {
"type": "text",
"index": true,
"analyzer": "dbl_metaphone"
}
}
},
"id_caixa": {
"type": "long"
},
"nmcaixa": {
"type": "text",
"fields": {
"phonetic": {
"type": "text",
"index": true,
"analyzer": "dbl_metaphone"
}
}
},
"ocr": {
"type": "text",
"fields": {
"phonetic": {
"type": "text",
"index": true,
"analyzer": "dbl_metaphone"
}
}
},
"dirIndexTextual": {
"type": "text",
"fields": {
"phonetic": {
"type": "text",
"index": true,
"analyzer": "dbl_metaphone"
}
}
},
"maxCaracteresResumo": {
"type": "integer"
},
"qtdeDocPag": {
"type": "integer"
},
"qtdeDoc": {
"type": "integer"
}
}
}
И, например, способ поиска:
GET /docs/content/_search
{
"query": {
"multi_match": {
"query": "Chimena",
"operator": "and",
"fields": ["nome.phonetic", "descricao.phonetic"]
}
}
}
Каков был бы лучший способ сделать это?