Да, вы должны определить пользовательский анализатор. Вы можете начать с standard English analyzer, и добавить к этому synonymfilter:
{
"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
, тогда нет необходимости повторно индексировать.