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

10 συμβουλές για καλύτερα ερωτήματα αναζήτησης στο Apache Solr

Το Apache Solr είναι μια μηχανή αναζήτησης ανοιχτού κώδικα στην καρδιά, αλλά είναι πολύ περισσότερο από αυτό. Είναι μια βάση δεδομένων NoSQL με υποστήριξη συναλλαγών. Είναι μια βάση δεδομένων εγγράφων που προσφέρει υποστήριξη SQL και την εκτελεί με κατανεμημένο τρόπο.

Προηγουμένως, σας έχω δείξει πώς να δημιουργήσετε και να φορτώσετε μια συλλογή στο Solr. μπορείτε να φορτώσετε αυτήν τη συλλογή τώρα εάν δεν το έχετε κάνει προηγουμένως. (Πλήρης αποκάλυψη: Εργάζομαι στη Lucidworks, η οποία απασχολεί πολλούς από τους βασικούς συντελεστές του έργου Solr.)

Σε αυτήν την ανάρτηση, θα σας δείξω 10 ακόμη πράγματα που μπορείτε να κάνετε με αυτήν τη συλλογή:

1. Φιλτράρετε τα ερωτήματα

Εξετάστε αυτό το ερώτημα:

// localhost: 8983 / solr / ipps / select? fq = Provider_State: NC & indent = on & q = *: * & wt = json

Στο πρόσωπό του, αυτό το ερώτημα μοιάζει με αυτό που μόλις το έκανα q = Provider_State: NC. Ωστόσο, τα ερωτήματα φίλτρου επιστρέφουν μόνο αναγνωριστικά και δεν επηρεάζουν τη βαθμολογία. Τα ερωτήματα φίλτρου αποθηκεύονται επίσης στην κρυφή μνήμη. Αυτός είναι ένας καλός τρόπος για να βρείτε το πιο σχετικό q = μπλε σουέτ σε τμήμα: υποδήματα σε αντίθεση με τμήμα: ρούχα ή τμήμα: μουσική.

2. Αντιμετώπιση

Δοκιμάστε αυτό το ερώτημα:

// localhost: 8983 / solr / ipps / select? facet = on &facet.field = Provider_State& facet.limit = -1 & indent = on & q = *: * & wt = json

Τα ακόλουθα επιστρέφονται στην κορυφή:

ταυτότητα

Το Faceting σας δίνει τη μέτρηση της κατηγορίας σας (μεταξύ άλλων). Εάν εφαρμόζετε έναν ιστότοπο λιανικής, με αυτόν τον τρόπο παρέχετε κατηγορίες και μετρήσεις κατηγοριών για τμήματα ή άλλους τρόπους με τους οποίους διαιρείτε το απόθεμά σας.

3. Εύρος απόστασης

Προσθέστε αυτό σε μια συμβολοσειρά ερωτήματος: facet.interval = Average_Total_Payments & facet.interval.set = [0,1999,99] & facet.interval.set = [2000,2999,99] & facet.interval.set = [3000,3999,99] & facet.interval.set = [4000,4999,99] & όψη. interval.set = [5000,5999,99] & facet.interval.set = [6000,6999,99] & facet.interval.set = [7000,7999,99] && facet.interval.set = [8000,8999,99] & facet.interval.set = [9000 , 10000]

Θα πάρεις:

Αυτή η όψη εύρους μπορεί να σας βοηθήσει να διαιρέσετε ένα αριθμητικό πεδίο σε κατηγορίες εύρους. Εάν βοηθάτε κάποιον να βρει έναν φορητό υπολογιστή στην περιοχή των $ 2.000 έως $ 3.000, αυτό είναι για εσάς. Μπορείτε να κάνετε ένα παρόμοιο ερώτημα χωρίς κωδικοποίηση των περιοχών κάνοντας αυτό αντί: facet.range = Average_Total_Payments & facet.range.gap = 999.99 & facet.range.start = 2000 & facet.range.end = 10000

4. DocValues

Στο σχήμα σας, βεβαιωθείτε ότι το docValues Το χαρακτηριστικό επιλέγεται για πεδία στα οποία εστιάζετε. Αυτό βελτιστοποιεί το πεδίο για τέτοιου είδους αναζητήσεις και εξοικονομεί μνήμη κατά την ώρα του ερωτήματος, όπως φαίνεται σε αυτό το απόσπασμα schema.xml:

5. Ψευδοφυσίδες

Μπορείτε να κάνετε λειτουργίες στα δεδομένα σας και να επιστρέψετε μια τιμή. Δοκιμάστε αυτό:

// localhost: 8983 / solr / ipps / select? fl = Provider_Name,% 20 Average_Total_Payments, price_category: if (min (0, sub (Average_Total_Payments, 5000)),% 22inexpensive% 22,% 22expensive% 22) & indent = on & q = * : * & σειρές = 10 & wt = json

Το παράδειγμα χρησιμοποιεί ορισμένες από τις ενσωματωμένες λειτουργίες της Solr για να κατηγοριοποιήσει τους παρόχους ως ακριβούς ή φθηνές με βάση τις μέσες συνολικές πληρωμές. βάζω τιμή_κατηγορία: εάν (ελάχ. (0, δευτ. (μέσος όρος_συνολικές πληρωμές, 5000)), "φθηνό", "ακριβό") στο fl, ή λίστα πεδίων, μαζί με δύο άλλα πεδία.

6. Αναλυτής ερωτημάτων

Το defType σας επιτρέπει να επιλέξετε έναν από τους αναλυτές ερωτημάτων του Solr. Η προεπιλεγμένη τυπική ανάλυση ερωτημάτων είναι πραγματικά καλή για συγκεκριμένα ερωτήματα που δημιουργούνται από μηχανή. Αλλά η Solr διαθέτει επίσης τους αναλυτές Dismax και eDismax, οι οποίοι είναι καλύτεροι για τους φυσιολογικούς ανθρώπους: Μπορείτε να κάνετε κλικ σε έναν από αυτούς στο κάτω μέρος της οθόνης ερωτήματος διαχειριστή ή να προσθέσετε defType = dismax στη συμβολοσειρά ερωτήματος. Ο αναλυτής Dismax γενικά παράγει καλύτερα αποτελέσματα για ερωτήματα που έχουν εισαχθεί από τον χρήστη, βρίσκοντας το "μέγιστο διάσπασης" ή το πεδίο με τους περισσότερους αγώνες και προσθέτοντάς το στη βαθμολογία.

7. Ενίσχυση

Εάν κάνετε αναζήτηση Provider_State: AL ^ 5 Ή Provider_State: NC ^ 10, τα αποτελέσματα στη Βόρεια Καρολίνα θα σημειωθούν υψηλότερα από τα αποτελέσματα στην Αλαμπάμα. Μπορείτε να το κάνετε στο ερώτημά σας (q = ""). Αυτός είναι ένας σημαντικός τρόπος χειρισμού των αποτελεσμάτων που επιστρέφονται.

8. Εύρος ημερομηνιών

Παρόλο που τα δεδομένα παραδείγματος δεν υποστηρίζουν αναζητήσεις εύρους ημερομηνιών, αν το έκανε θα έχει τη μορφή timestamp_dt: [2016-12-31T17: 51: 44.000Z έως 2017-02-20T18: 06: 44.000Z]. Η Solr υποστηρίζει πεδία τύπου ημερομηνίας και αναζητήσεις και φιλτράρισμα τύπων ημερομηνιών.

9. TF-IDF και BM25

Ο αρχικός μηχανισμός βαθμολογίας που χρησιμοποίησε η Solr (για να προσδιορίσει ποια έγγραφα ήταν σχετικά με τον όρο αναζήτησης) ονομάζεται TF-IDF, για «συχνότητα όρου έναντι της αντίστροφης συχνότητας εγγράφου». Επιστρέφει πόσο συχνά εμφανίζεται ένας όρος στο πεδίο ή το έγγραφό σας σε σχέση με το πόσο συχνά εμφανίζεται αυτός ο όρος συνολικά στη συλλογή σας. Το πρόβλημα με αυτόν τον αλγόριθμο είναι ότι το "Game of Thrones" εμφανίζεται 100 φορές σε ένα έγγραφο 10 σελίδων έναντι δέκα φορές σε ένα έγγραφο 10 σελίδων δεν κάνει το έγγραφο 10 φορές πιο σχετικό. Το κάνει περισσότερο σχετικό αλλά όχι 10 φορές περισσότερο σχετικό.

Το BM25 εξομαλύνει αυτή τη διαδικασία, αφήνοντας αποτελεσματικά τα έγγραφα να φτάσουν σε σημείο κορεσμού, μετά το οποίο μετριάζεται ο αντίκτυπος των πρόσθετων συμβάντων. Οι πρόσφατες εκδόσεις του Solr χρησιμοποιούν από προεπιλογή το BM25.

10. debugQuery

Στην κονσόλα ερωτήματος διαχειριστή, μπορείτε να ελέγξετε το debugQuery για προσθήκη debugQuery = ενεργοποιημένο στη συμβολοσειρά ερωτήματος Solr. Εάν ελέγξετε τα αποτελέσματα, θα βρείτε αυτό το αποτέλεσμα:

Μεταξύ άλλων, βλέπετε ότι χρησιμοποιεί το LuceneQParser (το όνομα του τυποποιημένου αναλυτή ερωτήματος) και, πάνω από αυτό, πώς βαθμολογείται κάθε αποτέλεσμα. Βλέπετε τον ίδιο τον αλγόριθμο BM25 και πώς οι αυξήσεις επηρέασαν τη βαθμολογία. Εάν προσπαθείτε να εντοπίσετε σφάλματα στην αναζήτησή σας, αυτό είναι ένα πολύτιμο εργαλείο!

Αυτές οι δέκα πτυχές του Solr με βοηθούν σίγουρα όταν χρησιμοποιώ το Solr για αναζήτηση και συντονισμό των αποτελεσμάτων μου.