1

我想做的事:

  • 我有一个模型“项目”,其中包含我希望弹性搜索搜索的 2 个字段:标题和描述。
  • 我希望搜索找到部分单词,例如:bicycl 应该与自行车、自行车等匹配...

现在的情况:

  • 搜索只显示完美匹配

这是我现在在我的 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
4

1 回答 1

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" }

例如。

于 2012-09-04T13:00:38.090 回答