有没有办法使用Solr的流API与spring数据solr?

时间:2015-11-11 19:00:17

标签: spring-data 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);

其中handler是一个实现StreamingResponseCallback的类,为了简洁起见,在我的代码中省略了。

现在,Spring数据存储库抽象使我能够通过页面,游标进行搜索,但我似乎无法找到处理流用例的方法。

有解决方法吗?

1 个答案:

答案 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;
  }
});