5

RavenDBクエリで最近のドキュメントをブーストすることは可能ですか?

この質問はまさに私がやりたいことですが、RavenDBではなくネイティブのLuceneに言及しています。

たとえば、このようなドキュメントがある場合

public class Document
{
    public string Title { get; set; }
    public DateTime DateCreated  { get; set; }
}

たとえば、日付が特定の日付に近いドキュメントをブーストするにはどうすればよいDateTime.UtcNowですか?

OrderByDecending(x => x.DateCreated)結果に影響を与える必要のある他の検索パラメーターがあるので、私はしたくありません。

4

1 に答える 1

6

インデックス作成中にブーストすることができます。これはかなり長い間RavenDBに含まれていますが、ドキュメントにはまったく含まれていません。ただし、ここで説明するいくつかの単体テストがあります。

これらのテストは単一のブースト値を示していますが、代わりに他のドキュメント値から簡単に計算できます。これはインデックスエントリが書き込まれるときに行われるため、完全なドキュメントを利用できます。これを、参照した投稿で説明されている手法と組み合わせることができるはずです。

Map = docs => from doc in docs
              select new
              {
                  Title = doc.Title.Boost(doc.DateCreated.Ticks / 1000000f)
              };

タイトルフィールドだけでなく、ドキュメント全体をブーストすることもできます。これは、検索アルゴリズムに他のフィールドがある場合に役立つことがあります。

Map = docs => from doc in docs
              select new
              {
                  doc.Title
              }.Boost(doc.DateCreated.Ticks / 1000000f);

ブースト量に使用する適切な値を試す必要がある場合があります。ミリ秒で10,000ティックがあるので、それが私がそのような大きな数で割る理由です。

また、作業しているのがUTCであることに注意してDateTimeください。または、それがどこから来るかを制御できない場合は、DateTimeOffset代わりにを使用してください。なんで?ある基準点から計算された期間を使用していて、異なるタイムゾーンまたは夏時間の変更の前後で結果があいまいにならないようにするためです。

于 2012-12-13T18:21:24.713 に答える