Elasticsearch: добавить фильтр синонимов на мой анализатор английского языка
У меня есть индекс с описанием поля, который анализируется так:
"description":{
"analyzer" : "english",
"type" : "string"
}
Я определил словарь синонимов в файле synonyms.txt, который содержит:
ipod, i-pod, i pod => i-pod
Я хотел бы добавить этот словарь синонимов в свой анализатор, но я не знаю, как это сделать. Должен ли я определить собственный анализатор? Но если я сделаю это, я отклонюсь от своей текущей индексации из-за этого customisation.index
1 ответ
Да, вы должны определить пользовательский анализатор. Вы можете начать со стандартного английского анализатора и добавить к нему свой синоним-фильтр:
{
"settings": {
"analysis": {
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english_"
},
"english_keywords": {
"type": "keyword_marker",
"keywords": []
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
},
"my_synonyms" : {
"type" : "synonym",
"synonyms_path" : "path/to/synonym.txt"
}
},
"analyzer": {
"custom_english": {
"tokenizer": "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"my_synonyms",
"english_stop",
"english_keywords",
"english_stemmer"
]
}
}
}
}
}
Насколько это будет расходиться, да. Если вы применяете свои синонимы как индексное время, для вновь проиндексированных данных будет применен фильтр синонимов, а для существующих данных - нет. Если вы хотите, чтобы изменения в анализе индекса времени применялись последовательно, вам необходимо переиндексировать данные.
Если изменение в анализе будет только в вашем search_analyzer
, то нет необходимости переиндексировать.