Учебники

Apache Solr — огранка

Гранение в Apache Solr относится к классификации результатов поиска по различным категориям. В этой главе мы обсудим типы огранки, доступные в Apache Solr:

  • Фасет запроса — возвращает количество документов в текущих результатах поиска, которые также соответствуют заданному запросу.

  • Оформление даты — возвращает количество документов, попадающих в определенные диапазоны дат.

Фасет запроса — возвращает количество документов в текущих результатах поиска, которые также соответствуют заданному запросу.

Оформление даты — возвращает количество документов, попадающих в определенные диапазоны дат.

Команды гранения добавляются в любой обычный запрос запроса Solr, и счет граней возвращается в том же ответе на запрос.

Пример Faceting Query

Используя огранку поля, мы можем получить счетчики для всех терминов или только верхние термины в любом заданном поле.

В качестве примера рассмотрим следующий файл books.csv , содержащий данные о различных книгах.

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

Давайте разместим этот файл в Apache Solr, используя инструмент post .

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

При выполнении вышеупомянутой команды все документы, упомянутые в данном файле .csv, будут загружены в Apache Solr.

Теперь давайте выполним граненый запрос к автору поля с 0 строками в коллекции / ядре my_core .

Откройте веб-интерфейс Apache Solr и в левой части страницы установите флажок флажка, как показано на следующем снимке экрана.

флажок

При установке флажка у вас будет еще три текстовых поля для передачи параметров поиска фасета. Теперь в качестве параметров запроса передайте следующие значения.

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

Наконец, выполните запрос, нажав кнопку « Выполнить запрос» .

Query Pass

При выполнении он даст следующий результат.

Автор Результат

Он классифицирует документы в индексе на основе автора и указывает количество книг, внесенных каждым автором.

Фасетирование с использованием Java Client API

Ниже приведена Java-программа для добавления документов в индекс Apache Solr. Сохраните этот код в файле с именем HitHighlighting.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"); 
      } 
   } 
}

Скомпилируйте приведенный выше код, выполнив следующие команды в терминале:

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

Выполнив вышеуказанную команду, вы получите следующий вывод.