Я бы хотел получить анализатор с поведением стандартного анализатора английского языка, а также набор слов, которые должны быть синонимами при поиске.
Это определение, которое я пробовал:
{
"analysis": {
"filter": {
"synonym_en": {
"type": "synonym",
"synonyms": [
"universe, cosmos",
"women, woman",
"man, men"
]
},
"my_filter": {
"type": "word_delimiter",
"preserve_original": "false",
"split_on_numerics": "false"
}
},
"analyzer": {
"my_analyzer": {
"type": "custom",
"filter": [
"my_filter"
],
"tokenizer": "keyword"
},
"my_english": {
"type": "english",
"stopwords": [
"a",
"an",
"and",
"are",
"as",
"at",
"be",
"but",
"by",
"for",
"if",
"into",
"is",
"it",
"of",
"on",
"or",
"such",
"that",
"the",
"their",
"then",
"there",
"these",
"they",
"this",
"to",
"was",
"will",
"with"
],
"filter": [
"synonym_en"
]
}
}
}
}
Однако я не смог заставить его работать буксиром. действительно, когда я запускаю пример:
GET /my_index/_analyze?analyzer=my_english&text='Men'
Он возвращает только токен men
, в то время как я хотел бы иметь и man
, и men
.
Также обратите внимание, что более простой анализатор
{
"settings": {
"analysis": {
"filter": {
"my_synonym_filter": {
"type": "synonym",
"synonyms": [
"british,english",
"queen,monarch",
"man,men"
]
}
},
"analyzer": {
"my_synonyms": {
"tokenizer": "standard",
"filter": [
"lowercase",
"my_synonym_filter"
]
}
}
}
}
}
Вроде работает, так как возвращает man
и men
.
Как я могу получить желаемое поведение + проистекающее из английского анализатора?