Apache Solr - Facetas

La creación de facetas en Apache Solr se refiere a la clasificación de los resultados de búsqueda en varias categorías. En este capítulo, discutiremos los tipos de facetas disponibles en Apache Solr:

  • Query faceting - Devuelve el número de documentos en los resultados de búsqueda actuales que también coinciden con la consulta dada.

  • Date faceting - Devuelve la cantidad de documentos que se encuentran dentro de ciertos rangos de fechas.

Los comandos de facetado se agregan a cualquier solicitud de consulta de Solr normal y los recuentos de facetado vuelven en la misma respuesta de consulta.

Ejemplo de consulta de facetas

Usando el campo faceting, podemos recuperar los recuentos de todos los términos, o solo los términos superiores en cualquier campo dado.

Como ejemplo, consideremos lo siguiente books.csv archivo que contiene datos sobre varios libros.

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

Publiquemos este archivo en Apache Solr usando el post herramienta.

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

Al ejecutar el comando anterior, todos los documentos mencionados en el .csv El archivo se cargará en Apache Solr.

Ahora ejecutemos una consulta facetada en el campo. author con 0 filas en la colección / núcleo my_core.

Abra la interfaz de usuario web de Apache Solr y, en el lado izquierdo de la página, marque la casilla de verificación facet, como se muestra en la siguiente captura de pantalla.

Al marcar la casilla de verificación, tendrá tres campos de texto más para pasar los parámetros de la búsqueda de facetas. Ahora, como parámetros de la consulta, pase los siguientes valores.

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

Finalmente, ejecute la consulta haciendo clic en el Execute Query botón.

Al ejecutar, producirá el siguiente resultado.

Clasifica los documentos del índice según el autor y especifica el número de libros aportados por cada autor.

Creación de facetas mediante la API de cliente Java

A continuación se muestra el programa Java para agregar documentos al índice Apache Solr. Guarde este código en un archivo con el nombreHitHighlighting.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"); 
      } 
   } 
}

Compile el código anterior ejecutando los siguientes comandos en la terminal:

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

Al ejecutar el comando anterior, obtendrá el siguiente resultado.

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