Apache Solr - Facetamento

Facetar no Apache Solr refere-se à classificação dos resultados da pesquisa em várias categorias. Neste capítulo, discutiremos os tipos de facetamento disponíveis no Apache Solr -

  • Query faceting - Retorna o número de documentos nos resultados da pesquisa atual que também correspondem à consulta fornecida.

  • Date faceting - Ele retorna o número de documentos que se enquadram em determinados intervalos de datas.

Comandos de facetação são adicionados a qualquer solicitação de consulta Solr normal e as contagens de facetação voltam na mesma resposta de consulta.

Exemplo de consulta de facetação

Usando o campo faceting, podemos recuperar as contagens de todos os termos ou apenas os termos principais em qualquer campo.

Como exemplo, vamos considerar o seguinte books.csv arquivo que contém dados sobre vários livros.

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

Vamos postar este arquivo no Apache Solr usando o post ferramenta.

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

Ao executar o comando acima, todos os documentos mencionados no dado .csv arquivo será carregado no Apache Solr.

Agora vamos executar uma consulta facetada no campo author com 0 linhas na coleção / núcleo my_core.

Abra a IU da web do Apache Solr e, no lado esquerdo da página, marque a caixa de seleção facet, conforme mostrado na imagem a seguir.

Ao marcar a caixa de seleção, você terá mais três campos de texto para passar os parâmetros da pesquisa de faceta. Agora, como parâmetros da consulta, passe os seguintes valores.

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

Finalmente, execute a consulta clicando no Execute Query botão.

Ao executar, ele produzirá o seguinte resultado.

Ele categoriza os documentos no índice com base no autor e especifica o número de livros contribuídos por cada autor.

Facetamento usando a API do cliente Java

A seguir está o programa Java para adicionar documentos ao índice do Apache Solr. Salve este código em um arquivo com o 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"); 
      } 
   } 
}

Compile o código acima executando os seguintes comandos no terminal -

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

Ao executar o comando acima, você obterá a seguinte saída.

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