0

Solrでアルファベット順の検索を実行しようとしていますが、今のところ実行できません

文字で検索したいのですが、指定した文字で始まる単語のみを検索する必要があり、単語にその文字が含まれている場合は検索しません。

例:文字「a」をクリックすると、「ant」、「animal」などを取得する必要があります

「バナナ」「ラクダ」ではありません

最近の私のコントローラーは次のようになります。

@articles = Sunspot.search(Article) do keyword(params[:q]) paginate(:page => params[:page], :per_page => 20) order_by :relevance, :desc order_by :article_order, :asc end

誰でも助けることができますか?前もって感謝します

4

1 に答える 1

0

これは、モデルがインデックス付けされるようにどのように構成されているかによって少し異なります。

EdgeNGramFilterFactory

schema.xml のテキスト フィールド タイプにEdgeNGramFilterFactoryを追加するか、NGram フィルタで処理されるテキスト フィールドの新しいタイプを作成します。

EdgeNGramFilterFactory は、各項を NGram のセットに変換します。「犬」は「d」、「do」、「dog」に展開されます。

このアプローチでは、文字の先頭を使用して、テキスト フィールドに存在する任意の用語を一致させることができます。クエリの一致を拡張するのに役立ちますが、これを一種の最初の文字のフィルタリングに使用している場合は、必要なものではない可能性があります.

「で始まる」QueryFilter

テストする値が単純なスカラー文字列値 (記事のタイトル、カテゴリ名、著者名など) である場合は、その値を文字列としてインデックス化し、クエリ フィルターで一致を検索できます。

サンスポットで:

class Article
  searchable do
    # ...
    string :title
  end
end

@search = Sunspot.search(Article) do
  keywords(params[:q])
  paginate(:page => params[:page], :per_page => 20)
  where(:title).starting_with(params[:letter])
  order_by :relevance, :desc
  order_by :article_order, :asc
end
于 2011-07-07T00:13:31.323 に答える