我有一个用例,我需要获取整个solr集合的id。为此,使用solrj,我使用Streaming API,如下所示:
CloudSolrServer server = new CloudSolrServer("zkHost1:2181,zkHost2:2181,zkHost3:2181");
SolrQuery query = new SolrQuery("*:*");
server.queryAndStreamResponse(tmpQuery, handler);
其中handler是一个实现StreamingResponseCallback的类,为了简洁起见,在我的代码中省略了。
现在,Spring数据存储库抽象使我能够通过页面,游标进行搜索,但我似乎无法找到处理流用例的方法。
有解决方法吗?
答案 0 :(得分:2)
SolrTemplate
允许以回调样式访问基础SolrClient
。所以你可以使用那个来解决当前的限制。
目前已使用MappingSolrConverter
提供的SolrTemplate
结果转换(我需要检查原因) - 但您可以了解如何执行此操作。
solrTemplate.execute(new SolrCallback<Void>() {
@Override
public Void doInSolr(SolrClient solrClient) throws SolrServerException, IOException {
SolrQuery sq = new SolrQuery("*:*");
solrClient.queryAndStreamResponse("collection1", sq, new StreamingResponseCallback() {
@Override
public void streamSolrDocument(SolrDocument doc) {
// the bean conversion fails atm
// ExampleSolrBean bean = solrTemplate.getConverter().read(ExampleSolrBean.class, doc);
System.out.println(doc);
}
@Override
public void streamDocListInfo(long numFound, long start, Float maxScore) {
// do something useful
}
});
return null;
}
});