Oltre a rispondere alle domande di OP, Permettetemi di gettare un po 'intuizioni su Apache Solr dalla semplice introduzione di installazione dettagliata e implementazione .
Introduzione semplice
Chiunque abbia avuto esperienza con i motori di ricerca sopra, o altri motori non presenti nell'elenco - mi piacerebbe sentire le tue opinioni.
Solr non dovrebbe essere usato per risolvere problemi in tempo reale. Per i motori di ricerca, Solr è praticamente un gioco e funziona perfettamente .
Solr funziona bene su applicazioni Web ad alto traffico ( ho letto da qualche parte che non è adatto a questo, ma sto eseguendo il backup di tale affermazione ). Utilizza la RAM, non la CPU.
- pertinenza e classifica dei risultati
Il boost ti aiuta a classificare i risultati in cima. Supponiamo che tu stia cercando un nome john nei campi nome e cognome e desideri dare rilevanza al campo nome , quindi devi aumentare il campo nome come mostrato.
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
Come puoi vedere, il campo del nome è aumentato con un punteggio di 2.
Altro su SolrRelevancy
- velocità di ricerca e indicizzazione
La velocità è incredibilmente veloce e nessun compromesso su questo. Il motivo per cui mi sono trasferito a Solr .
Per quanto riguarda la velocità di indicizzazione, Solr può anche gestire JOINS dalle tabelle del database. Un JOIN più alto e complesso influisce sulla velocità di indicizzazione. Tuttavia, un'enorme configurazione RAM può facilmente affrontare questa situazione.
Maggiore è la RAM, maggiore è la velocità di indicizzazione di Solr.
- facilità d'uso e facilità di integrazione con Django
Non hai mai provato a integrare Solr e Django , tuttavia puoi farlo con Haystack . Ho trovato un articolo interessante sullo stesso ed ecco il github per questo.
- requisiti di risorse - il sito sarà ospitato su un VPS, quindi idealmente il motore di ricerca non richiederebbe molta RAM e CPU
Solr cresce su RAM, quindi se la RAM è alta, non devi preoccuparti di Solr .
L' utilizzo della RAM da parte di Solr aumenta in base all'indicizzazione completa se si dispone di alcuni miliardi di record, è possibile utilizzare in modo intelligente le importazioni Delta per affrontare questa situazione. Come spiegato, Solr è solo una soluzione quasi in tempo reale .
Solr è altamente scalabile. Dai un'occhiata a SolrCloud . Alcune caratteristiche chiave di esso.
- Shards (o sharding è il concetto di distribuzione dell'indice tra più macchine, ad esempio se l'indice è cresciuto troppo)
- Bilanciamento del carico (se Solrj viene utilizzato con Solr cloud si occupa automaticamente del bilanciamento del carico utilizzando il meccanismo Round-Robin)
- Ricerca distribuita
- Alta disponibilità
- funzioni extra come "intendevi?", ricerche correlate, ecc
Per lo scenario sopra, è possibile utilizzare SpellCheckComponent che è impacchettato con Solr . Ci sono molte altre funzionalità, The SnowballPorterFilterFactory aiuta a recuperare i record dicendo che se hai digitato, libri invece di libro , ti verranno presentati i risultati relativi al libro .
Questa risposta si concentra ampiamente su Apache Solr e MySQL . Django è fuori portata.
Supponendo che ci si trovi in ambiente LINUX, è possibile procedere ulteriormente a questo articolo. (la mia era una versione di Ubuntu 14.04)
Installazione dettagliata
Iniziare
Scarica Apache Solr da qui . Questa sarebbe la versione 4.8.1 . Potresti scaricare nuove versioni, ho trovato questa stabile.
Dopo aver scaricato l'archivio, estrarlo in una cartella a scelta. Dì ... Downloads
o qualunque cosa ... Quindi sembreràDownloads/solr-4.8.1/
Al tuo prompt. Naviga all'interno della directory
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Quindi ora sei qui ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Avviare il Jetty Application Server
Jetty è disponibile nella cartella degli esempi della solr-4.8.1
directory, quindi naviga all'interno e avvia Jetty Application Server.
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
Ora, non chiudere il terminale, minimizzarlo e lasciarlo da parte.
(SUGGERIMENTO: utilizzare & after start.jar per far funzionare il Jetty Server in background)
Per verificare se Apache Solr funziona correttamente, visita questo URL sul browser. http: // localhost: 8983 / solr
Esecuzione di Jetty su porta personalizzata
Funziona sulla porta 8983 come impostazione predefinita. È possibile modificare la porta qui o direttamente all'interno del jetty.xml
file.
java -Djetty.port=9091 -jar start.jar
Scarica JConnector
Questo file JAR funge da ponte tra MySQL e JDBC. Scarica qui la versione indipendente dalla piattaforma
Dopo averlo scaricato, estrarre la cartella e copiarlo mysql-connector-java-5.1.31-bin.jar
e incollarlo nella directory lib .
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Creazione della tabella MySQL da collegare ad Apache Solr
Per utilizzare Solr , è necessario disporre di alcune tabelle e dati da cercare. Per questo, useremo MySQL per creare una tabella e spingere alcuni nomi casuali e quindi potremmo usare Solr per connetterci a MySQL e indicizzare quella tabella e le sue voci.
1.Tabella struttura
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2.Popolare la tabella sopra
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
Entrare nel core e aggiungere le direttive lib
1. Navigare a
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2. Modifica di solrconfig.xml
Aggiungi queste due direttive a questo file.
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
Ora aggiungi il DIH (Data Import Handler)
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3.Creare il file db-data-config.xml
Se il file esiste quindi ignora, aggiungi queste righe a quel file. Come puoi vedere la prima riga, devi fornire le credenziali del tuo database MySQL . Il nome del database, nome utente e password.
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(SUGGERIMENTO: è possibile avere un numero qualsiasi di entità ma fare attenzione al campo ID, se sono uguali, l'indicizzazione verrà ignorata.)
4.Modificare il file schema.xml
Aggiungi questo al tuo schema.xml come mostrato ..
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
Implementazione
indicizzazione
Questo è dove sta il vero affare. È necessario eseguire l'indicizzazione dei dati da MySQL a Solr inorder per utilizzare le query Solr.
Passaggio 1: vai al pannello di amministrazione di Solr
Premi l'URL http: // localhost: 8983 / solr sul tuo browser. Lo schermo si apre in questo modo.
Come indica il marcatore, vai a Registrazione in ordine per verificare se una delle configurazioni sopra ha portato a errori.
Passaggio 2: controlla i tuoi registri
Ok, ora sei qui, come puoi, ci sono molti messaggi gialli (AVVERTENZE). Assicurati di non avere messaggi di errore contrassegnati in rosso. In precedenza, sulla nostra configurazione avevamo aggiunto una query selezionata sul nostro db-data-config.xml , diciamo che se ci fossero errori su quella query, sarebbe stata mostrata qui.
Bene, nessun errore. Siamo a posto. Scegliamo collection1 dall'elenco come mostrato e selezioniamo Dataimport
Passaggio 3: DIH (gestore importazione dati)
Usando il DIH, ti collegherai a MySQL da Solr attraverso il file di configurazione db-data-config.xml dall'interfaccia Solr e recupererai i 10 record dal database che viene indicizzato su Solr .
Per fare ciò, scegli l'importazione completa e seleziona le opzioni Pulisci e Salva . Ora fai clic su Esegui come mostrato.
In alternativa, è possibile utilizzare anche una query di importazione completa diretta come questa.
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
Dopo aver fatto clic su Esegui , Solr inizia a indicizzare i record, in caso di errori, indica Indicizzazione non riuscita e si deve tornare alla sezione Registrazione per vedere cosa è andato storto.
Supponendo che non vi siano errori con questa configurazione e se l'indicizzazione è stata completata correttamente, si otterrebbe questa notifica.
Passaggio 4: esecuzione di query Solr
Sembra che tutto sia andato bene, ora è possibile utilizzare le query Solr per eseguire una query sui dati indicizzati. Fare clic sulla query a sinistra e quindi premere il pulsante Esegui in basso.
Vedrai i record indicizzati come mostrato.
La query Solr corrispondente per elencare tutti i record è
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
Bene, ci sono tutti e 10 i record indicizzati. Diciamo, abbiamo solo bisogno di nomi che iniziano con Ja , in questo caso, devi scegliere come target il nome della colonna solr_name
, quindi la tua query va così.
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
È così che scrivi query Solr . Per saperne di più, consulta questo bellissimo articolo .