如何在SOLR的文档批量更新处理中使用SOLRJ ConcurrentUpdateSolrClient?

qzlgjiam  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(312)

我正在尝试使用SOLRJ的ConcurrentUpdateSolrClient以批处理模式向Solr添加许多文档。我在Solr-In-Action中读到,使用此模式比HttpSolrClient方法产生更好的性能。但是除了下面的方法之外,我找不到任何示例用法。这是一个查询而不是更新。一个如何适合使用Javabin进行传输的示例将非常受欢迎。至于批处理过程,我猜从高层的Angular 看,它仍然和HttpSolrClient一样,通过调用许多client.add(doc),然后在某个时候调用client.commit()。但是似乎没有任何好的例子,尽管我已经读过很多次了,这是一个向Solr添加批量文档的好方法。

SolrClient client = new ConcurrentUpdateSolrClient.Builder("http://my-solr-server:8983/solr/core1").build();
   QueryResponse resp = client.query(new SolrQuery("*:*"));

谢谢你能提供的任何帮助。

u3r8eeie

u3r8eeie1#

我发现下面的代码可以工作,但仍然不确定这是不是全部。如果我有大量的文档要添加到Solr中,可能在后台ConcurrentUpdateSolrClient比HttpSolrClient运行得更高效。可能在设置客户端连接方面需要额外的参数,或者在添加文档之前需要其他客户端方法。

SolrClient client_concurrentupdate = new ConcurrentUpdateSolrClient.Builder("http://192.168.1.100:8983/solr/test").build();
      SolrInputDocument doc_concurrent = new SolrInputDocument();
      doc_concurrent.addField("id", "1");
      doc_concurrent.addField("name", "Test of concurrent add");
      client_concurrentupdate.add(doc_concurrent);
      client_concurrentupdate.commit();

从两种方法之间的测试来看,对于每种方法的1000个小文档的测试负载,并发方法所用的时间为429毫秒,而HTTP方法所用的时间为1493毫秒(在构建每个客户端之后测量,因此结果是创建文档、添加字段、添加文档和提交1000个文档的块)。
因此,除了调用Concurrent方法来代替HTTP方法之外,似乎没有太多的现成方法可做。但是,如果任何人有其他的答案或评论,我们仍然会很感激。

相关问题