Apache Solr-패싯

Apache Solr의 패싯은 검색 결과를 다양한 범주로 분류하는 것을 말합니다. 이 장에서는 Apache Solr에서 사용할 수있는 패싯 유형에 대해 설명합니다.

  • Query faceting − 주어진 질의와 일치하는 현재 검색 결과의 문서 수를 반환합니다.

  • Date faceting − 특정 날짜 범위에 속하는 문서 수를 반환합니다.

패싯 명령은 모든 일반 Solr 쿼리 요청에 추가되고 패싯 개수는 동일한 쿼리 응답에서 반환됩니다.

패싯 쿼리 예

필드 사용 faceting, 모든 용어에 대한 개수를 검색하거나 지정된 필드의 상위 용어 만 검색 할 수 있습니다.

예를 들어 다음을 고려해 보겠습니다. 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에 업로드됩니다.

이제 필드에서 패싯 쿼리를 실행하겠습니다. author 컬렉션 / 코어에 0 행 my_core.

Apache Solr의 웹 UI를 열고 페이지 왼쪽에서 확인란을 선택합니다. facet, 다음 스크린 샷에 표시된대로.

확인란을 선택하면 패싯 검색의 매개 변수를 전달하기 위해 세 개의 텍스트 필드가 더 있습니다. 이제 쿼리의 매개 변수로 다음 값을 전달합니다.

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

마지막으로 다음을 클릭하여 쿼리를 실행합니다. Execute Query 단추.

실행하면 다음과 같은 결과가 생성됩니다.

저자를 기준으로 색인의 문서를 분류하고 각 저자가 기고 한 도서 수를 지정합니다.

자바 클라이언트 API를 사용한 패싯

다음은 Apache Solr 색인에 문서를 추가하는 Java 프로그램입니다. 이 코드를 이름으로 파일에 저장하십시오.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

위의 명령을 실행하면 다음과 같은 출력이 표시됩니다.

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