2

スコア表示ドキュメントを1つずつ並べ替えたSolr結果セットを前後に移動する必要があります。これを視覚化するには、最初にドキュメントタイトルのリストがユーザーに表示されます。次に、ユーザーはタイトルの1つをクリックして詳細を表示し、元のリストの次のドキュメントに戻ることなく移動する機会が必要です。別のタイトルをクリックします。

ドキュメントの表示中に変更されます:ドキュメントがすでに表示されている(他の検索で使用されている)ことを示すために、動的フィールドが変更されます(または作成されたものはまだ存在しません)。

私が直面している問題は、これらの変更を保持するためにドキュメントが変更され、インデックスが再作成されると、同じクエリの変更(つまり、スコアの変更)の結果セットでの位置が変わる場合があります(常にではありませんが、非常に厄介です)。ドキュメントのフィールドの1つでソートされた結果を参照する場合は発生しません)。そのため、「前へ」/「次へ」のナビゲーションが正しく機能しません。

スコア計算のフィールドにカスタムの重み付けやブースターを使用していません。また、参照中に変更された動的フィールドは、レコードセットを参照するために使用されるクエリには参加しません。

したがって、質問は次のとおりです。クエリに含まれていないドキュメントのフィールドを変更すると、関連性スコアが変更される可能性がありますか?そして、可能であれば、どうすればそれを制御できますか?

アップデート

私はいくつかのテストを行い、以下を追加できます:

  1. フィールドが修正されていない場合でも、ドキュメントは結果セット内の場所を変更します。ドキュメントをリクエストし、フィールドを変更せずにインデックスを再作成すると、次に同じインデックスに対して同じクエリが実行されたときに別の場所になります。

  2. これは、結果セットが明示的にソートされている場合でも発生するため( "first_name DESC")、スコア(更新日によって異なります)は関係しません。ドキュメントは同じままで、フィールド結果セットの並べ替えは同じですが、位置が変わります。

それを回避する方法はまだわかりません。

4

2 に答える 2

2

問題を完全に解消するわけではありませんが、発生する可能性がはるかに低くなる解決策を見つけました。

したがって、ドキュメントが特定のフィールドで並べ替えられ、このフィールドに同じ値のドキュメントが多数ある場合に問題が発生します(たとえば、結果セットが名で並べ替えられ、「John」のエントリが100個ある場合)。

これは、インデックス付きの時間が関係する場合です。Solrは、メインの並べ替えフィールドが同じである場合に、ドキュメントを並べ替えるためにそれを使用しているようです。このケースの可能性を大幅に下げるには、並べ替えフィールドを追加する必要があります。たとえば、「first_namedesc」は「first_namedesc、last_name desc、register_dateasc」になります。

また、最後の並べ替えフィールドとしてドキュメントの一意のIDを追加すると、問題が完全に解消されます(並べ替えフィールドのセットは、インデックス内の2つのドキュメントで同じになることはありません)。

于 2011-06-09T07:47:11.160 に答える
2

Solr では、フィールドが「インデックス化」されている場合、関連性ランキングに影響します (「格納された」フィールドは検索結果に表示されますが、必ずしも検索可能であるとは限りません)。問題のフィールドがインデックス付きとしてマークされていない場合は、問題ありません。「索引付け」と「保存」は必ずしも同じではないことに注意してください。そのため、すべてのフィールドが表示されていなくても、結果リストが変化することに混乱します (フィールドは「索引付け」され、「保存」されない場合もあります)。

この場合、「表示」フィールドを「保存」するが、「索引付け」はしたくないと思います。本当にクエリを制御したい場合は、copyField を使用して、関連する結果を 1 つの検索可能なフィールドにコピーできます。特定のフィールドが検索クエリにとって「あまり重要ではない」ように、用語またはドキュメントをブーストすることもできます。

関連性ランキングがどのように計算されるかを確認したい場合は、Solr クエリの末尾に「debugQuery=on」を追加できます (詳細については、関連性に関する FAQを参照してください)。

ただし、そうは言っても、常に結果が変更されるため (ドキュメントの追加、他のユーザーによる削除など)、検索結果クエリをキャッシュすることをお勧めします (少なくとも結果の最初のページについては)。最善の策は、これを予測するか、少なくともユーザーのクエリをバッチ処理する UI を設計することです。

于 2011-06-06T17:57:49.987 に答える