Apache Solr - Faceting

Faceting trong Apache Solr đề cập đến việc phân loại kết quả tìm kiếm thành các danh mục khác nhau. Trong chương này, chúng ta sẽ thảo luận về các kiểu khía cạnh có sẵn trong Apache Solr -

  • Query faceting - Nó trả về số lượng tài liệu trong kết quả tìm kiếm hiện tại cũng khớp với truy vấn đã cho.

  • Date faceting - Nó trả về số lượng tài liệu nằm trong phạm vi ngày nhất định.

Các lệnh về khía cạnh được thêm vào bất kỳ yêu cầu truy vấn Solr thông thường nào và số lượng khía cạnh trở lại trong cùng một phản hồi truy vấn.

Ví dụ về truy vấn Faceting

Sử dụng trường faceting, chúng tôi có thể truy xuất số lượng cho tất cả các cụm từ hoặc chỉ các cụm từ hàng đầu trong bất kỳ trường nhất định nào.

Để làm ví dụ, chúng ta hãy xem xét những điều sau books.csv tệp chứa dữ liệu về các cuốn sách khác nhau.

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

Hãy để chúng tôi đăng tệp này lên Apache Solr bằng cách sử dụng post dụng cụ.

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

Khi thực hiện lệnh trên, tất cả các tài liệu được đề cập trong .csv tệp sẽ được tải lên Apache Solr.

Bây giờ, hãy để chúng tôi thực hiện một truy vấn nhiều khía cạnh trên trường author với 0 hàng trên bộ sưu tập / lõi my_core.

Mở giao diện người dùng web của Apache Solr và ở phía bên trái của trang, chọn hộp kiểm facet, như được hiển thị trong ảnh chụp màn hình sau đây.

Khi chọn hộp kiểm, bạn sẽ có thêm ba trường văn bản để chuyển các tham số của tìm kiếm theo khía cạnh. Bây giờ, dưới dạng các tham số của truy vấn, hãy chuyển các giá trị sau.

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

Cuối cùng, thực hiện truy vấn bằng cách nhấp vào Execute Query cái nút.

Khi thực thi, nó sẽ tạo ra kết quả sau.

Nó phân loại các tài liệu trong chỉ mục dựa trên tác giả và chỉ định số lượng sách đóng góp của mỗi tác giả.

Faceting Sử dụng Java Client API

Sau đây là chương trình Java để thêm tài liệu vào chỉ mục Apache Solr. Lưu mã này trong một tệp có tênHitHighlighting.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"); 
      } 
   } 
}

Biên dịch đoạn mã trên bằng cách thực hiện các lệnh sau trong terminal:

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

Khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau.

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