2016-06-22 8 views
1

bestellen ich bemerkte, dass die ORDER BY Textsatz Aufträge nach ASCII-Reihenfolge, nicht alphabetisch, wie zum Beispiel tut MySQL.Eigenschaften sind nicht alphabetisch

Mit anderen Worten, dies ist, wie Neo4j Eigenschaften bestellen würde:

Apple 
Carrot 
banana 

Und MySQL sie so würde bestellen:

Apple 
banana 
Carrot 

Was ist der beste Weg, Neo4j zu bekommen alphabetisch zu sortieren ist? Eine Möglichkeit ist, obere zu verwenden (oder niedriger) wie folgt aus:

MATCH (e) RETURN e.name ORDER BY upper(e.name) ASC;

Eine weitere Idee, eine neue Eigenschaft zu erstellen ist, Sortieren, die die gleiche wie der Name Eigenschaft ist, aber in der oberen (oder niedriger) Fall .

noch andere Möglichkeiten, es zu tun? Ich würde es vorziehen, etwas Einfaches zu tun, wie die obige Cypher-Modifikation, anstatt eine neue Eigenschaft zu erstellen, aber ich weiß nicht, was die Auswirkungen auf die Performance sind.

+0

Wenn die zurückgegebene Datengröße klein ist, ist es einfacher, einen Modifizierer in der Abfrage zu verwenden. Wenn nicht, dann ist es meiner Meinung nach besser, eine neue Eigenschaft hinzuzufügen, in der der Wert in Großbuchstaben (oder in Kleinbuchstaben) gespeichert wird, und sicher zu sein, dass ein Index für diese Eigenschaft erstellt wird. –

Antwort

1

Neo4j führt lexicographic String Ordnung, das ist, was Sie sehen. Dies ist dokumentiert here. Um eine Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung zu erreichen, müssen Sie dies selbst implementieren (z. B. Ihren Vorschlag, den Fall entweder während der Abfrage oder beim Speichern des Eigenschaftswerts zu konvertieren).

+1

Speziell die lexikographische Anordnung von _Unicode._ (abgesehen von der Groß- und Kleinschreibung, kann es das Alphabet einer bestimmten Sprache haben oder nicht; es hängt von der Sprache und dem Schriftsystem ab.) –