Apache Solr - Facettes
La facette dans Apache Solr fait référence à la classification des résultats de la recherche en différentes catégories. Dans ce chapitre, nous discuterons des types de facettage disponibles dans Apache Solr -
Query faceting - Il renvoie le nombre de documents dans les résultats de recherche actuels qui correspondent également à la requête donnée.
Date faceting - Il renvoie le nombre de documents compris dans certaines plages de dates.
Les commandes de facettage sont ajoutées à toute demande de requête Solr normale et le nombre de facettes revient dans la même réponse de requête.
Exemple de requête de facettes
Utiliser le terrain faceting, nous pouvons récupérer les décomptes de tous les termes, ou uniquement les premiers termes dans un champ donné.
À titre d'exemple, considérons ce qui suit books.csv fichier contenant des données sur divers livres.
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
Posons ce fichier dans Apache Solr en utilisant le post outil.
[Hadoop@localhost bin]$ ./post -c Solr_sample sample.csv
Lors de l'exécution de la commande ci-dessus, tous les documents mentionnés dans le .csv Le fichier sera téléchargé dans Apache Solr.
Maintenant, exécutons une requête à facettes sur le terrain author avec 0 ligne sur la collection / core my_core.
Ouvrez l'interface utilisateur Web d'Apache Solr et sur le côté gauche de la page, cochez la case facet, comme illustré dans la capture d'écran suivante.
En cochant la case, vous aurez trois autres champs de texte afin de passer les paramètres de la recherche de facette. Maintenant, en tant que paramètres de la requête, transmettez les valeurs suivantes.
q = *:*, rows = 0, facet.field = author
Enfin, exécutez la requête en cliquant sur le bouton Execute Query bouton.
Lors de l'exécution, il produira le résultat suivant.
Il catégorise les documents de l'index en fonction de l'auteur et spécifie le nombre de livres fournis par chaque auteur.
Facettes à l'aide de l'API client Java
Voici le programme Java pour ajouter des documents à l'index Apache Solr. Enregistrez ce code dans un fichier avec le nomHitHighlighting.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");
}
}
}
Compilez le code ci-dessus en exécutant les commandes suivantes dans le terminal -
[Hadoop@localhost bin]$ javac HitHighlighting
[Hadoop@localhost bin]$ java HitHighlighting
En exécutant la commande ci-dessus, vous obtiendrez la sortie suivante.
[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)]]