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