1

我有一个用例,我需要获取整个 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 数据存储库抽象使我能够按页面、光标进行搜索,但我似乎找不到处理流用例的方法。

有解决方法吗?

4

1 回答 1

2

SolrTemplateSolrClient允许以回调方式访问底层证券。因此,您可以使用它来解决当前的限制。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;
  }
});
于 2015-11-13T10:56:07.693 回答