2012-12-13 7 views
5

Ist es möglich, die letzten Dokumente in einer RavenDB-Abfrage zu erhöhen?Wie kannst du in RavenDB Dokumente durch Aktualität steigern?

This question is exactly what I want to do bezieht sich aber auf natives Lucene, nicht RavenDB.

Zum Beispiel, wenn ich ein Dokument wie diese

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

habe Wie kann ich Dokumente steigern, das Datum ist näher an einen bestimmten Zeitpunkt, beispielsweise DateTime.UtcNow?

Ich möchte nicht OrderByDecending(x => x.DateCreated), da es andere Suchparameter gibt, die die Ergebnisse beeinflussen müssen.

Antwort

6

Sie können während der Indizierung erhöhen, es ist seit einiger Zeit in RavenDB, aber es ist überhaupt nicht in der Dokumentation. Es gibt jedoch einige Komponententests, die here veranschaulichen.

Diese Tests zeigen einen einzelnen Boost-Wert, der jedoch einfach aus anderen Dokumentwerten berechnet werden kann. Sie haben das vollständige Dokument verfügbar, da dies beim Schreiben der Indexeinträge erfolgt. Sie sollten dies mit der Technik kombinieren können, die in dem Beitrag beschrieben ist, auf den Sie verwiesen haben.

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

Sie können auch das gesamte Dokument steigern, statt nur das Feld Titel, die nützlich sein könnte, wenn Sie in Ihrem Suchalgorithmus anderen Bereichen haben:

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

Sie müssen möglicherweise mit dem Recht experimentieren Wert für den Boost-Betrag. Es gibt 10.000 Ticks in einer Millisekunde, deshalb teile ich durch eine so große Zahl.

Seien Sie auch vorsichtig, dass die DateTime, mit der Sie arbeiten, in UTC ist, oder wenn Sie keine Kontrolle darüber haben, woher es kommt, dann verwenden Sie stattdessen eine . Warum? Weil Sie eine berechnete Dauer von einem Referenzpunkt aus verwenden und nicht möchten, dass das Ergebnis für verschiedene Zeitzonen oder Sommerzeitänderungen mehrdeutig ist.

+0

danke für den Link zu den Boost-Docs, aber wie würdest du durch Aktualität steigern? Ich habe meine Frage ein wenig aktualisiert, um sie hoffentlich zu klären. –

+0

Danke für die Klarstellung. Lass mich ein bisschen darüber nachdenken. Es sollte möglich sein, etwas Rabenaroma der Technik zu verwenden, die in dem Beitrag beschrieben ist, den Sie verlinkt haben. –

+0

Die Antwort wurde aktualisiert. Ich hoffe, das ergibt das Ergebnis, das Sie suchen! –

Verwandte Themen