ApacheSolr-ファセット

Apache Solrのファセットとは、検索結果をさまざまなカテゴリに分類することです。この章では、ApacheSolrで使用できるファセットのタイプについて説明します。

  • 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

このファイルをApacheSolrに投稿しましょう。 post ツール。

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

上記のコマンドを実行すると、指定されたすべてのドキュメント .csv ファイルはApacheSolrにアップロードされます。

次に、フィールドでファセットクエリを実行しましょう author コレクション/コアに0行あり my_core

ApacheSolrのWebUIを開き、ページの左側にあるチェックボックスをオンにします facet、次のスクリーンショットに示すように。

チェックボックスをオンにすると、ファセット検索のパラメータを渡すために、さらに3つのテキストフィールドが表示されます。ここで、クエリのパラメータとして、次の値を渡します。

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

最後に、をクリックしてクエリを実行します Execute Query ボタン。

実行すると、次のような結果になります。

著者に基づいてインデックス内のドキュメントを分類し、各著者が寄稿した本の数を指定します。

JavaクライアントAPIを使用したファセット

以下は、ApacheSolrインデックスにドキュメントを追加する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)]]