Solr / SolrJ版本:6.0.0
我在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));
}
}
答案 0 :(得分:1)
您的问题是如何在solr中使用非标准请求处理程序。
请注意,术语向量组件属于非标准"请求处理程序,并且不受solrj支持: https://cwiki.apache.org/confluence/display/solr/The+Term+Vector+Component#TheTermVectorComponent-SolrJandtheTermVectorComponent
你可以打电话给" / tvrh"通过solrj在通用模式下。你不能使用方法SolrClient#query(SolrParams params),因为在这种情况下,"请求处理程序"仅作为" qt" -Parameter发送,并且不会成为url-path的一部分(默认情况下会忽略qt-Parameter)。
所以请尝试方法" SolrClient#request"代替。
答案 1 :(得分: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();
}
TermVectorExtractor.java引用Sakai-Solr Github代码,该类的功能是解析共振对象并获取术语信息。与原始代码略有不同。不同之处如下所示。
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);
}
}