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)]]