2017-01-04 4 views
0

Solr/SolrJ Version: 6.0.0So verwenden termVector in solrJ

I termvector Komponente in solrconfig.xml festgelegt haben, und die Request-Handler ist "/ tvrh" Ich teste es im Browser und das funktioniert. Jetzt möchte ich es in solrJ verwenden, aber es gibt nur das Dokument zurück. Das Folgende ist mein Code:

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)); 
     } 
    } 

Antwort

1

Ihre Frage ist, wie Sie einen nicht standardmäßigen Request-Handler in solr verwenden.

bewusst, dass der Begriff Vektor-Komponente zu einem „Nicht-Standard“ Request-Handler gehört und wird nicht von solrj unterstützt: https://cwiki.apache.org/confluence/display/solr/The+Term+Vector+Component#TheTermVectorComponent-SolrJandtheTermVectorComponent

Sie können auch anrufen „/ tvrh“ über solrj in einem allgemeinen Modus. Sie können dafür nicht die Methode SolrClient # query (SolrParams params) verwenden, da in diesem Fall der "request handler" nur als "qt" -Parameter gesendet wird und nicht Teil des URL-Pfades ist (und qt-Parameter ist) standardmäßig ignoriert).

Bitte versuchen Sie stattdessen die Methode "SolrClient # Anfrage".

+0

Ich scheint zu verstehen..Haben Sie irgendwelche Demo-Code, dies zu tun? – yomin

+0

Ich habe einen Weg gefunden, dies zu tun ... thks – yomin

0

Wie @Karsten R sagt, konnten wir SolrClient.query nicht verwenden, um eine Anfrage zu senden. Nachdem ich viel gesucht und viel experimentiert habe, könnte der folgende Code funktionieren.

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(); 
} 

TermVectorExtractor.java Referenz Sakai-Solr Github Code, die Funktion der Klasse ist resonse Objekt zu analysieren und Begriff Informationen zu erhalten. Ein bisschen anders als ursprünglicher Code. Der Unterschied wurde unten gezeigt.

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); 
    } 
}