elasticsearch,tire,Ruby On Rails,elasticsearch,Tire" /> elasticsearch,tire,Ruby On Rails,elasticsearch,Tire" />

Ruby on rails 轮胎找不到部分单词(搜索2个字段)

Ruby on rails 轮胎找不到部分单词(搜索2个字段),ruby-on-rails,elasticsearch,tire,Ruby On Rails,elasticsearch,Tire,我想做的是: 我有一个模型'Item',有两个字段需要elasticsearch搜索:title和description 我想在搜索中找到部分单词,例如:bicycle应该与bicycle、bicycles等匹配 当前情况: 搜索只显示完美匹配 以下是我现在在项目模型中的内容: include Tire::Model::Search include Tire::Model::Callbacks class << self def search_index

我想做的是:

  • 我有一个模型'Item',有两个字段需要elasticsearch搜索:title和description
  • 我想在搜索中找到部分单词,例如:bicycle应该与bicycle、bicycles等匹配
当前情况:

  • 搜索只显示完美匹配
以下是我现在在项目模型中的内容:

 include Tire::Model::Search
 include Tire::Model::Callbacks

 class << self
   def search_index
     Tire.index(Item.index_name)
   end
 end

 settings :analysis => {
                    :filter => {
                      :my_ngram  => {
                        "type"     => "nGram",
                        "max_gram" => 10,
                        "min_gram" => 3 }
                    },
                    :analyzer => {
                      :my_analyzer => {
                         "type"         => "custom",
                         "tokenizer"    => "standard",
                         "filter"       => ["my_ngram"]
                       }
                    }
                  } do
   mapping do
     indexes :title,       boost: 10, analyzer: 'my_analyzer'
     indexes :description, boost: 5,  analyzer: 'my_analyzer'
   end
end

 def self.search(query_string)
   tire.search(load: true) do
     if query_string.present?
       query do
         string query_string, default_operator: "AND"
       end
     end
   end
 end
include Tire::Model::Search
包含轮胎::模型::回调
阶级{
:过滤器=>{
:我的内存=>{
“类型”=>“nGram”,
“最大克数”=>10,
“最小值”=>3}
},
:analyzer=>{
:my_analyzer=>{
“类型”=>“自定义”,
“标记器”=>“标准”,
“过滤器”=>[“我的内存”]
}
}
}做
映射do
索引:title,boost:10,analyzer:'my_analyzer'
索引:description,boost:5,analyzer:'my_analyzer'
结束
结束
定义self.search(查询字符串)
轮胎。搜索(加载:真)执行
如果查询_string.present?
询问
字符串查询\u字符串,默认\u运算符:“AND”
结束
结束
结束
结束
当您这样做时

string query_string, default_operator: "AND"
。。。实际上,您正在搜索magic
\u all
字段

我很确定,你需要专门搜索使用ngram过滤器分析的字段,这样才能工作

should { string "title:#{query_string}", default_operator: "OR" }
should { string "description:#{query_string}", default_operator: "OR" }
比如说