有没有办法将 Solr 的流 API 与 spring 数据 solr 一起使用?
Is there a way to use Solr's streaming API with spring data solr?
我有一个用例,我需要获取整个 solr 集合的 ID。为此,对于 solrj,我使用 Streaming API 像这样:
CloudSolrServer server = new CloudSolrServer("zkHost1:2181,zkHost2:2181,zkHost3:2181");
SolrQuery query = new SolrQuery("*:*");
server.queryAndStreamResponse(tmpQuery, handler);
其中处理程序是实现 StreamingResponseCallback 的 class,为简洁起见在我的代码中省略了。
现在,Spring 数据存储库抽象让我能够按页、按游标进行搜索,但我似乎找不到处理流式用例的方法。
有解决办法吗?
SolrTemplate
允许以回调方式访问基础 SolrClient
。所以您可以使用它来解决当前的限制。
使用 SolrTemplate
可用的 MappingSolrConverter
的结果转换目前被破坏了(我需要检查原因)——但你知道如何去做。
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;
}
});
我有一个用例,我需要获取整个 solr 集合的 ID。为此,对于 solrj,我使用 Streaming API 像这样:
CloudSolrServer server = new CloudSolrServer("zkHost1:2181,zkHost2:2181,zkHost3:2181");
SolrQuery query = new SolrQuery("*:*");
server.queryAndStreamResponse(tmpQuery, handler);
其中处理程序是实现 StreamingResponseCallback 的 class,为简洁起见在我的代码中省略了。
现在,Spring 数据存储库抽象让我能够按页、按游标进行搜索,但我似乎找不到处理流式用例的方法。
有解决办法吗?
SolrTemplate
允许以回调方式访问基础 SolrClient
。所以您可以使用它来解决当前的限制。
使用 SolrTemplate
可用的 MappingSolrConverter
的结果转换目前被破坏了(我需要检查原因)——但你知道如何去做。
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;
}
});