gpt4 book ai didi

elasticsearch - 使用Tire库进行词干

转载 作者:行者123 更新时间:2023-12-03 00:29:53 26 4
gpt4 key购买 nike

我正在使用ElasticSearch和Tire执行一些基本搜索功能,但是雪球茎分析器的基本配置让我很头疼。我非常关注GitHub页面上的代码示例:https://github.com/karmi/tire

这是一个Ruby示例文件(Ruby 1.9.3,Tire 1.8.25):

require 'tire'

Tire.index 'videos' do
delete
create :mappings => {
:video => {
:properties => {
:code => { :type => 'string' },
:description => { :type => 'string', :analyzer => 'snowball' }
}
}
}
end

videos = [
{ :code => '1', :description => "some fight video" },
{ :code => '2', :description => "a fighting video" }
]

Tire.index 'videos' do
import videos
refresh
end

s = Tire.search 'videos' do
query do
string 'description:fight'
end
end

s.results.each do |document|
puts "* #{document.code} - #{document.description}"
end

我本以为这会在比赛中产生两项记录,因为战斗和战斗具有相同的词干。但是,它仅返回第一条记录:
* 1 - some fight video

这表明正在使用默认分析器,而不是我正在配置的分析器。

我知道每个问题( ElasticSearch mapping doesn't work)都会在查询字符串中传递实际字段,并且已经成功运行了此代码,因此我的ElasticSearch安装看起来不错。

我需要更改什么才能让Tyre返回此查询的两个记录(即,如何在此处阻止工作)?

最佳答案

I would have expected this to yield both records in the matches because fight and fighting have the same stem. However, it only returns the first record:



对。 “fight”源自“fight”,并且仅返回“fight”返回结果。除非您将搜索索引设置为与之匹配,否则战斗将完全相同。

如果您希望它按照描述的方式运行,则可能需要使默认索引使用edge ngram分析器,以便“fight”也将与“fighting”匹配并返回它。我认为这也是理想的效果,如果您也查询“战斗”,则同时匹配“战斗”和“战斗”。

关于elasticsearch - 使用Tire库进行词干,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16517210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com