在 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"

}

如果您的应用程序没有任何可包含复数词的可搜索描述字段,那么您可以从配置中删除词干分析器,它应该可以正常工作。