ヒット件数が数十万件を超えるような場合でも使える。新しくインデキシングしたドキュメントを検索結果の上位に表示する2つの方法。

新しくインデキシングされたドキュメントを検索結果の上位に表示したいというニーズは割とよくあると思います。
フレッシュネスブーストと呼ばれる手法です。


Solr の場合 TIMESTAMP などの日付でソートすることもできるのですが
Solr はソートがあまり上手ではありません。
時間とシステムリソースを大量に消費します。
ヒット件数が数十万件を超えるような場合にはあまり使いたくありません。


正確にソートされなくても最近インデキシングされたドキュメントが
だいたい上位にくればいいのであれば日付でブーストする方法があります。


1つめは クエリタイプが dismax の場合で、BoostQuery を使う方法です。
bq で指定します。

bq=TIMESTAMP:[NOW/DAY-7DAY TO NOW/DAY]^20000

この例では1週間以内にインデキシングされたドキュメントがブーストされます。


2つめは、クエリタイプが standard の場合で、この場合は BoostQuery が使えないので、こんな感じでブーストすることができます。

BODY:ダイアモンド AND ( TIMESTAMP:[NOW/DAY-12MONTH TO NOW/DAY] OR TIMESTAMP:[NOW/DAY-7DAY TO NOW/DAY]^20000)

こちらも1週間以内にインデキシングされたドキュメントがブーストされます。


ではでは