Apache Solr - Guida rapida

Solr è una piattaforma di ricerca open source che viene utilizzata per creare file search applications. È stato costruito sopraLucene(motore di ricerca full text). Solr è pronto per le aziende, veloce e altamente scalabile. Le applicazioni realizzate con Solr sono sofisticate e offrono prestazioni elevate.

Era Yonik Seelyche ha creato Solr nel 2004 per aggiungere funzionalità di ricerca al sito Web aziendale di CNET Networks. Nel gennaio 2006, è stato realizzato un progetto open source sotto Apache Software Foundation. La sua ultima versione, Solr 6.0, è stata rilasciata nel 2016 con il supporto per l'esecuzione di query SQL parallele.

Solr può essere utilizzato insieme a Hadoop. Poiché Hadoop gestisce una grande quantità di dati, Solr ci aiuta a trovare le informazioni richieste da una fonte così ampia. Non solo ricerca, Solr può essere utilizzato anche per scopi di archiviazione. Come altri database NoSQL, è un filenon-relational data storage e processing technology.

In breve, Solr è un motore di ricerca / archiviazione scalabile, pronto per l'implementazione, ottimizzato per cercare grandi volumi di dati incentrati sul testo.

Caratteristiche di Apache Solr

Solr è una panoramica dell'API Java di Lucene. Pertanto, utilizzando Solr, puoi sfruttare tutte le funzionalità di Lucene. Diamo uno sguardo ad alcune delle caratteristiche più importanti di Solr -

  • Restful APIs- Per comunicare con Solr, non è obbligatorio avere competenze di programmazione Java. Invece puoi usare servizi riposanti per comunicare con esso. Inseriamo documenti in Solr in formati di file come XML, JSON e .CSV e otteniamo risultati negli stessi formati di file.

  • Full text search - Solr fornisce tutte le funzionalità necessarie per una ricerca di testo completo come token, frasi, controllo ortografico, caratteri jolly e completamento automatico.

  • Enterprise ready - A seconda delle esigenze dell'organizzazione, Solr può essere implementato in qualsiasi tipo di sistema (grande o piccolo) come standalone, distribuito, cloud, ecc.

  • Flexible and Extensible - Estendendo le classi Java e configurando di conseguenza, possiamo personalizzare facilmente i componenti di Solr.

  • NoSQL database - Solr può anche essere utilizzato come database NOSQL su grande scala di dati in cui possiamo distribuire le attività di ricerca lungo un cluster.

  • Admin Interface - Solr fornisce un'interfaccia utente facile da usare, facile da usare, dotata di funzionalità, utilizzando la quale possiamo eseguire tutte le attività possibili come gestire i registri, aggiungere, eliminare, aggiornare e cercare documenti.

  • Highly Scalable - Durante l'utilizzo di Solr con Hadoop, possiamo ridimensionarne la capacità aggiungendo repliche.

  • Text-Centric and Sorted by Relevance - Solr viene utilizzato principalmente per cercare documenti di testo ei risultati vengono forniti in base alla pertinenza con la query dell'utente in ordine.

A differenza di Lucene, non è necessario avere capacità di programmazione Java mentre si lavora con Apache Solr. Fornisce un meraviglioso servizio pronto per l'implementazione per creare una casella di ricerca con completamento automatico, che Lucene non fornisce. Utilizzando Solr, possiamo scalare, distribuire e gestire l'indice, per applicazioni su larga scala (Big Data).

Lucene nelle applicazioni di ricerca

Lucene è una libreria di ricerca basata su Java semplice ma potente. Può essere utilizzato in qualsiasi applicazione per aggiungere funzionalità di ricerca. Lucene è una libreria scalabile e ad alte prestazioni utilizzata per indicizzare e cercare praticamente qualsiasi tipo di testo. La libreria Lucene fornisce le operazioni principali richieste da qualsiasi applicazione di ricerca, comeIndexing e Searching.

Se disponiamo di un portale web con un enorme volume di dati, molto probabilmente avremo bisogno di un motore di ricerca nel nostro portale per estrarre le informazioni rilevanti dall'enorme pool di dati. Lucene funziona come il cuore di qualsiasi applicazione di ricerca e fornisce le operazioni vitali relative all'indicizzazione e alla ricerca.

Un motore di ricerca fa riferimento a un enorme database di risorse Internet come pagine web, newsgroup, programmi, immagini, ecc. Aiuta a individuare le informazioni sul World Wide Web.

Gli utenti possono cercare informazioni passando query nel motore di ricerca sotto forma di parole chiave o frasi. Il motore di ricerca esegue quindi la ricerca nel database e restituisce all'utente i collegamenti pertinenti.

Componenti del motore di ricerca

In generale, ci sono tre componenti di base di un motore di ricerca come elencato di seguito:

  • Web Crawler - I web crawler sono noti anche come spiders o bots. È un componente software che attraversa il Web per raccogliere informazioni.

  • Database- Tutte le informazioni sul Web sono archiviate in database. Contengono un enorme volume di risorse web.

  • Search Interfaces- Questo componente è un'interfaccia tra l'utente e il database. Aiuta l'utente a cercare nel database.

Come funzionano i motori di ricerca?

Qualsiasi applicazione di ricerca è necessaria per eseguire alcune o tutte le seguenti operazioni.

Passo Titolo Descrizione

1

Acquisisci contenuto grezzo

Il primo passo di qualsiasi applicazione di ricerca è raccogliere i contenuti di destinazione su cui deve essere condotta la ricerca.

2

Crea il documento

Il passaggio successivo consiste nel creare i documenti dai contenuti grezzi che l'applicazione di ricerca può comprendere e interpretare facilmente.

3

Analizza il documento

Prima di iniziare l'indicizzazione, il documento deve essere analizzato.

4

Indicizzazione del documento

Una volta che i documenti sono stati creati e analizzati, il passaggio successivo è indicizzarli in modo che questo documento possa essere recuperato in base a determinate chiavi, invece che all'intero contenuto del documento.

L'indicizzazione è simile agli indici che abbiamo alla fine di un libro in cui le parole comuni vengono mostrate con i loro numeri di pagina in modo che queste parole possano essere rintracciate rapidamente, invece di cercare l'intero libro.

5

Interfaccia utente per la ricerca

Quando un database di indici è pronto, l'applicazione può eseguire operazioni di ricerca. Per aiutare l'utente a effettuare una ricerca, l'applicazione deve fornire un'interfaccia utente in cui l'utente può inserire del testo e avviare il processo di ricerca

6

Crea query

Una volta che l'utente effettua una richiesta di ricerca in un testo, l'applicazione deve preparare un oggetto di query utilizzando quel testo, che può quindi essere utilizzato per interrogare il database dell'indice per ottenere dettagli rilevanti.

7

Query di ricerca

Utilizzando l'oggetto query, il database dell'indice viene controllato per ottenere i dettagli rilevanti e i documenti di contenuto.

8

Risultati di rendering

Una volta ricevuto il risultato richiesto, l'applicazione dovrebbe decidere come visualizzare i risultati all'utente utilizzando la sua interfaccia utente.

Dai un'occhiata alla seguente illustrazione. Mostra una visione generale del funzionamento dei motori di ricerca.

Oltre a queste operazioni di base, le applicazioni di ricerca possono anche fornire un'interfaccia utente-amministrazione per aiutare gli amministratori a controllare il livello di ricerca in base ai profili utente. L'analisi dei risultati di ricerca è un altro aspetto importante e avanzato di qualsiasi applicazione di ricerca.

In questo capitolo, discuteremo come impostare Solr in ambiente Windows. Per installare Solr sul tuo sistema Windows, devi seguire i passaggi indicati di seguito:

  • Visita la home page di Apache Solr e fai clic sul pulsante di download.

  • Seleziona uno dei mirror per ottenere un indice di Apache Solr. Da lì scarica il file denominatoSolr-6.2.0.zip.

  • Sposta il file dal file downloads folder nella directory richiesta e decomprimerlo.

Supponiamo di aver scaricato il file Solr e di averlo estratto nell'unità C. In tal caso, puoi avviare Solr come mostrato nello screenshot seguente.

Per verificare l'installazione, utilizza il seguente URL nel tuo browser.

http://localhost:8983/

Se il processo di installazione ha esito positivo, vedrai la dashboard dell'interfaccia utente di Apache Solr come mostrato di seguito.

Impostazione dell'ambiente Java

Possiamo anche comunicare con Apache Solr utilizzando le librerie Java; ma prima di accedere a Solr utilizzando l'API Java, è necessario impostare il percorso di classe per quelle librerie.

Impostazione del percorso di classe

Impostare il classpath alle biblioteche Solr in .bashrcfile. Aperto.bashrc in uno qualsiasi degli editor come mostrato di seguito.

$ gedit ~/.bashrc

Imposta classpath per le librerie Solr (lib cartella in HBase) come mostrato di seguito.

export CLASSPATH = $CLASSPATH://home/hadoop/Solr/lib/*

Questo serve per impedire l'eccezione "classe non trovata" durante l'accesso a HBase utilizzando l'API Java.

Solr può essere utilizzato insieme a Hadoop. Poiché Hadoop gestisce una grande quantità di dati, Solr ci aiuta a trovare le informazioni richieste da una fonte così ampia. In questa sezione, facci capire come puoi installare Hadoop sul tuo sistema.

Download di Hadoop

Di seguito sono riportati i passaggi da seguire per scaricare Hadoop sul tuo sistema.

Step 1- Vai alla home page di Hadoop. Puoi usare il link - www.hadoop.apache.org/ . Clicca il linkReleases, come evidenziato nello screenshot seguente.

Ti reindirizzerà al file Apache Hadoop Releases pagina che contiene collegamenti per i mirror dei file sorgente e binari di varie versioni di Hadoop come segue:

Step 2 - Seleziona l'ultima versione di Hadoop (nel nostro tutorial, è 2.6.4) e fai clic su binary link. Ti porterà a una pagina in cui sono disponibili i mirror per il binario Hadoop. Fare clic su uno di questi mirror per scaricare Hadoop.

Scarica Hadoop dal prompt dei comandi

Apri il terminale Linux e accedi come superutente.

$ su 
password:

Vai alla directory in cui devi installare Hadoop e salva lì il file usando il link copiato in precedenza, come mostrato nel seguente blocco di codice.

# cd /usr/local 
# wget http://redrockdigimark.com/apachemirror/hadoop/common/hadoop-
2.6.4/hadoop-2.6.4.tar.gz

Dopo aver scaricato Hadoop, estrailo utilizzando i seguenti comandi.

# tar zxvf hadoop-2.6.4.tar.gz  
# mkdir hadoop 
# mv hadoop-2.6.4/* to hadoop/ 
# exit

Installazione di Hadoop

Seguire i passaggi indicati di seguito per l'installazione Hadoop in modalità pseudo-distribuita.

Passaggio 1: configurazione di Hadoop

Puoi impostare le variabili d'ambiente Hadoop aggiungendo i seguenti comandi a ~/.bashrc file.

export HADOOP_HOME = /usr/local/hadoop export
HADOOP_MAPRED_HOME = $HADOOP_HOME export
HADOOP_COMMON_HOME = $HADOOP_HOME export 
HADOOP_HDFS_HOME = $HADOOP_HOME export 
YARN_HOME = $HADOOP_HOME 
export HADOOP_COMMON_LIB_NATIVE_DIR = $HADOOP_HOME/lib/native 
export PATH = $PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin 
export HADOOP_INSTALL = $HADOOP_HOME

Successivamente, applica tutte le modifiche al sistema in esecuzione corrente.

$ source ~/.bashrc

Passaggio 2: configurazione di Hadoop

Puoi trovare tutti i file di configurazione di Hadoop nella posizione "$ HADOOP_HOME / etc / hadoop". È necessario apportare modifiche a tali file di configurazione in base alla propria infrastruttura Hadoop.

$ cd $HADOOP_HOME/etc/hadoop

Per sviluppare programmi Hadoop in Java, è necessario reimpostare le variabili d'ambiente Java in hadoop-env.sh file sostituendo JAVA_HOME valore con la posizione di Java nel sistema.

export JAVA_HOME = /usr/local/jdk1.7.0_71

Di seguito è riportato l'elenco dei file che devi modificare per configurare Hadoop:

  • core-site.xml
  • hdfs-site.xml
  • yarn-site.xml
  • mapred-site.xml

core-site.xml

Il core-site.xml file contiene informazioni come il numero di porta utilizzato per l'istanza Hadoop, la memoria allocata per il file system, il limite di memoria per la memorizzazione dei dati e la dimensione dei buffer di lettura / scrittura.

Apri core-site.xml e aggiungi le seguenti proprietà all'interno dei tag <configuration>, </configuration>.

<configuration> 
   <property>     
      <name>fs.default.name</name>     
      <value>hdfs://localhost:9000</value>   
   </property> 
</configuration>

hdfs-site.xml

Il hdfs-site.xml file contiene informazioni come il valore dei dati di replica, namenode percorso e datanodepercorsi dei file system locali. Significa il luogo in cui si desidera archiviare l'infrastruttura Hadoop.

Assumiamo i seguenti dati.

dfs.replication (data replication value) = 1  

(In the below given path /hadoop/ is the user name. 
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.) 
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode  

(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.) 
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode

Apri questo file e aggiungi le seguenti proprietà all'interno dei tag <configuration>, </configuration>.

<configuration> 
   <property>     
      <name>dfs.replication</name>     
      <value>1</value>   
   </property>  
   
   <property>     
      <name>dfs.name.dir</name>     
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode</value>   
   </property>  
   
   <property>     
      <name>dfs.data.dir</name>     
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode</value>   
   </property> 
</configuration>

Note - Nel file sopra, tutti i valori delle proprietà sono definiti dall'utente ed è possibile apportare modifiche in base alla propria infrastruttura Hadoop.

yarn-site.xml

Questo file viene utilizzato per configurare il filato in Hadoop. Apri il file filato-site.xml e aggiungi le seguenti proprietà tra i tag <configuration>, </configuration> in questo file.

<configuration> 
   <property>     
      <name>yarn.nodemanager.aux-services</name>     
      <value>mapreduce_shuffle</value>   
   </property> 
</configuration>

mapred-site.xml

Questo file viene utilizzato per specificare quale framework MapReduce stiamo utilizzando. Per impostazione predefinita, Hadoop contiene un modello di filato-site.xml. Prima di tutto, è necessario copiare il file damapred-site,xml.template per mapred-site.xml file utilizzando il seguente comando.

$ cp mapred-site.xml.template mapred-site.xml

Aperto mapred-site.xml file e aggiungi le seguenti proprietà all'interno dei tag <configuration>, </configuration>.

<configuration> 
   <property>     
      <name>mapreduce.framework.name</name>     
      <value>yarn</value>   
   </property> 
</configuration>

Verifica dell'installazione di Hadoop

I seguenti passaggi vengono utilizzati per verificare l'installazione di Hadoop.

Passaggio 1: configurazione del nodo del nome

Impostare il namenode utilizzando il comando "hdfs namenode –format" come segue.

$ cd ~ 
$ hdfs namenode -format

Il risultato atteso è il seguente.

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG:   host = localhost/192.168.1.11 
STARTUP_MSG:   args = [-format] STARTUP_MSG:   version = 2.6.4 
... 
... 
10/24/14 21:30:56 INFO common.Storage: Storage directory 
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted. 
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to retain 1 
images with txid >= 0 
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0 
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************ 
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11 
************************************************************/

Passaggio 2: verifica del file dfs di Hadoop

Il comando seguente viene utilizzato per avviare il dfs di Hadoop. L'esecuzione di questo comando avvierà il tuo file system Hadoop.

$ start-dfs.sh

L'output previsto è il seguente:

10/24/14 21:37:56 
Starting namenodes on [localhost] 
localhost: starting namenode, logging to /home/hadoop/hadoop-2.6.4/logs/hadoop-
hadoop-namenode-localhost.out 
localhost: starting datanode, logging to /home/hadoop/hadoop-2.6.4/logs/hadoop-
hadoop-datanode-localhost.out 
Starting secondary namenodes [0.0.0.0]

Passaggio 3: verifica dello script del filato

Il seguente comando viene utilizzato per avviare lo script Yarn. L'esecuzione di questo comando avvierà i tuoi demoni Yarn.

$ start-yarn.sh

L'output previsto come segue:

starting yarn daemons 
starting resourcemanager, logging to /home/hadoop/hadoop-2.6.4/logs/yarn-
hadoop-resourcemanager-localhost.out 
localhost: starting nodemanager, logging to /home/hadoop/hadoop-
2.6.4/logs/yarn-hadoop-nodemanager-localhost.out

Passaggio 4: accesso a Hadoop sul browser

Il numero di porta predefinito per accedere a Hadoop è 50070. Utilizza il seguente URL per ottenere i servizi Hadoop sul browser.

http://localhost:50070/

Installazione di Solr su Hadoop

Seguire i passaggi indicati di seguito per scaricare e installare Solr.

Passo 1

Aprire la homepage di Apache Solr facendo clic sul seguente collegamento - https://lucene.apache.org/solr/

Passo 2

Clicca il download button(evidenziato nello screenshot sopra). Facendo clic, verrai reindirizzato alla pagina in cui sono presenti vari mirror di Apache Solr. Seleziona un mirror e fai clic su di esso, che ti reindirizzerà a una pagina in cui puoi scaricare i file sorgente e binari di Apache Solr, come mostrato nello screenshot seguente.

Passaggio 3

Facendo clic, una cartella denominata Solr-6.2.0.tqzverrà scaricato nella cartella dei download del tuo sistema. Estrai il contenuto della cartella scaricata.

Passaggio 4

Crea una cartella denominata Solr nella home directory di Hadoop e sposta il contenuto della cartella estratta su di essa, come mostrato di seguito.

$ mkdir Solr 
$ cd Downloads 
$ mv Solr-6.2.0 /home/Hadoop/

Verifica

Sfoglia il file bin cartella della directory Home di Solr e verificare l'installazione utilizzando il file version opzione, come mostrato nel seguente blocco di codice.

$ cd bin/ 
$ ./Solr version 
6.2.0

Impostare casa e percorso

Apri il .bashrc file utilizzando il seguente comando:

[Hadoop@localhost ~]$ source ~/.bashrc

Ora imposta le directory home e path per Apache Solr come segue:

export SOLR_HOME = /home/Hadoop/Solr  
export PATH = $PATH:/$SOLR_HOME/bin/

Apri il terminale ed esegui il seguente comando:

[Hadoop@localhost Solr]$ source ~/.bashrc

Ora puoi eseguire i comandi di Solr da qualsiasi directory.

In questo capitolo discuteremo l'architettura di Apache Solr. La figura seguente mostra un diagramma a blocchi dell'architettura di Apache Solr.

Solr Architecture ─ Building Blocks

Di seguito sono riportati i principali elementi costitutivi (componenti) di Apache Solr:

  • Request Handler- Le richieste che inviamo ad Apache Solr vengono elaborate da questi gestori di richieste. Le richieste potrebbero essere richieste di query o richieste di aggiornamento dell'indice. In base alle nostre esigenze, dobbiamo selezionare il gestore delle richieste. Per passare una richiesta a Solr, generalmente mapperemo il gestore su un determinato endpoint URI e la richiesta specificata verrà servita da esso.

  • Search Component- Un componente di ricerca è un tipo (caratteristica) di ricerca fornito in Apache Solr. Potrebbe essere il controllo ortografico, la query, la sfaccettatura, l'evidenziazione dei risultati, ecc. Questi componenti di ricerca sono registrati comesearch handlers. È possibile registrare più componenti in un gestore di ricerca.

  • Query Parser- Il parser di query di Apache Solr analizza le query che passiamo a Solr e verifica le query per errori sintattici. Dopo aver analizzato le query, le traduce in un formato che Lucene comprende.

  • Response Writer- Un writer di risposte in Apache Solr è il componente che genera l'output formattato per le query dell'utente. Solr supporta formati di risposta come XML, JSON, CSV, ecc. Abbiamo diversi autori di risposte per ogni tipo di risposta.

  • Analyzer/tokenizer- Lucene riconosce i dati sotto forma di gettoni. Apache Solr analizza il contenuto, lo divide in token e passa questi token a Lucene. Un analizzatore in Apache Solr esamina il testo dei campi e genera un flusso di token. Un tokenizer suddivide il flusso di token preparato dall'analizzatore in token.

  • Update Request Processor - Ogni volta che inviamo una richiesta di aggiornamento ad Apache Solr, la richiesta viene eseguita attraverso una serie di plugin (firma, registrazione, indicizzazione), noti collettivamente come update request processor. Questo processore è responsabile di modifiche come l'eliminazione di un campo, l'aggiunta di un campo, ecc.

In questo capitolo, proveremo a capire il vero significato di alcuni dei termini che vengono usati frequentemente mentre si lavora su Solr.

Terminologia generale

Di seguito è riportato un elenco di termini generali utilizzati in tutti i tipi di configurazioni Solr:

  • Instance - Proprio come un tomcat instance o a jetty instance, questo termine si riferisce al server delle applicazioni, che viene eseguito all'interno di una JVM. La home directory di Solr fornisce un riferimento a ciascuna di queste istanze di Solr, in cui uno o più core possono essere configurati per essere eseguiti in ciascuna istanza.

  • Core - Durante l'esecuzione di più indici nella tua applicazione, puoi avere più core in ogni istanza, invece di più istanze, ciascuna con un core.

  • Home - Il termine $ SOLR_HOME si riferisce alla home directory che contiene tutte le informazioni relative ai core e ai loro indici, configurazioni e dipendenze.

  • Shard - In ambienti distribuiti, i dati vengono partizionati tra più istanze Solr, dove ogni blocco di dati può essere chiamato come file Shard. Contiene un sottoinsieme dell'intero indice.

Terminologia di SolrCloud

In un capitolo precedente, abbiamo discusso come installare Apache Solr in modalità standalone. Nota che possiamo anche installare Solr in modalità distribuita (ambiente cloud) dove Solr è installato in un modello master-slave. In modalità distribuita, l'indice viene creato sul server master e viene replicato su uno o più server slave.

I termini chiave associati a Solr Cloud sono i seguenti:

  • Node - In Solr cloud, ogni singola istanza di Solr è considerata come un file node.

  • Cluster - Tutti i nodi dell'ambiente combinati insieme formano un file cluster.

  • Collection - Un cluster ha un indice logico noto come collection.

  • Shard - Uno shard è una parte della raccolta che ha una o più repliche dell'indice.

  • Replica - In Solr Core, una copia di shard che viene eseguita in un nodo è nota come replica.

  • Leader - È anche una replica di shard, che distribuisce le richieste del Solr Cloud alle repliche rimanenti.

  • Zookeeper - È un progetto Apache che Solr Cloud utilizza per la configurazione e il coordinamento centralizzati, per gestire il cluster e per eleggere un leader.

File di configurazione

I file di configurazione principali in Apache Solr sono i seguenti:

  • Solr.xml- È il file nella directory $ SOLR_HOME che contiene le informazioni relative a Solr Cloud. Per caricare i core, Solr fa riferimento a questo file, che aiuta a identificarli.

  • Solrconfig.xml - Questo file contiene le definizioni e le configurazioni specifiche del core relative alla gestione delle richieste e alla formattazione delle risposte, insieme all'indicizzazione, alla configurazione, alla gestione della memoria e all'esecuzione dei commit.

  • Schema.xml - Questo file contiene l'intero schema insieme ai campi e ai tipi di campo.

  • Core.properties- Questo file contiene le configurazioni specifiche del core. Si fa riferimentocore discovery, poiché contiene il nome del core e il percorso della directory dei dati. Può essere utilizzato in qualsiasi directory, che verrà quindi trattata come filecore directory.

Avvio di Solr

Dopo aver installato Solr, vai al file bin cartella nella home directory di Solr e avviare Solr utilizzando il seguente comando.

[Hadoop@localhost ~]$ cd   
[Hadoop@localhost ~]$ cd Solr/ 
[Hadoop@localhost Solr]$ cd bin/ 
[Hadoop@localhost bin]$ ./Solr start

Questo comando avvia Solr in background, in ascolto sulla porta 8983 visualizzando il seguente messaggio.

Waiting up to 30 seconds to see Solr running on port 8983 [\]   
Started Solr server on port 8983 (pid = 6035). Happy searching!

Avvio di Solr in primo piano

Se inizi Solr usando il startcomando, quindi Solr verrà avviato in background. Invece, puoi avviare Solr in primo piano usando il–f option.

[Hadoop@localhost bin]$ ./Solr start –f  

5823 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader 
Adding 'file:/home/Hadoop/Solr/contrib/extraction/lib/xmlbeans-2.6.0.jar' to 
classloader 
5823 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader 
Adding 'file:/home/Hadoop/Solr/dist/Solr-cell-6.2.0.jar' to classloader 
5823 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader 
Adding 'file:/home/Hadoop/Solr/contrib/clustering/lib/carrot2-guava-18.0.jar' 
to classloader 
5823 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader 
Adding 'file:/home/Hadoop/Solr/contrib/clustering/lib/attributes-binder1.3.1.jar' 
to classloader 
5823 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader 
Adding 'file:/home/Hadoop/Solr/contrib/clustering/lib/simple-xml-2.7.1.jar' 
to classloader 
…………………………………………………………………………………………………………………………………………………………………………………………………………… 
…………………………………………………………………………………………………………………………………………………………………………………………………. 
12901 INFO  (coreLoadExecutor-6-thread-1) [   x:Solr_sample] o.a.s.u.UpdateLog 
Took 24.0ms to seed version buckets with highest version 1546058939881226240 12902 
INFO  (coreLoadExecutor-6-thread-1) [   x:Solr_sample] 
o.a.s.c.CoreContainer registering core: Solr_sample 
12904 INFO  (coreLoadExecutor-6-thread-2) [   x:my_core] o.a.s.u.UpdateLog Took 
16.0ms to seed version buckets with highest version 1546058939894857728 
12904 INFO  (coreLoadExecutor-6-thread-2) [   x:my_core] o.a.s.c.CoreContainer 
registering core: my_core

Avvio di Solr su un'altra porta

Utilizzando –p option del start comando, possiamo avviare Solr in un'altra porta, come mostrato nel seguente blocco di codice.

[Hadoop@localhost bin]$ ./Solr start -p 8984  

Waiting up to 30 seconds to see Solr running on port 8984 [-]   
Started Solr server on port 8984 (pid = 10137). Happy searching!

Fermare Solr

Puoi fermare Solr usando il stop comando.

$ ./Solr stop

Questo comando arresta Solr, visualizzando un messaggio come mostrato di seguito.

Sending stop command to Solr running on port 8983 ... waiting 5 seconds to 
allow Jetty process 6035 to stop gracefully.

Riavvio di Solr

Il restartil comando di Solr ferma Solr per 5 secondi e lo riavvia. Puoi riavviare Solr usando il seguente comando:

./Solr restart

Questo comando riavvia Solr, visualizzando il seguente messaggio:

Sending stop command to Solr running on port 8983 ... waiting 5 seconds to 
allow Jetty process 6671 to stop gracefully. 
Waiting up to 30 seconds to see Solr running on port 8983 [|]  [/]   
Started Solr server on port 8983 (pid = 6906). Happy searching!

Solr ─ comando di aiuto

Il help Il comando di Solr può essere utilizzato per verificare l'utilizzo del prompt di Solr e delle sue opzioni.

[Hadoop@localhost bin]$ ./Solr -help  

Usage: Solr COMMAND OPTIONS        
   where COMMAND is one of: start, stop, restart, status, healthcheck, 
create, create_core, create_collection, delete, version, zk  
Standalone server example (start Solr running in the background on port 8984):  
   ./Solr start -p 8984  
SolrCloud example (start Solr running in SolrCloud mode using localhost:2181 
to connect to Zookeeper, with 1g max heap size and remote Java debug options enabled):  
   ./Solr start -c -m 1g -z localhost:2181 -a "-Xdebug -
   Xrunjdwp:transport = dt_socket,server = y,suspend = n,address = 1044"  
Pass -help after any COMMAND to see command-specific usage information,   
such as: ./Solr start -help or ./Solr stop -help

Solr ─ comando di stato

Questo statusIl comando di Solr può essere utilizzato per cercare e scoprire le istanze di Solr in esecuzione sul tuo computer. Può fornire informazioni su un'istanza Solr come la sua versione, l'utilizzo della memoria, ecc.

Puoi controllare lo stato di un'istanza Solr, utilizzando il comando status come segue:

[Hadoop@localhost bin]$ ./Solr status

All'esecuzione, il comando precedente visualizza lo stato di Solr come segue:

Found 1 Solr nodes:   

Solr process 6906 running on port 8983 {   
   "Solr_home":"/home/Hadoop/Solr/server/Solr",   
   "version":"6.2.0 764d0f19151dbff6f5fcd9fc4b2682cf934590c5 - 
   mike - 2016-08-20 05:41:37",   
   "startTime":"2016-09-20T06:00:02.877Z",   
   "uptime":"0 days, 0 hours, 5 minutes, 14 seconds",   
   "memory":"30.6 MB (%6.2) of 490.7 MB"
}

Solr Admin

Dopo aver avviato Apache Solr, puoi visitare la homepage del Solr web interface utilizzando il seguente URL.

Localhost:8983/Solr/

L'interfaccia di Solr Admin appare come segue:

Un Solr Core è un'istanza in esecuzione di un indice Lucene che contiene tutti i file di configurazione Solr necessari per utilizzarlo. Dobbiamo creare un Solr Core per eseguire operazioni come indicizzazione e analisi.

Un'applicazione Solr può contenere uno o più core. Se necessario, due core in un'applicazione Solr possono comunicare tra loro.

Creazione di un nucleo

Dopo aver installato e avviato Solr, è possibile connettersi al client (interfaccia web) di Solr.

Come evidenziato nello screenshot seguente, inizialmente non ci sono core in Apache Solr. Ora vedremo come creare un nucleo in Solr.

Utilizzo del comando create

Un modo per creare un nucleo è creare un file schema-less core usando il create comando, come mostrato di seguito -

[Hadoop@localhost bin]$ ./Solr create -c Solr_sample

Qui stiamo cercando di creare un nucleo denominato Solr_samplein Apache Solr. Questo comando crea un core che mostra il seguente messaggio.

Copying configuration to new core instance directory:
/home/Hadoop/Solr/server/Solr/Solr_sample 

Creating new core 'Solr_sample' using command: 
http://localhost:8983/Solr/admin/cores?action=CREATE&name=Solr_sample&instanceD 
ir = Solr_sample {  
   "responseHeader":{    
      "status":0,    
      "QTime":11550
   },  
   "core":"Solr_sample" 
}

Puoi creare più core in Solr. Sul lato sinistro di Solr Admin, puoi vedere un filecore selector dove puoi selezionare il core appena creato, come mostrato nello screenshot seguente.

Utilizzo del comando create_core

In alternativa, puoi creare un core usando il create_corecomando. Questo comando ha le seguenti opzioni:

–C core_name Nome del nucleo che volevi creare
-p port_name Porta in cui si desidera creare il core
-d conf_dir Directory di configurazione della porta

Vediamo come puoi usare il file create_corecomando. Qui proveremo a creare un core denominatomy_core.

[Hadoop@localhost bin]$ ./Solr create_core -c my_core

All'esecuzione, il comando precedente crea un core che mostra il seguente messaggio:

Copying configuration to new core instance directory: 
/home/Hadoop/Solr/server/Solr/my_core  

Creating new core 'my_core' using command: 
http://localhost:8983/Solr/admin/cores?action=CREATE&name=my_core&instanceD
ir = my_core {  
   "responseHeader":{  
      "status":0,  
      "QTime":1346
   },  
   "core":"my_core" 
}

Eliminazione di un core

Puoi eliminare un core utilizzando il file deletecomando di Apache Solr. Supponiamo di avere un nucleo denominatomy_core in Solr, come mostrato nello screenshot seguente.

Puoi eliminare questo core usando delete comando passando il nome del core a questo comando come segue:

[Hadoop@localhost bin]$ ./Solr delete -c my_core

Eseguendo il comando precedente, il core specificato verrà cancellato visualizzando il seguente messaggio.

Deleting core 'my_core' using command: 
http://localhost:8983/Solr/admin/cores?action=UNLOAD&core = my_core&deleteIndex
   = true&deleteDataDir = true&deleteInstanceDir = true  {
   
   "responseHeader" :{    
      "status":0,    
      "QTime":170
   }
}

È possibile aprire l'interfaccia web di Solr per verificare se il core è stato eliminato o meno.

In generale, indexingè un arrangiamento di documenti o (altre entità) sistematicamente. L'indicizzazione consente agli utenti di individuare le informazioni in un documento.

  • L'indicizzazione raccoglie, analizza e archivia i documenti.

  • L'indicizzazione viene eseguita per aumentare la velocità e le prestazioni di una query di ricerca durante la ricerca di un documento richiesto.

Indicizzazione in Apache Solr

In Apache Solr, possiamo indicizzare (aggiungere, eliminare, modificare) vari formati di documenti come xml, csv, pdf, ecc. Possiamo aggiungere dati all'indice Solr in diversi modi.

In questo capitolo, discuteremo dell'indicizzazione:

  • Utilizzo dell'interfaccia Web di Solr.
  • Utilizzando una qualsiasi delle API client come Java, Python, ecc.
  • Usando il post tool.

In questo capitolo, discuteremo come aggiungere dati all'indice di Apache Solr utilizzando varie interfacce (riga di comando, interfaccia web e API client Java)

Aggiunta di documenti utilizzando Post Command

Solr ha un post comando nella sua bin/directory. Usando questo comando, puoi indicizzare vari formati di file come JSON, XML, CSV in Apache Solr.

Sfoglia il file bin directory di Apache Solr ed eseguire il file –h option del comando post, come mostrato nel seguente blocco di codice.

[Hadoop@localhost bin]$ cd $SOLR_HOME 
[Hadoop@localhost bin]$ ./post -h

Eseguendo il comando precedente, otterrai un elenco di opzioni del file post command, come mostrato di seguito.

Usage: post -c <collection> [OPTIONS] <files|directories|urls|-d [".."]> 
or post –help  
   collection name defaults to DEFAULT_SOLR_COLLECTION if not specified  
OPTIONS 
======= 
Solr options: 
   -url <base Solr update URL> (overrides collection, host, and port) 
   -host <host> (default: localhost) 
   -p or -port <port> (default: 8983) 
   -commit yes|no (default: yes)  

Web crawl options:  
   -recursive <depth> (default: 1) 
   -delay <seconds> (default: 10)  

Directory crawl options: 
   -delay <seconds> (default: 0)  

stdin/args options: 
   -type <content/type> (default: application/xml)  

Other options: 
   -filetypes <type>[,<type>,...] (default:   
   xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,
   rtf,htm,html,txt,log) 
   -params "<key> = <value>[&<key> = <value>...]" (values must be 
   URL-encoded; these pass through to Solr update request) 
   -out yes|no (default: no; yes outputs Solr response to console) 
   -format Solr (sends application/json content as Solr commands 
   to /update instead of /update/json/docs)  

Examples: 
* JSON file:./post -c wizbang events.json 
* XML files: ./post -c records article*.xml 
* CSV file: ./post -c signals LATEST-signals.csv 
* Directory of files: ./post -c myfiles ~/Documents 
* Web crawl: ./post -c gettingstarted http://lucene.apache.org/Solr -recursive 1 -delay 1 
* Standard input (stdin): echo '{commit: {}}' | ./post -c my_collection -
type application/json -out yes –d 
* Data as string: ./post -c signals -type text/csv -out yes -d $'id,value\n1,0.47'

Esempio

Supponiamo di avere un file denominato sample.csv con il seguente contenuto (in bin directory).

ID studente Nome di battesimo Cognome Telefono Città
001 Rajiv Reddy 9848022337 Hyderabad
002 Siddharth Bhattacharya 9848022338 Calcutta
003 Rajesh Khanna 9848022339 Delhi
004 Preethi Agarwal 9848022330 Pune
005 Trupthi Mohanty 9848022336 Bhubaneshwar
006 Archana Mishra 9848022335 Chennai

Il set di dati sopra contiene dettagli personali come ID studente, nome, cognome, telefono e città. Il file CSV del set di dati è mostrato di seguito. Qui, devi notare che devi menzionare lo schema, documentando la sua prima riga.

id,    first_name,   last_name,   phone_no,      location 
001,   Pruthvi,      Reddy,       9848022337,    Hyderabad 
002,   kasyap,       Sastry,      9848022338,    Vishakapatnam 
003,   Rajesh,       Khanna,      9848022339,    Delhi 
004,   Preethi,      Agarwal,     9848022330,    Pune 
005,   Trupthi,      Mohanty,     9848022336,    Bhubaneshwar 
006,   Archana,      Mishra,      9848022335,    Chennai

Puoi indicizzare questi dati sotto il core denominato sample_Solr usando il post comando come segue -

[Hadoop@localhost bin]$ ./post -c Solr_sample sample.csv

Quando si esegue il comando precedente, il documento dato viene indicizzato sotto il core specificato, generando il seguente output.

/home/Hadoop/java/bin/java -classpath /home/Hadoop/Solr/dist/Solr-core
6.2.0.jar -Dauto = yes -Dc = Solr_sample -Ddata = files 
org.apache.Solr.util.SimplePostTool sample.csv 
SimplePostTool version 5.0.0 
Posting files to [base] url http://localhost:8983/Solr/Solr_sample/update... 
Entering auto mode. File endings considered are 
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,
htm,html,txt,log 
POSTing file sample.csv (text/csv) to [base] 
1 files indexed. 
COMMITting Solr index changes to 
http://localhost:8983/Solr/Solr_sample/update... 
Time spent: 0:00:00.228

Visita la home page dell'interfaccia utente Web di Solr utilizzando il seguente URL:

http://localhost:8983/

Seleziona il core Solr_sample. Per impostazione predefinita, il gestore delle richieste è/selecte la query è ":". Senza apportare modifiche, fare clic suExecuteQuery pulsante in fondo alla pagina.

Quando si esegue la query, è possibile osservare il contenuto del documento CSV indicizzato in formato JSON (predefinito), come mostrato nello screenshot seguente.

Note - Allo stesso modo, puoi indicizzare altri formati di file come JSON, XML, CSV, ecc.

Aggiunta di documenti utilizzando l'interfaccia Web Solr

È inoltre possibile indicizzare i documenti utilizzando l'interfaccia web fornita da Solr. Vediamo come indicizzare il seguente documento JSON.

[ 
   { 
      "id" : "001", 
      "name" : "Ram", 
      "age" : 53, 
      "Designation" : "Manager", 
      "Location" : "Hyderabad", 
   }, 
   { 
      "id" : "002", 
      "name" : "Robert", 
      "age" : 43, 
      "Designation" : "SR.Programmer", 
      "Location" : "Chennai", 
   }, 
   { 
      "id" : "003", 
      "name" : "Rahim", 
      "age" : 25, 
      "Designation" : "JR.Programmer", 
      "Location" : "Delhi", 
   } 
]

Passo 1

Apri l'interfaccia web di Solr utilizzando il seguente URL:

http://localhost:8983/

Step 2

Seleziona il core Solr_sample. Per impostazione predefinita, i valori dei campi Request Handler, Common Within, Overwrite e Boost sono rispettivamente / update, 1000, true e 1.0, come mostrato nello screenshot seguente.

Ora, scegli il formato del documento che desideri tra JSON, CSV, XML, ecc. Digita il documento da indicizzare nell'area di testo e fai clic sul Submit Document pulsante, come mostrato nello screenshot seguente.

Aggiunta di documenti utilizzando Java Client API

Di seguito è riportato il programma Java per aggiungere documenti all'indice Apache Solr. Salva questo codice in un file con il nomeAddingDocument.java.

import java.io.IOException;  

import org.apache.Solr.client.Solrj.SolrClient; 
import org.apache.Solr.client.Solrj.SolrServerException; 
import org.apache.Solr.client.Solrj.impl.HttpSolrClient; 
import org.apache.Solr.common.SolrInputDocument; 

public class AddingDocument { 
   public static void main(String args[]) throws Exception { 
      //Preparing the Solr client 
      String urlString = "http://localhost:8983/Solr/my_core"; 
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();   
      
      //Preparing the Solr document 
      SolrInputDocument doc = new SolrInputDocument(); 
   
      //Adding fields to the document 
      doc.addField("id", "003"); 
      doc.addField("name", "Rajaman"); 
      doc.addField("age","34"); 
      doc.addField("addr","vishakapatnam"); 
         
      //Adding the document to Solr 
      Solr.add(doc);         
         
      //Saving the changes 
      Solr.commit(); 
      System.out.println("Documents added"); 
   } 
}

Compilare il codice sopra eseguendo i seguenti comandi nel terminale:

[Hadoop@localhost bin]$ javac AddingDocument 
[Hadoop@localhost bin]$ java AddingDocument

Eseguendo il comando precedente, otterrai il seguente output.

Documents added

Nel capitolo precedente, abbiamo spiegato come aggiungere dati in Solr che è nei formati di file JSON e .CSV. In questo capitolo, dimostreremo come aggiungere dati nell'indice Apache Solr utilizzando il formato documento XML.

Dati di esempio

Supponiamo di dover aggiungere i seguenti dati all'indice Solr utilizzando il formato di file XML.

ID studente Nome di battesimo Cognome Telefono Città
001 Rajiv Reddy 9848022337 Hyderabad
002 Siddharth Bhattacharya 9848022338 Calcutta
003 Rajesh Khanna 9848022339 Delhi
004 Preethi Agarwal 9848022330 Pune
005 Trupthi Mohanty 9848022336 Bhubaneshwar
006 Archana Mishra 9848022335 Chennai

Aggiunta di documenti utilizzando XML

Per aggiungere i dati di cui sopra nell'indice Solr, dobbiamo preparare un documento XML, come mostrato di seguito. Salva questo documento in un file con il nomesample.xml.

<add> 
   <doc> 
      <field name = "id">001</field> 
      <field name = "first name">Rajiv</field> 
      <field name = "last name">Reddy</field> 
      <field name = "phone">9848022337</field> 
      <field name = "city">Hyderabad</field> 
   </doc>  
   <doc> 
      <field name = "id">002</field> 
      <field name = "first name">Siddarth</field> 
      <field name = "last name">Battacharya</field> 
      <field name = "phone">9848022338</field> 
      <field name = "city">Kolkata</field> 
   </doc>  
   <doc> 
      <field name = "id">003</field> 
      <field name = "first name">Rajesh</field> 
      <field name = "last name">Khanna</field> 
      <field name = "phone">9848022339</field> 
      <field name = "city">Delhi</field> 
   </doc>  
   <doc> 
      <field name = "id">004</field> 
      <field name = "first name">Preethi</field> 
      <field name = "last name">Agarwal</field> 
      <field name = "phone">9848022330</field> 
      <field name = "city">Pune</field> 
   </doc>  
   <doc> 
      <field name = "id">005</field> 
      <field name = "first name">Trupthi</field> 
      <field name = "last name">Mohanthy</field> 
      <field name = "phone">9848022336</field> 
      <field name = "city">Bhuwaeshwar</field> 
   </doc> 
   <doc> 
      <field name = "id">006</field> 
      <field name = "first name">Archana</field> 
      <field name = "last name">Mishra</field> 
      <field name = "phone">9848022335</field> 
      <field name = "city">Chennai</field> 
   </doc> 
</add>

Come puoi osservare, il file XML scritto per aggiungere dati all'indice contiene tre tag importanti e cioè <add> </add>, <doc> </doc> e <field> </ field>.

  • add- Questo è il tag radice per l'aggiunta di documenti all'indice. Contiene uno o più documenti che devono essere aggiunti.

  • doc- I documenti che aggiungiamo dovrebbero essere inseriti nei tag <doc> </doc>. Questo documento contiene i dati sotto forma di campi.

  • field - Il tag del campo contiene il nome e il valore dei campi del documento.

Dopo aver preparato il documento, è possibile aggiungere questo documento all'indice utilizzando uno dei mezzi discussi nel capitolo precedente.

Supponiamo che il file XML esista in bin directory di Solr e deve essere indicizzato nel core denominato my_core, quindi puoi aggiungerlo all'indice Solr usando il post strumento come segue -

[Hadoop@localhost bin]$ ./post -c my_core sample.xml

Eseguendo il comando precedente, otterrai il seguente output.

/home/Hadoop/java/bin/java -classpath /home/Hadoop/Solr/dist/Solr-
core6.2.0.jar -Dauto = yes -Dc = my_core -Ddata = files 
org.apache.Solr.util.SimplePostTool sample.xml 
SimplePostTool version 5.0.0 
Posting files to [base] url http://localhost:8983/Solr/my_core/update... 
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,
xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log 
POSTing file sample.xml (application/xml) to [base] 
1 files indexed. 
COMMITting Solr index changes to http://localhost:8983/Solr/my_core/update... 
Time spent: 0:00:00.201

Verifica

Visita la home page dell'interfaccia web di Apache Solr e seleziona il core my_core. Prova a recuperare tutti i documenti passando la query ":" nell'area di testoqed eseguire la query. Durante l'esecuzione, è possibile osservare che i dati desiderati vengono aggiunti all'indice Solr.

Aggiornamento del documento utilizzando XML

Di seguito è riportato il file XML utilizzato per aggiornare un campo nel documento esistente. Salvalo in un file con il nomeupdate.xml.

<add>   
   <doc>     
      <field name = "id">001</field>     
      <field name = "first name" update = "set">Raj</field>     
      <field name = "last name" update = "add">Malhotra</field>     
      <field name = "phone" update = "add">9000000000</field>    
      <field name = "city" update = "add">Delhi</field>   
   </doc> 
</add>

Come puoi osservare, il file XML scritto per aggiornare i dati è proprio come quello che usiamo per aggiungere documenti. Ma l'unica differenza è che usiamo il fileupdate attributo del campo.

Nel nostro esempio, useremo il documento sopra e proveremo ad aggiornare i campi del documento con l'id 001.

Supponiamo che il documento XML esista nel file binelenco di Solr. Poiché stiamo aggiornando l'indice che esiste nel core denominatomy_core, puoi aggiornare utilizzando il post strumento come segue -

[Hadoop@localhost bin]$ ./post -c my_core update.xml

Eseguendo il comando precedente, otterrai il seguente output.

/home/Hadoop/java/bin/java -classpath /home/Hadoop/Solr/dist/Solr-core
6.2.0.jar -Dauto = yes -Dc = my_core -Ddata = files 
org.apache.Solr.util.SimplePostTool update.xml 
SimplePostTool version 5.0.0 
Posting files to [base] url http://localhost:8983/Solr/my_core/update... 
Entering auto mode. File endings considered are 
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,
htm,html,txt,log 
POSTing file update.xml (application/xml) to [base] 
1 files indexed. 
COMMITting Solr index changes to http://localhost:8983/Solr/my_core/update... 
Time spent: 0:00:00.159

Verifica

Visita la homepage dell'interfaccia web di Apache Solr e seleziona il core come my_core. Prova a recuperare tutti i documenti passando la query ":" nell'area di testoqed eseguire la query. Durante l'esecuzione, puoi osservare che il documento viene aggiornato.

Aggiornamento del documento utilizzando Java (API client)

Di seguito è riportato il programma Java per aggiungere documenti all'indice Apache Solr. Salva questo codice in un file con il nomeUpdatingDocument.java.

import java.io.IOException;  

import org.apache.Solr.client.Solrj.SolrClient; 
import org.apache.Solr.client.Solrj.SolrServerException; 
import org.apache.Solr.client.Solrj.impl.HttpSolrClient; 
import org.apache.Solr.client.Solrj.request.UpdateRequest; 
import org.apache.Solr.client.Solrj.response.UpdateResponse;
import org.apache.Solr.common.SolrInputDocument;  

public class UpdatingDocument { 
   public static void main(String args[]) throws SolrServerException, IOException { 
      //Preparing the Solr client 
      String urlString = "http://localhost:8983/Solr/my_core"; 
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();   
      
      //Preparing the Solr document 
      SolrInputDocument doc = new SolrInputDocument(); 
   
      UpdateRequest updateRequest = new UpdateRequest();  
      updateRequest.setAction( UpdateRequest.ACTION.COMMIT, false, false);    
      SolrInputDocument myDocumentInstantlycommited = new SolrInputDocument();  
      
      myDocumentInstantlycommited.addField("id", "002"); 
      myDocumentInstantlycommited.addField("name", "Rahman"); 
      myDocumentInstantlycommited.addField("age","27"); 
      myDocumentInstantlycommited.addField("addr","hyderabad"); 
      
      updateRequest.add( myDocumentInstantlycommited);  
      UpdateResponse rsp = updateRequest.process(Solr); 
      System.out.println("Documents Updated"); 
   } 
}

Compilare il codice sopra eseguendo i seguenti comandi nel terminale:

[Hadoop@localhost bin]$ javac UpdatingDocument 
[Hadoop@localhost bin]$ java UpdatingDocument

Eseguendo il comando precedente, otterrai il seguente output.

Documents updated

Eliminazione del documento

Per eliminare i documenti dall'indice di Apache Solr, è necessario specificare gli ID dei documenti da eliminare tra i tag <delete> </delete>.

<delete>   
   <id>003</id>   
   <id>005</id> 
   <id>004</id> 
   <id>002</id> 
</delete>

Qui, questo codice XML viene utilizzato per eliminare i documenti con ID 003 e 005. Salva questo codice in un file con il nomedelete.xml.

Se vuoi eliminare i documenti dall'indice che appartiene al core denominato my_core, quindi puoi pubblicare il file delete.xml file utilizzando l'estensione post strumento, come mostrato di seguito.

[Hadoop@localhost bin]$ ./post -c my_core delete.xml

Eseguendo il comando precedente, otterrai il seguente output.

/home/Hadoop/java/bin/java -classpath /home/Hadoop/Solr/dist/Solr-core
6.2.0.jar -Dauto = yes -Dc = my_core -Ddata = files 
org.apache.Solr.util.SimplePostTool delete.xml 
SimplePostTool version 5.0.0 
Posting files to [base] url http://localhost:8983/Solr/my_core/update... 
Entering auto mode. File endings considered are 
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,
rtf,htm,html,txt,log 
POSTing file delete.xml (application/xml) to [base] 
1 files indexed. 
COMMITting Solr index changes to http://localhost:8983/Solr/my_core/update... 
Time spent: 0:00:00.179

Verifica

Visita la home page dell'interfaccia web di Apache Solr e seleziona il core come my_core. Prova a recuperare tutti i documenti passando la query ":" nell'area di testoqed eseguire la query. Durante l'esecuzione, è possibile osservare che i documenti specificati vengono eliminati.

Eliminazione di un campo

A volte è necessario eliminare i documenti in base a campi diversi dall'ID. Ad esempio, potremmo dover eliminare i documenti in cui la città è Chennai.

In questi casi, è necessario specificare il nome e il valore del campo all'interno della coppia di tag <query> </query>.

<delete> 
   <query>city:Chennai</query> 
</delete>

Salvalo come delete_field.xml ed eseguire l'operazione di cancellazione sul core denominato my_core usando il post strumento di Solr.

[Hadoop@localhost bin]$ ./post -c my_core delete_field.xml

Eseguendo il comando precedente, produce il seguente output.

/home/Hadoop/java/bin/java -classpath /home/Hadoop/Solr/dist/Solr-core
6.2.0.jar -Dauto = yes -Dc = my_core -Ddata = files 
org.apache.Solr.util.SimplePostTool delete_field.xml 
SimplePostTool version 5.0.0 
Posting files to [base] url http://localhost:8983/Solr/my_core/update... 
Entering auto mode. File endings considered are 
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,
rtf,htm,html,txt,log 
POSTing file delete_field.xml (application/xml) to [base] 
1 files indexed. 
COMMITting Solr index changes to http://localhost:8983/Solr/my_core/update... 
Time spent: 0:00:00.084

Verifica

Visita la home page dell'interfaccia web di Apache Solr e seleziona il core come my_core. Prova a recuperare tutti i documenti passando la query ":" nell'area di testoqed eseguire la query. Durante l'esecuzione, è possibile osservare che i documenti contenenti la coppia di valori di campo specificata vengono eliminati.

Eliminazione di tutti i documenti

Proprio come per eliminare un campo specifico, se vuoi eliminare tutti i documenti da un indice, devi solo passare il simbolo ":" tra i tag <query> </ query>, come mostrato di seguito.

<delete> 
   <query>*:*</query> 
</delete>

Salvalo come delete_all.xml ed eseguire l'operazione di cancellazione sul core denominato my_core usando il post strumento di Solr.

[Hadoop@localhost bin]$ ./post -c my_core delete_all.xml

Eseguendo il comando precedente, produce il seguente output.

/home/Hadoop/java/bin/java -classpath /home/Hadoop/Solr/dist/Solr-core
6.2.0.jar -Dauto = yes -Dc = my_core -Ddata = files 
org.apache.Solr.util.SimplePostTool deleteAll.xml 
SimplePostTool version 5.0.0 
Posting files to [base] url http://localhost:8983/Solr/my_core/update... 
Entering auto mode. File endings considered are 
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,
htm,html,txt,log 
POSTing file deleteAll.xml (application/xml) to [base] 
1 files indexed. 
COMMITting Solr index changes to http://localhost:8983/Solr/my_core/update... 
Time spent: 0:00:00.138

Verifica

Visita la homepage dell'interfaccia web di Apache Solr e seleziona il core come my_core. Prova a recuperare tutti i documenti passando la query ":" nell'area di testoqed eseguire la query. Durante l'esecuzione, è possibile osservare che i documenti contenenti la coppia di valori di campo specificata vengono eliminati.

Eliminazione di tutti i documenti utilizzando Java (API client)

Di seguito è riportato il programma Java per aggiungere documenti all'indice Apache Solr. Salva questo codice in un file con il nomeUpdatingDocument.java.

import java.io.IOException;  

import org.apache.Solr.client.Solrj.SolrClient; 
import org.apache.Solr.client.Solrj.SolrServerException; 
import org.apache.Solr.client.Solrj.impl.HttpSolrClient; 
import org.apache.Solr.common.SolrInputDocument;  

public class DeletingAllDocuments { 
   public static void main(String args[]) throws SolrServerException, IOException {
      //Preparing the Solr client 
      String urlString = "http://localhost:8983/Solr/my_core"; 
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();   
      
      //Preparing the Solr document 
      SolrInputDocument doc = new SolrInputDocument();   
          
      //Deleting the documents from Solr 
      Solr.deleteByQuery("*");        
         
      //Saving the document 
      Solr.commit(); 
      System.out.println("Documents deleted"); 
   } 
}

Compilare il codice sopra eseguendo i seguenti comandi nel terminale:

[Hadoop@localhost bin]$ javac DeletingAllDocuments 
[Hadoop@localhost bin]$ java DeletingAllDocuments

Eseguendo il comando precedente, otterrai il seguente output.

Documents deleted

In questo capitolo, discuteremo come recuperare i dati utilizzando Java Client API. Supponiamo di avere un documento .csv denominatosample.csv con il seguente contenuto.

001,9848022337,Hyderabad,Rajiv,Reddy  
002,9848022338,Kolkata,Siddarth,Battacharya 
003,9848022339,Delhi,Rajesh,Khanna

Puoi indicizzare questi dati sotto il core denominato sample_Solr usando il post comando.

[Hadoop@localhost bin]$ ./post -c Solr_sample sample.csv

Di seguito è riportato il programma Java per aggiungere documenti all'indice Apache Solr. Salva questo codice in un file con namedRetrievingData.java.

import java.io.IOException;  

import org.apache.Solr.client.Solrj.SolrClient; 
import org.apache.Solr.client.Solrj.SolrQuery; 
import org.apache.Solr.client.Solrj.SolrServerException; 
import org.apache.Solr.client.Solrj.impl.HttpSolrClient; 
import org.apache.Solr.client.Solrj.response.QueryResponse; 
import org.apache.Solr.common.SolrDocumentList;  

public class RetrievingData { 
   public static void main(String args[]) throws SolrServerException, IOException  { 
      //Preparing the Solr client 
      String urlString = "http://localhost:8983/Solr/my_core"; 
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();  
      
      //Preparing Solr query 
      SolrQuery query = new SolrQuery();  
      query.setQuery("*:*");  
   
      //Adding the field to be retrieved 
      query.addField("*");  
   
      //Executing the query 
      QueryResponse queryResponse = Solr.query(query);  
   
      //Storing the results of the query 
      SolrDocumentList docs = queryResponse.getResults();    
      System.out.println(docs); 
      System.out.println(docs.get(0)); 
      System.out.println(docs.get(1)); 
      System.out.println(docs.get(2));   
         
      //Saving the operations 
      Solr.commit();         
   } 
}

Compilare il codice sopra eseguendo i seguenti comandi nel terminale:

[Hadoop@localhost bin]$ javac RetrievingData 
[Hadoop@localhost bin]$ java RetrievingData

Eseguendo il comando precedente, otterrai il seguente output.

{numFound = 3,start = 0,docs = [SolrDocument{id=001, phone = [9848022337], 
city = [Hyderabad], first_name = [Rajiv], last_name = [Reddy], 
_version_ = 1547262806014820352}, SolrDocument{id = 002, phone = [9848022338], 
city = [Kolkata], first_name = [Siddarth], last_name = [Battacharya], 

_version_ = 1547262806026354688}, SolrDocument{id = 003, phone = [9848022339], 
city = [Delhi], first_name = [Rajesh], last_name = [Khanna], 

_version_ = 1547262806029500416}]} 

SolrDocument{id = 001, phone = [9848022337], city = [Hyderabad], first_name = [Rajiv], 
last_name = [Reddy], _version_ = 1547262806014820352} 

SolrDocument{id = 002, phone = [9848022338], city = [Kolkata], first_name = [Siddarth], 
last_name = [Battacharya], _version_ = 1547262806026354688} 

SolrDocument{id = 003, phone = [9848022339], city = [Delhi], first_name = [Rajesh], 
last_name = [Khanna], _version_ = 1547262806029500416}

Oltre a memorizzare i dati, Apache Solr fornisce anche la possibilità di interrogarli nuovamente come e quando richiesto. Solr fornisce alcuni parametri utilizzando i quali possiamo interrogare i dati in esso memorizzati.

Nella tabella seguente, abbiamo elencato i vari parametri di query disponibili in Apache Solr.

Parametro Descrizione
q Questo è il parametro di query principale di Apache Solr, i documenti vengono valutati in base alla loro somiglianza ai termini in questo parametro.
fq Questo parametro rappresenta la query del filtro di Apache Solr e limita il set di risultati ai documenti che corrispondono a questo filtro.
inizio Il parametro di inizio rappresenta gli offset iniziali per i risultati di una pagina, il valore predefinito di questo parametro è 0.
righe Questo parametro rappresenta il numero di documenti che devono essere recuperati per pagina. Il valore predefinito di questo parametro è 10.
ordinare Questo parametro specifica l'elenco dei campi, separati da virgole, in base ai quali ordinare i risultati della query.
fl Questo parametro specifica l'elenco dei campi da restituire per ogni documento nel set di risultati.
wt Questo parametro rappresenta il tipo di writer della risposta di cui si desidera visualizzare il risultato.

Puoi vedere tutti questi parametri come opzioni per interrogare Apache Solr. Visita la home page di Apache Solr. Sul lato sinistro della pagina, fai clic sull'opzione Query. Qui puoi vedere i campi per i parametri di una query.

Recupero dei record

Supponiamo di avere 3 record nel nucleo denominato my_core. Per recuperare un particolare record dal core selezionato, è necessario passare le coppie nome e valore dei campi di un particolare documento. Ad esempio, se desideri recuperare il record con il valore del campoid, devi passare la coppia nome-valore del campo come - Id:001 come valore per il parametro q ed eseguire la query.

Allo stesso modo, puoi recuperare tutti i record da un indice passando *: * come valore al parametro q, come mostrato nello screenshot seguente.

Recupero dal 2 ° record

Possiamo recuperare i record dal secondo record passando 2 come valore al parametro start, come mostrato nello screenshot seguente.

Limitazione del numero di record

È possibile limitare il numero di record specificando un valore nel file rowsparametro. Ad esempio, possiamo limitare il numero totale di record nel risultato della query a 2 passando il valore 2 nel parametrorows, come mostrato nello screenshot seguente.

Tipo di scrittore di risposta

È possibile ottenere la risposta nel tipo di documento richiesto selezionandone uno dai valori forniti del parametro wt.

Nell'istanza precedente, abbiamo scelto il .csv formato per ottenere la risposta.

Elenco dei campi

Se vogliamo avere campi particolari nei documenti risultanti, dobbiamo passare l'elenco dei campi obbligatori, separati da virgole, come valore alla proprietà fl.

Nell'esempio seguente, stiamo cercando di recuperare i campi: id, phone, e first_name.

La sfaccettatura in Apache Solr si riferisce alla classificazione dei risultati della ricerca in varie categorie. In questo capitolo, discuteremo i tipi di sfaccettatura disponibili in Apache Solr -

  • Query faceting - Restituisce il numero di documenti nei risultati della ricerca corrente che corrispondono anche alla query data.

  • Date faceting - Restituisce il numero di documenti che rientrano in determinati intervalli di date.

I comandi di sfaccettatura vengono aggiunti a qualsiasi normale richiesta di query Solr e i conteggi di sfaccettatura tornano nella stessa risposta alla query.

Esempio di query di sfaccettatura

Usando il campo faceting, possiamo recuperare i conteggi per tutti i termini o solo per i primi termini in un dato campo.

Ad esempio, consideriamo quanto segue books.csv file che contiene dati su vari libri.

id,cat,name,price,inStock,author,series_t,sequence_i,genre_s 
0553573403,book,A Game of Thrones,5.99,true,George R.R. Martin,"A Song of Ice 
and Fire",1,fantasy 

0553579908,book,A Clash of Kings,10.99,true,George R.R. Martin,"A Song of Ice 
and Fire",2,fantasy 

055357342X,book,A Storm of Swords,7.99,true,George R.R. Martin,"A Song of Ice 
and Fire",3,fantasy 

0553293354,book,Foundation,7.99,true,Isaac Asimov,Foundation Novels,1,scifi 
0812521390,book,The Black Company,4.99,false,Glen Cook,The Chronicles of The 
Black Company,1,fantasy 

0812550706,book,Ender's Game,6.99,true,Orson Scott Card,Ender,1,scifi 
0441385532,book,Jhereg,7.95,false,Steven Brust,Vlad Taltos,1,fantasy 
0380014300,book,Nine Princes In Amber,6.99,true,Roger Zelazny,the Chronicles of 
Amber,1,fantasy 

0805080481,book,The Book of Three,5.99,true,Lloyd Alexander,The Chronicles of 
Prydain,1,fantasy 

080508049X,book,The Black Cauldron,5.99,true,Lloyd Alexander,The Chronicles of 
Prydain,2,fantasy

Inseriamo questo file in Apache Solr utilizzando l'estensione post attrezzo.

[Hadoop@localhost bin]$ ./post -c Solr_sample sample.csv

All'esecuzione del comando precedente, tutti i documenti menzionati nel dato .csv il file verrà caricato in Apache Solr.

Ora eseguiamo una query sfaccettata sul campo author con 0 righe nella raccolta / core my_core.

Apri l'interfaccia utente web di Apache Solr e sul lato sinistro della pagina, seleziona la casella di controllo facet, come mostrato nello screenshot seguente.

Selezionando la casella di controllo, avrai altri tre campi di testo per passare i parametri della ricerca facet. Ora, come parametri della query, passa i seguenti valori.

q = *:*, rows = 0, facet.field = author

Infine, esegui la query facendo clic su Execute Query pulsante.

All'esecuzione, produrrà il seguente risultato.

Classifica i documenti nell'indice in base all'autore e specifica il numero di libri forniti da ciascun autore.

Sfaccettatura tramite API client Java

Di seguito è riportato il programma Java per aggiungere documenti all'indice Apache Solr. Salva questo codice in un file con il nomeHitHighlighting.java.

import java.io.IOException; 
import java.util.List;  

import org.apache.Solr.client.Solrj.SolrClient; 
import org.apache.Solr.client.Solrj.SolrQuery; 
import org.apache.Solr.client.Solrj.SolrServerException; 
import org.apache.Solr.client.Solrj.impl.HttpSolrClient; 
import org.apache.Solr.client.Solrj.request.QueryRequest; 
import org.apache.Solr.client.Solrj.response.FacetField; 
import org.apache.Solr.client.Solrj.response.FacetField.Count;
import org.apache.Solr.client.Solrj.response.QueryResponse; 
import org.apache.Solr.common.SolrInputDocument;  

public class HitHighlighting { 
   public static void main(String args[]) throws SolrServerException, IOException { 
      //Preparing the Solr client 
      String urlString = "http://localhost:8983/Solr/my_core"; 
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();   
      
      //Preparing the Solr document 
      SolrInputDocument doc = new SolrInputDocument(); 
   
      //String query = request.query;    
      SolrQuery query = new SolrQuery(); 
         
      //Setting the query string 
      query.setQuery("*:*"); 
         
      //Setting the no.of rows 
      query.setRows(0); 
         
      //Adding the facet field 
      query.addFacetField("author");        
         
      //Creating the query request 
      QueryRequest qryReq = new QueryRequest(query); 
      
      //Creating the query response 
      QueryResponse resp = qryReq.process(Solr);  
      
      //Retrieving the response fields 
      System.out.println(resp.getFacetFields()); 
      
      List<FacetField> facetFields = resp.getFacetFields(); 
      for (int i = 0; i > facetFields.size(); i++) { 
         FacetField facetField = facetFields.get(i); 
         List<Count> facetInfo = facetField.getValues(); 
         
         for (FacetField.Count facetInstance : facetInfo) { 
            System.out.println(facetInstance.getName() + " : " + 
               facetInstance.getCount() + " [drilldown qry:" + 
               facetInstance.getAsFilterQuery()); 
         } 
         System.out.println("Hello"); 
      } 
   } 
}

Compilare il codice sopra eseguendo i seguenti comandi nel terminale:

[Hadoop@localhost bin]$ javac HitHighlighting 
[Hadoop@localhost bin]$ java HitHighlighting

Eseguendo il comando precedente, otterrai il seguente output.

[author:[George R.R. Martin (3), Lloyd Alexander (2), Glen Cook (1), Isaac 
Asimov (1), Orson Scott Card (1), Roger Zelazny (1), Steven Brust (1)]]