In einer App mit Wicket + Spring + JPA/Hibernate-Stack habe ich eine Inbox/Search-Seite, die ziemlich komplexe Suchfunktionen haben sollte, wo in einer Datenbank gespeicherte Datensätze gefiltert werden mit einer Vielzahl von Filteroptionen. Bis jetzt habe ich JPA Criteria API verwendet, um die Datenbankabfrage zu erstellen, aber es wird ziemlich unordentlich. Ich habe mich gefragt, ob die Hibernate-Suche dafür geeignet wäre, obwohl ich keine Volltextsuchfunktionen benötige. Ich habe das Gefühl (aufgrund dessen, was ich darüber gelesen habe), dass die Abfrage etwas einfacher sein könnte.Verwenden der Hibernate-Suche für komplexe Abfragen anstelle von Kriterien API
Antwort
Entschuldigung, aber Hibernate Search basiert auf Lucence. Es ist nicht nur eine andere Abfragesprache.
Lucene sucht nicht nach Entitäten in Ihrer Datenbank, es sucht nach Attributen im Lucene-Index. Hibernate Search fügt die Funktionalität hinzu, um die Entitäten von Ihrer Datenbank mit dem Lucene-Index zu verbinden.
Hibernate Search und Lucene sind Create-Tool, wenn Sie erweiterte Volltextsuche benötigen. Aber wenn Sie es nicht brauchen, ist es nur eine Menge unnötiger Arbeit (und Probleme).
Solange Sie Lucene nicht verwenden, entspricht die Hibernate-Suche nicht Ihren Anforderungen.
Der primäre Anwendungsfall für die Hibernate-Suche ist die Volltextsuche. Es kann jedoch auch zum Indexieren/Suchen einfacher Attribute/Kriterien verwendet werden. Ob die Syntax zum Schreiben der Abfragen einfacher ist als eine Kriterienabfrage, ist Geschmackssache. Wenn Sie nicht die Volltextsuchfunktionen verwenden, müssen Sie berücksichtigen, dass Sie einen zusätzlichen Schritt in Ihrer Anwendung hinzufügen. Die Suchanfrage wird auf den Lucene-Index angewendet, der die Entity-IDs zurückgibt (sofern keine Projektion verwendet wird). Die übereinstimmenden Entitäten werden dann aus der Datenbank abgerufen. Auf der anderen Seite, wenn Sie Hibernate Search verwenden, ist es einfach, Ihre Suche zu "verbessern", indem Sie einige Ihrer Volltextsuchfunktionen zu Ihren Kriterien hinzufügen (wenn möglich).
Ob Sie Search verwenden oder nicht, ich denke, der Schlüssel ist, eine Art Framework zu schreiben, das Ihre Abfragen - Such- oder Kriterienabfragen - programmatisch aufbaut.
- 1. RESTful API komplexe Abfragen
- 2. Erstellen von Abfragen mit der Kriterien-API (JPA 2.0)
- 3. Gespeicherte Prozeduren für komplexe Abfragen
- 4. Komplexe Abfragen auf Realm Android
- 5. Linq Kriterien abfragen
- 6. Komplexe Abfragen mit NHibernate
- 7. SQLite - komplexe Abfragen
- 8. Rails komplexe Abfragen von SQL nach AREL
- 9. So implementieren Sie komplexe Abfragen mit einer REST-API?
- 10. Komplexe SQL-Abfrage oder -Abfragen
- 11. Komplexe dynamische Abfragen in CouchDB
- 12. Verwenden von psycopg2 zum Aufruf von Funktionen anstelle von rohen Abfragen
- 13. JPA-style Kriterien/CriteriaBuilder Abfragen von Hibernate Sitzung
- 14. 5 Hibernate und typisierten Kriterien Abfragen (JPA2)
- 15. Kriterien API korrelieren
- 16. Newbie zu Lucene.net, am besten für komplexe Abfragen?
- 17. Verwenden von Backquote/Backticks für MySQL-Abfragen
- 18. JPA Kriterien API beitreten
- 19. Verwenden und Abfragen benutzerdefinierter Dimensionen in der Google Analytics-API
- 20. eine komplexe SQL-Abfrage (oder Abfragen) erstellen
- 21. Wie komplexe SQL-Abfragen in Moodle
- 22. Subquery in Hibernate Kriterien API
- 23. Verwenden Sie komplexe Felder für XamDataGrid
- 24. Die beste Möglichkeit, Hibernate für komplexe Abfragen wie Top-N pro Gruppe zu verwenden
- 25. Array-Elemente anstelle von Dokumenten abfragen
- 26. RDBS wann komplexe Indizes für Abfragen und wann einfach zu verwenden?
- 27. Wie beschleunigt man Ruhezustand Kriterien "iLike Abfragen" mit Orakel-Datenbank
- 28. Hibernate: Problem bei der Ausführung von Abfragen/gelöschten Kriterien für das eingebettete Objekt
- 29. Verwenden unterschiedlicher Projektionsfunktionen in Hibernate-Kriterien-API basierend auf Dialekt
- 30. NHibernate disjunction in UND-Abfragen anstelle von OR
"Solange Sie Lucene nicht verwenden, passt die Hibernate-Suche nicht zu Ihren Anforderungen." - scheint mir eine merkwürdige Aussage. Ob ich Lucene verwende oder nicht, hat nichts damit zu tun, ob die Hibernate-Suche nützlich ist. Wichtig ist, ob Sie eine Volltextsuche in Verbindung mit Hibernate Core benötigen. In diesem Fall ist die Hibernate-Suche für Sie geeignet. (Und ja, es kommt auf Lucene an). – Hardy