2016-03-26 2 views
1

Sagen wir, ich habe Knoten, die in FRIEND Beziehung verbunden sind. Ich möchte 2 von ihnen jedes Mal abfragen, also verwende ich SKIP und LIMIT, um dies zu erhalten.Neo4j - gibt Ergebnisse von Übereinstimmungsergebnissen beginnend mit spezifischem Knoten zurück

Wenn jedoch jemand einen FREUND zwischen den Anrufen hinzufügt, verwirren dies meine Ergebnisse (da plötzlich die 'ganze Liste' um 1 Index vorwärts geschoben wird).

Zum Beispiel kann sagen, dass ich diese Liste von Freunden hatte (von einigen Parametern bestellt):

A B C D

ich das erste Mal abgefragt werden, so dass ich A B (übersprungen 0 und begrenzt 2). Dann fügt jemand einen Freund namens E, Liste ist jetzt E A B C D. jetzt die zweite Abfrage wird zurück B C (übersprungen 2 und begrenzt 2). Hinweis B wurde zweimal zurückgegeben, da die Überspringungsmethode nicht über die Änderungen informiert war, die die DB hatte.

Gibt es eine Möglichkeit, jedes Mal, wenn die vorherige Abfrage berücksichtigt wird, 2 zurückzugeben? Zum Beispiel, wenn ich wüsste, dass B zuletzt von der Abfrage zurückgegeben wurde, konnte ich es der Abfrage bereitstellen und es würde die 2 NEXT abfragen und CD (die korrekt ist) anstelle von BC bekommen. Ich habe versucht, einen zu finden Lösung und ich lese über START und Indizes, aber ich bin mir nicht sicher, wie dies zu tun ist.

Danke für Ihre Zeit!

Antwort

2

Sie könnten einen Zeitstempel speichern, wenn die FRIEND-Beziehung erstellt und nach dieser Eigenschaft sortiert wurde.

Wenn die FRIEND Beziehung erstellt wird, fügen Sie einen Zeitstempel Eigenschaft:

MATCH (a:Person {name: "Bob"}), (b:Person {name: "Mike"}) 
CREATE (a)-[r:FRIEND]->(b) 
SET r.created = timestamp() 

Dann, wenn Sie zwei Freunde in einer Zeit Paginieren, durch Sie von der created Eigenschaft bestellen:

MATCH (a:Person {name: "Bob"})-[r:FRIEND]->(friends) 
RETURN friends SKIP {page_number_times_page_size} LIMIT {page_size} 
ORDER BY r.created 

Sie Sie können diese Abfrage mit der Seitengröße (die Anzahl der zurückzugebenden Freunde) und der Anzahl der zu überspringenden Freunde basierend auf der von Ihnen gewünschten Seite parametrisieren.

+0

Danke für die Antwort. Allerdings denke ich, dass dies das Problem nicht löst - Wenn ich einen neuen Freund hinzufüge, werden die bereits existierenden weiter nach vorne geschoben (um vom Skip erneut abgefragt zu werden). Ich brauche einen Weg, um die Abfrage von einem bestimmten Zeitstempel zu starten. das wäre die komplette lösung :) ist das möglich? (Nehmen wir an, ich habe zuerst jemanden am Zeitstempel X abgefragt, dann, selbst wenn der Zeitstempel Y neuer ist, starte ich immer noch mit der Abfrage von X und der Sprung wäre korrekt). – Zephyer

0

Entschuldigung, wenn es nicht genau Antwort auf Ihre Frage ist. Bei meinem vorherigen Projekt hatte ich Erfahrung mit der Veränderung von Big Data. Es war nicht möglich, alles mit einer Abfrage zu ändern, also musste ich es in Stapel teilen. Zuerst habe ich mit dem Skip-Limit begonnen. Aber aus irgendeinem Grund funktionierte es in einigen Fällen unvorhersehbar (nicht alle Daten modifiziert). Und wenn ich müde werde, den Grund zu finden, habe ich meinen Ansatz geändert. Ich habe Java für die Abfrage der Datenbank verwendet. So bekomme ich alle Ids, die ich in der ersten Abfrage ändern musste. Und danach laufe ich gespeicherte Ids durch.