Elasticsearch hunspell слишком много режет
Рассмотрим следующие сопоставления в качестве примера:
PUT /test
{
"settings": {
"analysis": {
"filter": {
"my_hunspell": {
"type": "hunspell",
"language": "en_GB"
}
},
"analyzer": {
"my_test": {
"type" : "custom",
"tokenizer": "lowercase",
"filter": ["my_hunspell"]
}
}
}
}
}
Я скачал словари Hunspell с официальной страницы Mozilla.
Теперь проблема в том, что некоторые слова, например, пиво, подвергаются чрезмерному анализу. Следующий запрос превращает пиво в пчелу, что не совсем правильно?
POST /test/_analyze?analyzer=my_test&text=beer
{
"tokens": [
{
"token": "bee",
"start_offset": 0,
"end_offset": 4,
"type": "word",
"position": 1
}
]
}
Синтаксис Hunspell довольно сложен для понимания. Что можно сделать, чтобы избежать такого поведения? Можно ли сохранить некоторые слова или добавить какое-то правило?
1 ответ
Если вы можете заставить его работать со списком слов для сохранения, то фильтр маркеров ключевых слов может оказаться полезным. Похоже, что это предотвратит слова, которые вы хотите защитить, от того, чтобы их можно было остановить. Ваш обновленный анализатор может выглядеть примерно так:
{
"settings": {
"analysis": {
"filter": {
"my_hunspell": {
"type": "hunspell",
"language": "en_GB"
},
"protect_my_words": {
"type": "keyword_marker",
"keywords_path": <PATH TO TEXT FILE WITH THE WORDS>
}
},
"analyzer": {
"my_test": {
"type" : "custom",
"tokenizer": "lowercase",
"filter": ["protect_my_words", "my_hunspell"]
}
}
}
}
}
Существует также фильтр замены шаблонов, который может оказаться полезным, если вы хотите преобразовать определенные слова или шаблоны. Это может предшествовать фильтру маркера ключевого слова.