我正在使用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
?
答案 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。