在 ElasticSearch 中搜索以 's' 'y' 'e' 结尾的单词不起作用
Search is not working in ElasticSearch for words ending with 's' 'y' 'e'
如果搜索字符串和目标对象最后有以下任何字符,则它不起作用。
是的
在我们的应用程序中,如果用户名为 Granny,Smith。它没有搜索 Granny 的任何记录,因为它以 y 结尾。 s 和 e 也是如此。即詹姆斯、凯蒂。
问题的根本原因是词干分析器。根据 elastic search 文档,算法词干分析器对每个词应用一系列规则以将其简化为词根形式。
例如,英语的算法词干分析器可能会删除复数词末尾的 -s 和 -es 后缀。您可以参考以下网站了解更多详情:
https://www.elastic.co/guide/en/elasticsearch/reference/current/stemming.html#algorithmic-stemmers
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stemmer-tokenfilter.html#:~:text=Stemmer%20token%20filteredit,porter%20stemming%20algorithm%20for%20English.
在您的应用程序 mapping.json 文件中,如果已经存在任何词干分析器配置,您可以将其删除。
"settings": {
"analysis": {
**// Remove whole filter element below. line# 4 to 9
"filter": {
"custom_english_stemmer": {
"type": "stemmer",
"name": "english"
}
},**
"normalizer": {
"useLowercase": {
"type": "custom",
"filter": [
"lowercase"
]
}
},
"tokenizer": {
"custom_tokenizer": {
"type": "ngram",
"min_gram": 1,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
}
},
"analyzer": {
"NGram_analyzer": {
"tokenizer": "custom_tokenizer",
"filter": [
"lowercase",
**// Remove stemmer from filter below. line#35
"custom_english_stemmer",**
"asciifolding"
]
},
"custom_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
**// Remove stemmer from filter below. line#44
"custom_english_stemmer",**
"asciifolding"
],
"type": "custom"
}
}
},
"max_ngram_diff": "50"
}
如果您的应用程序没有任何可包含复数词的可搜索描述字段,那么您可以从配置中删除词干分析器,它应该可以正常工作。
如果搜索字符串和目标对象最后有以下任何字符,则它不起作用。 是的
在我们的应用程序中,如果用户名为 Granny,Smith。它没有搜索 Granny 的任何记录,因为它以 y 结尾。 s 和 e 也是如此。即詹姆斯、凯蒂。
问题的根本原因是词干分析器。根据 elastic search 文档,算法词干分析器对每个词应用一系列规则以将其简化为词根形式。
例如,英语的算法词干分析器可能会删除复数词末尾的 -s 和 -es 后缀。您可以参考以下网站了解更多详情: https://www.elastic.co/guide/en/elasticsearch/reference/current/stemming.html#algorithmic-stemmers https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stemmer-tokenfilter.html#:~:text=Stemmer%20token%20filteredit,porter%20stemming%20algorithm%20for%20English.
在您的应用程序 mapping.json 文件中,如果已经存在任何词干分析器配置,您可以将其删除。
"settings": {
"analysis": {
**// Remove whole filter element below. line# 4 to 9
"filter": {
"custom_english_stemmer": {
"type": "stemmer",
"name": "english"
}
},**
"normalizer": {
"useLowercase": {
"type": "custom",
"filter": [
"lowercase"
]
}
},
"tokenizer": {
"custom_tokenizer": {
"type": "ngram",
"min_gram": 1,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
}
},
"analyzer": {
"NGram_analyzer": {
"tokenizer": "custom_tokenizer",
"filter": [
"lowercase",
**// Remove stemmer from filter below. line#35
"custom_english_stemmer",**
"asciifolding"
]
},
"custom_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
**// Remove stemmer from filter below. line#44
"custom_english_stemmer",**
"asciifolding"
],
"type": "custom"
}
}
},
"max_ngram_diff": "50"
}
如果您的应用程序没有任何可包含复数词的可搜索描述字段,那么您可以从配置中删除词干分析器,它应该可以正常工作。