Ich muss Benutzer in meiner Neo4j-Datenbank basierend auf ihren Vor- und Nachnamen suchen. Die Abfrageergebnisse sollten nach ihrer Übereinstimmung mit der Suchanfrage sortiert sein. Wir erwarten, dass die Sucheingabe zwei Wörter ist (für den ersten/letzten oder letzten/ersten Namen).Neo4j - Bewertung basierend auf Eignung bei der Suche nach Benutzern
Die Abfrage, die wir bisher verwendet haben, sucht nach Benutzern, die den ersten Namen enthalten, und verwendet dann UNION ALL, um die Benutzer wieder zu finden, die jedoch den Nachnamen enthalten. Nehmen wir an, die Sucheingabe war "first last". Also unsere Frage ist:
MATCH (u:User) WHERE u.first_name =~'(?i).*first.*' RETURN u
UNION ALL u.last_name =~'(?i).*last.*' return u
UNION ALL u.first_name =~'(?i).*last.*' RETURN u
UNION ALL u.last_name =~'(?i).*first.*' return u
So ein Benutzer, der die Vornamen und den Nachnamen der Sucheingabe zweimal im Abfrageergebnis wird angezeigt hat. Dann im Java-Back-End zählen wir, wie oft jeder Benutzer erschien (jeder Benutzer hat einen eindeutigen Benutzernamen) und dann sortieren.
Ich möchte das Sortieren und Zählen im Java-Backend vermeiden und wenn möglich nur eine einzige Abfrage verwenden.
Jede Hilfe wäre willkommen. Danke.