Προγραμματισμός

Εισαγωγή στην αναζήτηση αδρανοποίησης

Υπάρχουν πολλές εφαρμογές Ιστού που παρέχουν πρόσβαση σε άφθονα δεδομένα που είναι αποθηκευμένα σε σχεσιακή βάση δεδομένων, αλλά ποιος είναι ο ευκολότερος τρόπος για να επιτρέψετε στους χρήστες να αναζητήσουν αυτά τα δεδομένα και να βρουν αυτό που χρειάζονται; Σε αυτό το άρθρο, ο Δρ Xinyu Liu παρουσιάζει την Αναζήτηση Hibernate, η οποία ενσωματώνει τις εξελιγμένες δυνατότητες αναζήτησης του Lucene με το γνωστό πλαίσιο αντιστοίχισης αντικειμένων-σχέσης του Hibernate.

Το Apache Lucene είναι μια υψηλής απόδοσης, επεκτάσιμη βιβλιοθήκη μηχανών αναζήτησης πλήρους κειμένου γραμμένη στην Java. Στην αρχή, μπορεί να μην είναι προφανές γιατί θα χρειαζόταν κάτι τέτοιο - τελικά, τα δεδομένα σας αρχειοθετούνται ωραία σε μια αξιοπρεπή σχεσιακή βάση δεδομένων. Ενώ ένα RDBMS μπορεί να κάνει μεγάλη δουλειά παρέχοντας συναλλαγές CRUD σε δεδομένα που είναι αποθηκευμένα σε σχεσιακό μοντέλο, οι λειτουργίες αναζήτησης που ορίζονται στο SQL δεν είναι πάντοτε ικανές να ικανοποιούν τόσο τις λειτουργικές όσο και τις μη λειτουργικές απαιτήσεις των έργων σας. Υπάρχουν διάφοροι τύποι ερωτημάτων που γενικά δεν υποστηρίζουν RDBMS χωρίς επεκτάσεις προμηθευτή:

  • Τα ασαφή ερωτήματα, στα οποία τα "ασαφή" και "wuzzy" θεωρούνται αντιστοιχίες
  • Λέξεις που προέρχονται από ερωτήματα, τα οποία θεωρούν το "take", το "take" και το "take" είναι πανομοιότυπα
  • Ερωτήματα που μοιάζουν με ήχο, τα οποία θεωρούν ότι το "cat" και το "kat" είναι πανομοιότυπα
  • Ερωτήματα συνωνύμων, τα οποία θεωρούν ότι το "άλμα", το "άλμα" και το "άλμα" είναι πανομοιότυπα
  • Ερωτήματα σχετικά με δυαδικούς τύπους δεδομένων BLOB, όπως έγγραφα PDF, έγγραφα Microsoft Word ή Excel ή έγγραφα HTML και XML

Πιο απογοητευτικά, τα αποτελέσματα αναζήτησης SQL δεν κατατάσσονται κατά βαθμολογία αντιστοιχίας αντιστοίχισης. Το πρότυπο SQL απλά δεν προορίζεται για ερωτήματα πλήρους κειμένου.

Οι δυνατότητες αναζήτησης Lucene, από την άλλη πλευρά, είναι απεριόριστες. Η Lucene χειρίζεται όλα τα ερωτήματα που μόλις αναφέρθηκαν και πολλά άλλα. Σας επιτρέπει επίσης να βρείτε έγγραφα κειμένου παρόμοια με άλλα έγγραφα μέσω του προχωρημένου ερωτήματος όρων-διανυσμάτων. Για παράδειγμα, θα μπορούσατε να αναζητήσετε το περιεχόμενο ενός αριθμού βιβλίων για να βρείτε ένα με παρόμοιο περιεχόμενο με αυτό Η αδρανοποίηση σε δράση. Η αρχιτεκτονική του αναλυτή στο Lucene αξιοποιεί τις ενσωματωμένες δυνατότητες διεθνοποίησης και εντοπισμού της Java, γεγονός που καθιστά το ερώτημα πλήρους κειμένου διαθέσιμο για διάφορες γλώσσες παγκοσμίως. Η Lucene προσφέρει εξαιρετική απόδοση μέσω ορισμένων καινοτόμων τεχνικών, όπως ένας ανεστραμμένος δείκτης. Ο ιστότοπος Apache Lucene διαθέτει μια λίστα κριτηρίων επιδόσεων που δείχνουν πόσο καλά αποδίδει και κλιμακώνει το Lucene.

Σημειώστε ότι ορισμένοι προμηθευτές βάσεων δεδομένων εφαρμόζουν λειτουργίες αναζήτησης πλήρους κειμένου στα προϊόντα τους ως επεκτάσεις SQL. Σε κάποιο βαθμό, αυτές οι ιδιόκτητες λειτουργίες είναι αρκετά εύχρηστες, αλλά διακυβεύουν τη φορητότητα των εφαρμογών σας σε επίπεδο βάσης δεδομένων. Εκτός αυτού, τα χαρακτηριστικά δεν ταιριάζουν με την εμπειρία χρήστη που προσφέρει η Lucene και υπό ακραίες συνθήκες η απόδοση του Lucene είναι ανώτερη.

Hibernate και το Java Persistence API

Η αδρανοποίηση είναι μια βιβλιοθήκη υψηλής απόδοσης, ώριμης σχέσης αντιστοίχισης αντικειμένων (ORM). Ως μη παρεμβατική λύση ORM, το Hibernate παρέχει API ερωτημάτων αντικειμένων για κλάσεις μοντέλου επιμονής απλού παλιού αντικειμένου Java (POJO) και αυτόματες συνδέσεις δεδομένων μεταξύ του αντικειμένου και σχεσιακές αναπαραστάσεις δεδομένων εμμονής. Στην ουσία, σας επιτρέπει να εστιάζετε στον προγραμματισμό που βασίζεται σε μοντέλα τομέα.

Το Java Persistence API (JPA) είναι η τυπική διεπαφή αντιστοίχισης αντικειμενογραφικής χαρτογράφησης και επιμονής που ορίζεται ως μέρος του Java EE 5, η τελευταία έκδοση της εταιρικής προδιαγραφής Java. Σε μεγάλο βαθμό εμπνευσμένο από το Hibernate, το JPA εμφανίστηκε για να αντικαταστήσει το αμφιλεγόμενο μοντέλο προγραμματισμού φασολιών οντότητας. Το JPA έχει ένα εύχρηστο στυλ προγραμματισμού POJO και διεπαφή ερωτήματος αντικειμένων (JPAQL). Μία βελτίωση του JPA σε σχέση με τα φασόλια οντοτήτων είναι ότι δεν χρειάζεστε ένα κοντέινερ EJB 3 για να εκτελείτε εφαρμογές που χρησιμοποιούν το API, επειδή υποστηρίζει τόσο αυτόνομους τρόπους λειτουργίας (Java SE) όσο και διαχειριστές κοντέινερ (Java EE). Οι δημοφιλείς πάροχοι JPA περιλαμβάνουν το Apache OpenJPA και το Oracle TopLink, καθώς και το ίδιο το Hibernate, το οποίο εφαρμόζει τις προδιαγραφές JPA μέσω των πρόσθετων ενοτήτων Hibernate Annotations και Hibernate EntityManager. Σε αυτό το άρθρο, θα χρησιμοποιήσω JPA / Αδρανοποίηση ως συντομογραφία για τους δύο συνεργαζόμενους.

Αυτό το άρθρο παρουσιάζει την τεχνολογία της αναζήτησης αδρανοποίησης σε εσάς μέσω ενός δείγματος εφαρμογής που έχει προγραμματιστεί σε στυλ POJO με τους τελευταίους σχολιασμούς Spring 2.5. Πριν ξεκινήσετε, θα πρέπει να έχετε βασικές γνώσεις για την Άνοιξη, την Αδρανοποίηση / JPA και τη Λουκένια.

$config[zx-auto] not found$config[zx-overlay] not found