2

私はを使用して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*"]} 

より簡単な実装方法がない場合、SOLRロジックを生成するメソッドをLIKE %query%使用して新しいクラスを作成するにはどうすればよいですか?Liketo_solr_conditional

4

1 に答える 1

3

標準のDisMaxハンドラーを使用する場合、ワイルドカードはサポートされません。2つのオプションがあります:

a。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ハンドラーでナイトリービルドSolrを使用します。

サンスポットドキュメントに関するwikiの記事、またはSOに関する同様の質問を参照してください。

于 2011-05-19T06:32:26.383 に答える