Apache Solr - Sfaccettatura
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 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)]]