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

Τι είναι το Apache Solr; Και γιατί πρέπει να το χρησιμοποιήσετε

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

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

Χρειάζεστε ένα αξιοπρεπές μηχάνημα (ή απλώς χρησιμοποιήστε μια παρουσία AWS) με ιδανικά 8 GB ή περισσότερη μνήμη RAM. Μπορείτε να βρείτε το Solr στη διεύθυνση //lucene.apache.org/solr. Χρειάζεστε επίσης την έκδοση Java εικονικής μηχανής 8. Αποσυμπιέστε / αποσυμπιέστε το Solr σε έναν κατάλογο, βεβαιωθείτε ότι το JAVA_HOME έχει οριστεί και ότι το δυαδικό Java είναι στη διαδρομή σας. Αλλαγή στον κατάλογο του Solr είναι και πληκτρολογήστε bin / solr start -e cloud -noprompt. Αυτό ξεκινά ένα σύμπλεγμα δύο κόμβων στον φορητό υπολογιστή σας με μια συλλογή δείγματος που ονομάζεται Getstarted ήδη φορτωμένο.

Μια κανονική εκκίνηση θα ήταν απλώς bin / solr έναρξη -c για να ξεκινήσετε το Solr σε λειτουργία "cloud". Αλλά αν πρόκειται να κλωτσήσετε τα ελαστικά, θέλετε πραγματικά να δείτε μια εγκατάσταση πολλαπλών κόμβων, ακόμη κι αν είναι στον δικό σας φορητό υπολογιστή. Το Solr Cloud είναι ο τρόπος που θέλετε να εκτελέσετε μια σύγχρονη εγκατάσταση Solr. Εάν ξεκινήσετε χωρίς το -ντο θα ξεκινήσετε σε λειτουργία παλαιού τύπου. Αυτό είναι κακό.

Έγγραφα και συλλογές

Το Solr είναι μια δομημένη βάση δεδομένων εγγράφων. Οντότητες όπως το "Πρόσωπο" αποτελούνται από πεδία όπως όνομα, διεύθυνση και email. Αυτά τα έγγραφα αποθηκεύονται σε συλλογές. Οι συλλογές είναι το πλησιέστερο ανάλογο με πίνακες σε μια σχεσιακή βάση δεδομένων. Ωστόσο, σε αντίθεση με μια σχεσιακή βάση δεδομένων, το "Πρόσωπο" μπορεί να περιέχει εντελώς την οντότητα, δηλαδή εάν ένα άτομο έχει πολλές διευθύνσεις, αυτές οι διευθύνσεις μπορούν να αποθηκευτούν σε ένα έγγραφο "Πρόσωπο". Σε μια σχεσιακή βάση δεδομένων θα χρειαστείτε έναν ξεχωριστό πίνακα διευθύνσεων.

Πρόσωπο {

"Αναγνωριστικό": "1333425",

"First_name": "Φράνσις",

"Middle_name": "J.",

«Last_name»: «Underwood»,

"Διεύθυνση": ["1600 Pennsylvania Ave NW, Washington, DC 20500", "1609 Far St. NW, Washington, D.C., 20036"],

"Τηλέφωνο": ["202-456-1111", "202-456-1414"]

}

Θραύσματα, αντίγραφα και πυρήνες

Σε αντίθεση με τις περισσότερες σχεσιακές βάσεις δεδομένων, τα δεδομένα διαχωρίζονται αυτόματα και αναπαράγονται μέσω του Solr Cloud. Αυτό σημαίνει ότι όταν γράφετε ένα έγγραφο σε μια σωστά διαμορφωμένη συλλογή, διανέμεται σε μία από τις παρουσίες Solr. Αυτό είναι «σκληρό». Γίνεται για τη βελτίωση της απόδοσης ανάγνωσης. Κάθε έγγραφο αναπαράγεται ή αντιγράφεται τουλάχιστον μία φορά (διαμορφώσιμο) για απολύσεις. Αυτό σημαίνει ότι μπορείτε να χάσετε μια παρουσία Solr και να υποφέρετε μόνο μειωμένη απόδοση στο σύμπλεγμα, αλλά χωρίς απώλεια δεδομένων.

Ένα σύμπλεγμα είναι ένα σύνολο «κόμβων», οι οποίες είναι παρουσίες Java Virtual Machine (JVM) που εκτελούν Solr. Ένας κόμβος μπορεί να περιέχει πολλούς «πυρήνες». Κάθε πυρήνας είναι ένα αντίγραφο ενός λογικού «θραύσματος». Γενικά, οι πυρήνες αναγνωρίζονται από τη συλλογή, τον αριθμό θραύσματος και τον αριθμό αντιγράφων που συνδυάζονται ως συμβολοσειρά.

Δημιουργία συλλογής

Παρόλο που υπάρχουν διεπαφές HTTP τύπου REST, μπορείτε απλώς να χρησιμοποιήσετε το bin / solrbin / solr.cmd) εντολή για δημιουργία και έλεγχο συλλογών. Ας χρησιμοποιήσουμε ένα μη αμφιλεγόμενο θέμα και να βρούμε ένα δημόσιο σύνολο δεδομένων. Πάρτε ένα αντίγραφο των δεδομένων κόστους υγειονομικής περίθαλψης από το Data.gov. Για λόγους απλότητας, πάρτε το ως CSV. Υποθέτοντας ότι ξεκινήσατε το Solr σύμφωνα με τις οδηγίες, χρησιμοποιήστε αυτήν την εντολή για να δημιουργήσετε μια συλλογή που ονομάζεται ipps:

bin / solr create_collection -d basic_configs -c ipps

Στη συνέχεια ας φορτώσουμε δεδομένα στη συλλογή. Πρώτα πρέπει να διορθώσουμε μερικά πράγματα στο αρχείο CSV. Αφαιρέστε όλα τα $ χαρακτήρες. Επίσης, στην επάνω σειρά ονομάτων πεδίων, αλλάξτε τα πεδία από κενά σε υπογράμμιση. Κάντε το να διαβαστεί ως εξής:

DRG_Definition, Provider_Id, Provider_Name, Provider_Street_Address, Provider_City, Provider_State, Provider_Zip_Code, Hospital_Referral_Region_Description, Total_Discharges, Average_Covered_Charges, Average_Total_Payments, Average_Mayicare

Υπάρχουν πιο ισχυρά εργαλεία για το ETL από αυτά που είναι ενσωματωμένα στο Solr (όπως αυτό που είναι ενσωματωμένο στο προϊόν που πωλεί η εταιρεία μου), αλλά συνολικά αυτό δεν ήταν μια περίπλοκη λύση!

Πριν φορτώσουμε οποιαδήποτε δεδομένα, ωστόσο πρέπει να δημιουργήσουμε ένα «σχήμα» παρόμοιο με αυτό που έχετε σε μια σχεσιακή βάση δεδομένων. Μπορούμε να το κάνουμε με το μπούκλα εντολή σε Linux / Mac ή μπορείτε να χρησιμοποιήσετε ένα εργαλείο GUI όπως το Postman.

curl -X POST -H «Τύπος περιεχομένου: application / json» —data-binary »{

"Add-field": {

"Όνομα": "DRG_Definition",

"Type": "text_general",

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  },

"Add-field": {

"Όνομα": "Provider_Id",

«Τύπος»: «πλαγκ»,

"DocValues": αλήθεια,

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  },

"Add-field": {

"Name": "Provider_Name",

"Type": "text_general",

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  },

"Add-field": {

"Name": "Provider_Street_Address",

"Type": "string",

"Ευρετηριασμένο": false,

"Αποθηκευμένο": true

  },

"Add-field": {

"Όνομα": "Provider_City",

"Type": "string",

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  },

"Add-field": {

"Name": "Provider_State",

"Type": "string",

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  },

"Add-field": {

"Name": "Provider_Zip_Code",

"Type": "string",

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  },

"Add-field": {

"Name": "Hospital_Referral_Region_Description",

"Type": "text_general",

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  },

"Add-field": {

"Όνομα": "Σύνολο_Απορρίψεις",

"Τύπος": "πίντα",

"DocValues": αλήθεια,

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  },

"Add-field": {

"Name": "Average_Covered_Charges",

"Type": "pdouble",

"DocValues": αλήθεια,

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  },

"Add-field": {

"Name": "Average_Total_Payments",

"Type": "pdouble",

"DocValues": αλήθεια,

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  },

"Add-field": {

"Name": "Average_Medicare_Payments",

"Type": "pdouble",

"DocValues": αλήθεια,

"Ευρετηριασμένο": true,

"Αποθηκευμένο": true

  }

} '// localhost: 8983 / solr / ipps / σχήμα

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

Τώρα που έχουμε ένα σχήμα μπορούμε να "δημοσιεύσουμε" τα δεδομένα στο Solr. Υπάρχουν πολλές διαδρομές για να το κάνετε αυτό. Θα μπορούσατε να χρησιμοποιήσετε curl ή Postman, αλλά το Solr περιλαμβάνει ένα εργαλείο γραμμής εντολών, bin / post, το οποίο θα είναι διαθέσιμο από το κουτί σε Linux και MacOS.

bin / post -c ipps -params "rowid = id" -type "text / csv" /home/acoliver/Downloads/Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis-Related_Groups__DRG__cs_F

Στα Windows:

java -Dtype = text / csv -Dc = ipps -Dparams = "rowid = id" -jar παράδειγμα \ exampledocs \ post.jar \ Users \ acoliver \ Downloads \ Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis_Fr_GR__rr__r__rr__r_r_s_20_Fr_GR

Δεν έχετε δεδομένα!

Ερώτημα των δεδομένων σας

Υπάρχουν δεσμεύσεις γλώσσας για το Solr που μπορείτε να χρησιμοποιήσετε για Java ή Python ή εάν είστε περισσότεροι από έναν προγραμματιστή ενέργειας, μπορείτε να το χρησιμοποιήσετε για PHP. Ή θα μπορούσατε απλά να χρησιμοποιήσετε μπούκλα ή ταχυδρόμος ή το πρόγραμμα περιήγησής σας.

Επικολλήστε το σε μια γραμμή διευθύνσεων:

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

Αυτή η διεύθυνση URL είναι ένα απλό ερώτημα που επιστρέφει τα 10 πιο σχετικά αποτελέσματα. Μπορείτε να αλλάξετε τη σελιδοποίηση και να μάθετε περισσότερα σχετικά με τη γλώσσα ερωτημάτων του Solr's Solr και ακόμη και εναλλακτικά προγράμματα ανάλυσης ερωτημάτων στον οδηγό αναφοράς. Εάν θέλετε να δείτε το ίδιο πράγμα σε XML, μπορείτε να το διαμορφώσετε.

Ίσως θέλετε να κάνετε κάτι πιο προχωρημένο. Παρακάτω θα βρείτε διαδικασίες στην πόλη στην οποία ζω

// localhost: 8983 / solr / ipps / select? indent = on & q = Provider_State: NC% 20AND% 20Hospital_Referral_Region_Description:% 22 * ​​Durham% 22 & wt = json

Μπορείτε να προχωρήσετε πολύ περισσότερο και να κάνετε περισσότερες περιλήψεις και υπολογισμούς και ασαφείς αγώνες.

Διοίκηση Solr

Μερικοί από εσάς είναι σαν "Καλό, η γραμμή εντολών με τρομάζει!" Αυτό είναι εντάξει, ο Solr διαθέτει GUI. Πήγα στο // localhost: 8983 / solr και δείτε αυτήν την ομορφιά:

Εάν επιλέξετε τη συλλογή σας στο πλάι, μπορείτε ακόμη και να μεταβείτε σε μια οθόνη που θα σας επιτρέψει να συμπληρώσετε παραμέτρους ερωτήματος:

Εάν αυτή η οθόνη σας προκαλέσει πονοκέφαλο, μπορείτε απλώς να μεταβείτε στη διεύθυνση // localhost: 8983 / solr / ipps / browse.

Έχουμε κάνει απλά ερωτήματα κειμένου. Μπορείτε επίσης να κάνετε εύρη και χωρικές αναζητήσεις. Εάν η ταξινόμηση "συνάφεια" δεν λειτουργεί για εσάς, μπορείτε να κάνετε πιο σύνθετες εκφράσεις και να κάνετε το Solr να επιστρέψει τα πράγματα "όπως βρίσκονται" όπως το κάνει ένα RDBMS. Μπορείτε να ταξινομήσετε σε διάφορα πεδία και να φιλτράρετε κατά κατηγορίες. Μπορείτε ακόμη και να το "μάθετε να βαθμολογείτε" - μια ικανότητα μηχανικής μάθησης που επιτρέπει στον Solr να "μάθει" τι πιστεύουν οι χρήστες ότι είναι το πιο σχετικό αποτέλεσμα. Γδαρτήσαμε μόνο την επιφάνεια.

Γιατί Solr;

Τόσο ξεκάθαρα μπορεί να επιλέξετε να χρησιμοποιήσετε το Solr εάν χρειάζεστε μια μηχανή αναζήτησης. Ωστόσο, είναι επίσης μια περιττή, κατανεμημένη βάση δεδομένων εγγράφων που προσφέρει SQL (εκτός κουτιού) για όσους θέλουν να συνδέσουν εργαλεία όπως το Tableau. Είναι επεκτάσιμο σε Java (και σε άλλες γλώσσες JVM), και όμως με τη διεπαφή τύπου REST μπορείτε εύκολα να μιλήσετε JSON ή XML σε αυτό.

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

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

Ανεξάρτητα, απλώς θυμηθείτε ότι οι φίλοι δεν επιτρέπουν στους φίλους να κάνουν SQL μπλα σαν "% stuff" ερωτήματα.