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" }
比如说