1

solr コレクション全体の ID を取得する必要があるユース ケースがあります。そのために、solrj では、ストリーミング 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 に答える