代码之家  ›  专栏  ›  技术社区  ›  Alain

轮胎未找到部分单词(搜索2个字段)

  •  1
  • Alain  · 技术社区  · 12 年前

    我想做的事情:

    • 我有一个模型“项目”,有两个字段我想弹性搜索:标题和描述。
    • 我想在搜索中找到部分单词,例如:bicycle should match to bicycle,bicycle等。。。

    现状:

    • 搜索只显示完全匹配

    以下是我现在在Item模型中的内容:

     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 回复  |  直到 12 年前
        1
  •  3
  •   Robin    12 年前

    当你这样做的时候。。。

    string query_string, default_operator: "AND"
    

    …你实际上是在寻找魔法 _all 领域

    我敢肯定,你需要专门搜索用ngram过滤器分析的字段才能工作。

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

    例如。