2017-01-04 6 views
0

Solrの/ SolrJバージョンは:6.0.0solrJでtermVectorを使用する方法

私はsolrconfig.xmlでtermvectorコンポーネントを設定した、と要求ハンドラは、 "/ tvrh" ですが、私は、ブラウザでそれをテストこれが機能します。今私はsolrJで使いたいですが、ドキュメントを返すだけです。以下は私のコードです:

SolrClient solrClient = new HttpSolrClient("http://localhost:8983/solr/test"); 
    SolrQuery solrQuery = new SolrQuery(); 
    solrQuery.setQuery(String.format("id:%s","clueweb12-0000tw-06-17744")); 
    solrQuery.setRequestHandler("/tvrh"); 
    solrQuery.set("tv", true); 
    solrQuery.set("tv.all", true); 

    QueryResponse response = solrClient.query(solrQuery); 
    SolrDocumentList docs = response.getResults(); 

    for (SolrDocument doc: docs){ 
     for (String key: doc.keySet()){ 
      System.out.println(key); 
      System.out.println(doc.getFieldValue(key)); 
     } 
    } 

答えて

1

あなたの質問はsolrで非標準の要求ハンドラを使用する方法です。

は、タームベクトルコンポーネントは「非標準」要求ハンドラに属し、solrjからサポートされていないことに注意してください: https://cwiki.apache.org/confluence/display/solr/The+Term+Vector+Component#TheTermVectorComponent-SolrJandtheTermVectorComponent

あなたは、一般的なモードでsolrjを経由して「/ tvrh」を呼び出すことができます。この場合SolrClientメソッド#(SolrParams params)を使用することはできません。この場合、「要求ハンドラ」は「qt」-Parameterとして送信され、url-pathの一部にはなりません(qt-Parameter is無視されます)。

したがって、代わりに "SolrClient#request"メソッドを試してください。

+0

私は理解しているようです。これを行うためのデモコードがありますか? – yomin

+0

私はこれを行う方法を見つけました... – yomin

0

@ Karsten Rは言うとおり、SolrClient.queryを使用してリクエストを送信することはできませんでした。たくさんの検索をして多くの実験を行ったところ、次のコードが動作する可能性があります。

SolrClient solrClient = new HttpSolrClient("http://localhost:8983/solr/trecB13"); 
SolrQuery solrQuery = new SolrQuery(); 
solrQuery.setQuery(String.format("id:%s","clueweb12-0000tw-06-17744")); 
solrQuery.setRequestHandler("/tvrh"); 
solrQuery.set("tv", true); 
solrQuery.set("tv.all", true); 

try { 
    NamedList<Object> response = solrClient.request(new QueryRequest(solrQuery)); 
    TermVectorExtractor extractor = new TermVectorExtractor(response); 
    System.out.println(extractor.getTermVectorInfo()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
} 

Sakai-Solr Githubコードを参照TermVectorExtractor.java、クラスの機能はresonseオブジェクトを解析し、長期的な情報を得ることです。元のコードとは少し異なります。異なるものが以下に示されている。

import org.apache.solr.common.util.NamedList; 

import java.util.*; 

public class TermVectorExtractor { 
    private static final String TERM_VECTORS = "termVectors"; 

    private Map<String, Map<String, Map<String, TermInfo>>> termVectorInfo = Collections.emptyMap(); 

    /** 
    * Creates a TermVectorExtractor for the given query response sent by Solr. 
    * 
    * @param queryResponse response sent by the solr server for a search query. 
    */ 
    @SuppressWarnings("unchecked") 
    public TermVectorExtractor(NamedList<Object> queryResponse) { 
     NamedList<Object> res = (NamedList<Object>) queryResponse.get(TERM_VECTORS); 
     if (res != null) 
      termVectorInfo = extractTermVectorInfo(res); 
    } 
}