#elasticsearch
#elasticsearch
Вопрос:
У меня есть немецкий анализатор для полей title и description (и он отлично работает для меня)
"mappings": {
"item" : {
"properties" : {
"title" : {
"type" : "string",
"analyzer": "german"
},
"description" : {
"type" : "string",
"analyzer": "german"
}
}
}
}
Но теперь я попытался добавить синонимы. Как я могу добавить два анализатора в одно и то же поле?
Ответ №1:
Вы не смогли добавить два анализатора для 1 поля. Что вы могли бы сделать, так это описать пользовательский анализатор, который использует фильтр синонимов внутри и фильтр немецкой специфики в сочетании с необходимым токенизатором, поэтому в основном вам нужно смешать все, что вам нужно, пользовательским способом.
Можно было бы представить что-то вроде этого (очень грубый пример):
PUT /my_index
{
"settings": {
"analysis": {
"filter": {
"german_stop": {
"type": "stop",
"stopwords": "_german_"
},
"german_stemmer": {
"type": "stemmer",
"language": "light_german"
},
"my_synonyms": {
"type": "synonym",
"synonyms": [
"british,english",
"queen,monarch"
]
}
},
"analyzer": {
"german": {
"tokenizer": "standard",
"filter": [
"lowercase",
"german_stop",
"my_synonyms",
"german_normalization",
"german_stemmer"
]
}
}
}
}
}
В цепочке фильтров вам нужно указать все фильтры, которые вы хотите включить — основы, синонимы, стоп-слова, строчные буквы и т. Д. И т. Д. (также имейте в виду, что порядок имеет значение), и используйте его внутри сопоставлений, как вы описали в своем вопросе.
Позже вы можете протестировать свой анализатор, выполнив
GET /_analyze
{
"analyzer": "german",
"text": "Darf ich mit Bargeld bezahlen?"
}