太阳黑子`LIKE`查询

时间:2011-05-09 22:29:56

标签: ruby solr sunspot sunspot-rails edismax

我正在使用sunspot。如何运行LIKE查询(LIKE %q%)?我想做这样的事情:

 @search = Sunspot.search(User) do |q|
   q.text_fields { with(:company_name).like(params[:q]) }
 end.results

而不是:

@search = Sunspot.search(User) do |q|
  q.text_fields { with(:company_name).starting_with(params[:q]) }
end.results

部分适合我。查看sunspot代码,我发现了这段代码:

class StartingWith < Base
  private

  def to_solr_conditional
    "#{solr_value(@value)}*"
  end
end

它基本上生成以下太阳黑子搜索哈希:

Sunspot.search(User) do |q| 
  q.text_fields { with(:company_name).starting_with("sta")} }
end

=> Sunspot::Search:{:q=>"*:*", :fq=>["type:User", "company_name_text:sta*"]} 

如果没有更简单的方法来实现LIKE %query%,我应该如何使用生成SOLR逻辑的方法Like创建新的类to_solr_conditional

1 个答案:

答案 0 :(得分:3)

如果使用标准的DisMax处理程序,则它不支持通配符。您有两个选择:

一个。激活EdgeNGramFilter:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    ..
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
    ..
  </analyzer>
</fieldType>

湾每晚使用EDismax Handler构建Solr。

请参阅wiki article on sunspot docssimilar question on SO