【问题标题】:Searchkick stemmingSearchkick 词干提取
【发布时间】:2020-06-22 21:04:26
【问题描述】:

使用 searchkick 并看到搜索 "animals" 会返回 "anime" 的结果,因为它们的词干为 "anim"。有人对如何改进这些结果有任何建议吗?

我在文档中看到你可以做类似的事情

exclude_queries = {
  "animals" => ["anime"],
}

Product.search query, exclude: exclude_queries[query]

但要为所有这样的坏人保留一份运行列表似乎需要做很多工作。

想知道我是否需要更改词干分析器?

【问题讨论】:

    标签: elasticsearch stemming searchkick elasticsearch-analyzers


    【解决方案1】:

    看起来您使用的是使用词干分析器的english 分析器,而不是标准分析器,它不会以某种方式阻止标记,导致词干标记如下所示:

    POST http://{{hostname}}:{{port}}/{{index-name}}/_analyze
    
    {
        "text" : "animals",
        "analyzer" : "english"
    }
    
    {
        "tokens": [
            {
                "token": "anim",
                "start_offset": 0,
                "end_offset": 5,
                "type": "<ALPHANUM>",
                "position": 0
            }
        ]
    }
    

    标准分析器(文本字段默认)生成非词干标记

    {
        "text" : "animals",
        "analyzer" : "standard"
    }
    
    {
        "tokens": [
            {
                "token": "animals",
                "start_offset": 0,
                "end_offset": 7,
                "type": "<ALPHANUM>",
                "position": 0
            }
        ]
    }
    

    如果您使用标准分析器,您将不会使用词干形式,但 running 将不会产生 run 词干形式到标记,搜索 running 将不会产生 runruns 等的结果。它的权衡,并根据您的业务需求,您需要选择和修改分析器。

    【讨论】:

    • 感谢您的确认。我希望在这两个选择之间我还能做些什么。我绝对不想失去处理复数等的能力,但希望我的结果更相关。我希望与"animals" 匹配的事物会获得更高的相关性排名,但也许不是这样?
    • @user2031423 elastic.co/guide/en/elasticsearch/reference/master/… 可能是一个选择,事实上我已经看到很多人使用它们,但您还需要注意性能问题,因为现在您正在存储相同数据的多种形式这会增加您的索引大小,并且您需要再次查询所有这些字段,这又是一个主要问题,但是如果您没有大型数据集,那么它就不会出现问题,并且再次权衡黑白功能与非功能(性能)要求。
    【解决方案2】:

    我可能会尝试这样的事情。 https://www.elastic.co/guide/en/elasticsearch/reference/master/mixing-exact-search-with-stemming.html

    更新

    searchkick gem 的 Ankane 非常友好地添加了一个功能来帮助解决这个问题。从 4.4.1 开始,您可以执行此操作。

    class Product < ApplicationRecord
      searchkick stemmer_override: ["anime => anime"]
    end
    

    这将防止"anime" 被提取为"anim"。所以它不会出现在"animals" 搜索结果中。

    【讨论】:

      猜你喜欢
      • 2015-01-09
      • 2018-06-17
      • 2017-11-18
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      相关资源
      最近更新 更多