1

このアプリケーションでは、検索にacts_as_solrを使用しています。モデル名を検索クエリとして使用すると、テーブル内のすべての行が返されるという事実を除いて、すべてがスムーズに実行されているようです。

たとえば、usersテーブルがあるとします。モデルでacts_as_solrを指定して、フィールドの名、姓を検索し、acts_as_solr:fields => [:handle、:lname、:fname]を処理します。検索語として「user」を使用すると、システム内のすべてのユーザー、または結果としてデータベース内のすべての行が返されます。

他の誰かがこれに遭遇しましたか?

4

1 に答える 1

1

これは、acts_as_solrがparser_methods.rb内でクエリを構築する方法によるものです。

parser_methods.rb内で行う必要のある変更はほとんどありません。

変化する

models =  "AND #{solr_configuration[:type_field]}:#self.name}" 

models =  "#{solr_configuration[:type_field]}:#self.name}" 

次に、構築されたモデルの文字列をクエリに含めないでください。

query = "(#{query.gsub(/ *: */,"_t:")}) #{models}"

これをただに変更します

query = "(#{query.gsub(/ *: */,"_t:")})"

次に、このクエリのモデル部分をSOLRへの検索に強制する必要があります。

私はこれをしました.....

query_options[:fq_model] = models

standard.rbに移動しました

必ず追加してください

:fq_model

VALID_PARAMS配列に追加します。

以下を追加しました

if @params[:fq_model]
 hash["fq"] = @params[:fq_model]
end

いくつかの余分なケースを追加しましたが、find_by_solrで:fqをオプションにしたい場合を除いて、それらは必要ありません。

これらをすべて配置した後、モデル名を検索できるようになり、期待するはるかに小さな結果セットが得られます。

クエリのtype_t部分がそのメソッドにハードコーディングされているように見えるため、multi_solr_searchも機能するように更新が必要になる可能性があります。

私がこの質問に関連するいくつかのハイライトの問題に遭遇したとき、これのほとんどを理解しました。 Solr1.4での強調表示-requireFieldMatch

于 2010-04-01T19:52:06.803 に答える