当前位置: 首页 > 知识库问答 >
问题:

搜索在弹性中不起作用搜索以's'y'e'结尾的单词

陆洛城
2023-03-14

如果搜索字符串和目标对象最后有以下任何字符,那么它就不起作用。s y e

在我们的应用程序中,如果用户名为Granny,Smith。它没有搜索奶奶的任何记录,因为它以y结尾。s和e的情况也是如此,即詹姆斯、凯蒂。

共有1个答案

南宫鸿晖
2023-03-14

问题的根本原因是斯图默。根据弹性搜索文档,算法词干管理器将一系列规则应用于每个单词,以将其简化为词根形式。

例如,英语的算法词干发生器可以从复数单词的末尾删除-s和-es后缀。您可以参考以下网站了解更多细节:https://www.elastic.co/guide/en/elasticsearch/reference/current/stemming.html#algorithmic-stemmershttps://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stemmer-tokenfilter.html#:~: text=Stemmer令牌filteredit,波特词干算法为英语。

在应用程序映射中。如果已经存在任何词干分析器配置,则可以删除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"

}

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

 类似资料:
  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!

  • 我需要对以搜索词开头的搜索结果进行优先级排序。我用了“匹配短语前缀”。我用了“匹配短语前缀”。但它不起作用。 细节: > 质疑 结果

  • 我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢

  • 我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。

  • 这是回应的一部分 我有联系人号码和名字 现在我的第二个查询->我正在使用术语筛选器查询上面的联系电话

  • 我正在使用聚合来根据其他字段的总和对一个字段进行分组。 它正在工作,但输出与我从数据库查询得到的结果不相似。 ES查询: 输出: "domain_agg":{"doc_count_error_upper_bound": 9,"sum_other_doc_count": 1442,"存储桶": [ { "key":"doc_count","doc_count": 2,"domain_store_co