0

私のRailsアプリケーションには、sunspot solrで設定された質問モデルがあり、フィールド「テキスト」があり、そのフィールドで単語間の論理ORを実行して検索したいと考えています。minimum_match を 1 に設定すると問題が解決することがわかりましたが、複数の単語が一致する質問をブーストして結果を並べ替えたいと考えています。Solrでこれを行う方法はありますか? ドキュメントは、ランキング関数についてはあまり役に立ちません。

編集:これは、コントローラーで実行している完全なクエリです

@questions = Question.solr_search do
  fulltext params[:query], :minimum_match => 1
end.results
4

2 に答える 2

1

http://wiki.apache.org/solr/SchemaXmlによると、

Solr のクエリ パーサー (SolrQueryParser) で使用される既定の演算子は、次のように構成できます。

<solrQueryParser defaultOperator="AND|OR"/>. 

指定しない場合、デフォルトの演算子は「OR」です。この設定を使用したり依存したりしないことをお勧めします。代わりに、リクエスト ハンドラまたはクエリの LocalParams でデフォルト オペレータを指定する必要があります。ここでの設定は省略可能であり、廃止が検討されています。

solr/conf/schema.xml で defaultOperator を変更するか、LocalParams を使用して、https://github.com/sunspot/sunspot/wiki/Building-queries-by-handのような構文で OR を指定できます。

https://github.com/sunspot/sunspot/blob/master/sunspot_solr/solr/solr/conf/schema.xmlで参照されているように、Sunspotのデフォルト演算子は「AND」です。

于 2012-11-12T23:03:13.453 に答える
0

論理 OR は、Sunspot で使用される Dismax リクエスト ハンドラーのデフォルトの動作です。

さらに、一致する単語が多いほど、ドキュメントのスコアが高くなります (これはお望みのように思えます)。

Question.search do
  fulltext 'best pizza'
end

...一方または両方の単語に一致する結果を返す必要があります (最初に両方に一致するものを返します)。

  1. 「Joe's はニューヨークで最高のピザを提供しています」
  2. 「どのピザ屋一番美味しいと言うのは難しい」
  3. ピザはあなたにとって最高の食べ物ではありません」
  4. 「ピザが体に悪いかどうかなんてどうでもいい!」
  5. 「最高のファーストフードは何だと思いますか?」

minimum_match関連性の低い結果 (特定の低い数またはパーセンテージの用語のみが実際に一致した場合) を除外する場合にのみ役立ちます。これは、スコアリングや論理 OR/AND の動作には影響しません。

于 2012-05-23T19:41:51.007 に答える