Я построил индекс ElasticSearch с помощью пользовательского анализатора, который использует lowercase
и пользовательский фильтр word_delimiter
с keyword
токенизатором.
"merged_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"lowercase",
"asciifolding",
"word_delim",
"trim"
]
},
"merged_search_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"lowercase",
"asciifolding"
]
}
"word_delim": {
"type": "word_delimiter",
"catenate_words": true,
"generate_word_parts": false,
"generate_number_parts": false,
"preserve_original": true
}
"properties": {
"lastName": {
"type": "keyword",
"normalizer": "keyword_normalizer",
"fields": {
"merged": {
"type": "text",
"analyzer": "merged_analyzer",
"search_analyzer": "merged_search_analyzer"
}
}
}
}
Затем я попытался найти документы, содержащие разделенные тире подэлементы.слова, например 'Abc-Xyz'
.используя поле .merged
.Совпадения 'abc-xyz'
и 'abcxyz'
(в нижнем регистре), это именно то, что я ожидал, но я хочу, чтобы мой анализатор совпадал также с заглавными буквами или пробелами (например, 'Abc-Xyz'
, 'abc-xyz '
).
Itпохоже, что фильтры trim
и lowercase
не влияют на мой анализатор
Есть идеи, что я могу делать неправильно?
Я использую эластичный 6.2.4