2011-01-12 5 views
1

Ich versuche, eine Abfrage auf einem RavenDB Lucene-Index zu implementieren und die Ergebnisse zu paging.RavenDB Paging mit Skip and Take funktioniert nicht

Ich habe den folgenden Code:

 IDocumentQuery<Post> q = Session.Advanced.LuceneQuery<Post, Posts_Search>() 
      .WhereContains("BodyHtml", query) 
      .OrElse() 
      .WhereContains("Title", query) 
      .AddOrder("Published", true) 
      .Skip(4).Take(4); 

(Das letzte Paar überspringen und wurde Nimm zum Zwecke eines einfachen Beispiels hinzugefügt).

Diese Abfrage gibt immer alle 22 Dokumente zurück, die meiner Abfrage entsprechen, nicht nur 4, wie ich es erwarten würde.

Was mache ich falsch?

+0

Wenn Sie .ToString() für die Abfrage aufrufen, erhalten Sie die tatsächliche Zeichenfolge, die über die Leitung gesendet wird, was ist das für Ihre Abfrage? –

+0

@Matt, ToString() gibt "BodyHtml: net OR Title: net" zurück, und zwar sowohl vor als auch nach dem Anwenden von Skip/Take. Wenn ich dies auf Session.Query mache, funktioniert das Paging wie erwartet. Ich frage mich, ob das ein Fehler ist. – driis

Antwort

2

Dieses Problem auf dem letzten stabilen Build wurde vorkommender (206).

Ich habe jetzt die neuesten unstable Build (251) heruntergeladen, und mit diesem Build funktioniert mein Code wie erwartet. Ich vermute, es war ein Fehler in der Version, die ich benutzte. Wenn ich von meiner Frage in der RavenDB-Gruppe etwas aussagekräftigere Informationen bekomme, werde ich sie hier veröffentlichen.

0

Nur eine Vermutung hier, da ich RavenDB nicht kenne. Aber vielleicht unterstützt der Raven-Anbieter kein skip oder take.

Sie könnten versuchen, nach Ihrer .AddOrder in ein IEnumerable zu konvertieren, um dies zu überprüfen. (Sie würden dann mithilfe von Linq zu Objekten überspringen und nehmen, beachten Sie immer noch alle Datensätze aus der DB würden immer zuerst)

... 
    .AddOrder("Published",True) 
    .AsEnumerable() 
    .Skip(4).Take(4); 
+0

Skip and Take sollte laut Dokumentation und Beispielen unterstützt werden. Und ich brauche das Paging wirklich auf dem Server. – driis

+0

Was bedeutet .AddOrder zurückgeben? ist es ein Fragezeichen ? (Hinweis: Ich habe das .AsEnumerable() als Test und nicht als Lösung vorgeschlagen, genau aus dem Grund, den du erwähnt hast) –

+1

Skip/Take wird unterstützt, ich weiß nur, weil ich diesen Teil geschrieben habe ;-) –