1

スコアリング関数にランダム ノイズを導入する方法を探していますが、最善の方法を見つけられません。

背景:

私たちは、代理店向けの大規模な写真セットを管理する Web アプリケーションに Solr を使用しています。

ある顧客には、スコアリングに関する興味深い要件があります。

  • 編集者が管理する「品質」フィールド。1 (最高) から 3 (最低) まで。
  • 「日付」フィールド、より最近の写真を後押しします。おそらく対数関数を使用します。

ただし、ストック フォト マーケットの仕組みにより、類似した写真が多数一緒に表示される可能性があります。彼らの要求は、「品質」を大幅に向上させることですが、写真が厳密な日付順で表示されないようにランダム性を導入することです.

何か案が?

編集: 重要な要件は、「安定した」クエリ結果を取得することです。「熱帯の島」を 2 回検索すると、わずかに異なる結果セットを取得できますが、最初のページ、2 番目、1 番目のページを要求すると、同じ結果を得たほうがいいでしょう:)

4

2 に答える 2

2

問題を解決するための私の最初のアプローチは正しいものであり、実装のバグは些細なものでした。それが他の人を助ける場合:

RandomSortFieldには、必要な特性があります(つまり、同じクエリに対して繰り返し可能な結果を​​返します)。FunctionQueryをしばらく脇に置いておくと、次のような些細なことでも可能です。

sort=quality_i asc, date_d desc, random_12345 desc

私の要件を概算します。

ただし、Sunspot ruby​​ gemを使用する場合、シードを渡す方法はありません。それが以前に私をだましていたことです。毎回異なるシードを使用することになり、「真の」ランダムな結果が得られました。

于 2011-02-04T07:22:15.783 に答える
2

FunctionQueriesでこれを行うことができます。写真ごとに、1 に近い乱数 (0.99、1.02 など) のフィールドを追加し、それを製品関数クエリで使用して、「自然な」スコアを変更します。

于 2011-02-03T23:47:24.400 に答える