有没有办法将 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;
  }
});