具有大写标记的 Elasticsearch word_delimiter 过滤器不匹配
Elasticsearch word_delimiter filter with uppercase token dont match
我使用自定义分析器构建了 ElasticSearch 索引,该分析器使用 lowercase
和带有 keyword
分词器的自定义 word_delimiter
过滤器。
"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 '
) .
过滤器 trim
和 lowercase
似乎对我的分析器没有影响
知道我做错了什么吗?
我用的是elastic 6.2.4
我不确定,但可能是搜索分析器与索引分析器不同。你可以做两件事来检查这个。
配置一个 search_analyzer: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-analyzer.html 将使用您的 merged_analyzer.
进行分析
使用分析API:https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-analyze.html
以检查您的搜索令牌是否符合预期。
我使用自定义分析器构建了 ElasticSearch 索引,该分析器使用 lowercase
和带有 keyword
分词器的自定义 word_delimiter
过滤器。
"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 '
) .
过滤器 trim
和 lowercase
似乎对我的分析器没有影响
知道我做错了什么吗?
我用的是elastic 6.2.4
我不确定,但可能是搜索分析器与索引分析器不同。你可以做两件事来检查这个。
配置一个 search_analyzer: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-analyzer.html 将使用您的 merged_analyzer.
进行分析
使用分析API:https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-analyze.html 以检查您的搜索令牌是否符合预期。