Searchkick 词干
Searchkick stemming
使用 searchkick 并查看 "animals"
的搜索返回 "anime"
的结果,因为它们的词干 "anim"
。有人对如何改进这些结果有什么建议吗?
我在文档中看到你可以做类似的事情
exclude_queries = {
"animals" => ["anime"],
}
Product.search query, exclude: exclude_queries[query]
但是,为所有像这样的不良事件保留一个 运行 列表似乎需要做很多工作。
想知道我是否需要更改词干分析器?
看起来你使用的是使用词干分析器的 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
将不会生成 run
、runs
等。这是一种权衡,根据您的业务需求,您需要选择和修改分析器。
我可能会尝试这样的事情。 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"
搜索结果中。
使用 searchkick 并查看 "animals"
的搜索返回 "anime"
的结果,因为它们的词干 "anim"
。有人对如何改进这些结果有什么建议吗?
我在文档中看到你可以做类似的事情
exclude_queries = {
"animals" => ["anime"],
}
Product.search query, exclude: exclude_queries[query]
但是,为所有像这样的不良事件保留一个 运行 列表似乎需要做很多工作。
想知道我是否需要更改词干分析器?
看起来你使用的是使用词干分析器的 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
将不会生成 run
、runs
等。这是一种权衡,根据您的业务需求,您需要选择和修改分析器。
我可能会尝试这样的事情。 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"
搜索结果中。