【问题标题】:Sunspot `LIKE` query太阳黑子`LIKE`查询
【发布时间】:2011-08-22 01:03:23
【问题描述】:

我正在使用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%,我应该如何使用to_solr_conditional 生成SOLR 逻辑的方法创建一个新类Like

【问题讨论】:

  • 你说的“部分适合我”是什么意思? :) 其实问题是搜索不行,还是你只想要一个方法别名?
  • 另外,“没有更简单的方法”是什么意思?还有什么比 .starting_with('sta') 更简单的呢?
  • 嘿,弗拉德,感谢您的回答,我将在下面的要点中解释为什么它对我部分有用。 gist.github.com/8257e7c4e512aa8a45df 谢谢!

标签: ruby solr sunspot sunspot-rails edismax


【解决方案1】:

如果您使用标准 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>

b.通过EDismax Handler 使用夜间构建 Solr。

wiki article on sunspot docssimilar question on SO

【讨论】:

  • 那么,您解决问题了吗?这个回复有用吗?
  • 嘿弗拉德,刚刚意识到你已经回答了,谢谢。检查它:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多