轮胎没有找到部分单词(在2个字段中搜索)

时间:2012-09-03 18:38:24

标签: ruby-on-rails elasticsearch tire

我想做什么:

  • 我有一个模型'Item',包含2个字段,我想要搜索的elasticsearch:标题和描述。
  • 我希望搜索找到部分词,例如:bicycl应该与自行车,自行车等相匹配......

现状:

  • 搜索仅显示完美匹配

以下是我在项目模型中的内容:

 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

1 个答案:

答案 0 :(得分:3)

当你这样做......

string query_string, default_operator: "AND"

...你实际上正在搜索神奇的_all字段。

我很确定您需要专门搜索使用ngram过滤器分析的字段才能使用。

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