java-提交后从Apache Solr检索UUID

提问

我正在使用Solrj将新文档添加到Solr实例.在我的文档架构中,id是UUID(solr.UUIDField).每次创建文档时,该ID都会用唯一的ID填充,这正是我想要的.有时,在我的应用程序中有必要检索此唯一ID,以在插入另一个文档时将其添加为字段值.所以我的问题是,添加文档后如何从solr中检索生成的uuid?

提交后,Solrj将这个UpdateResponse对象返回给我,但是我不知道如何从中获取新的uuid.

我正在添加这样的文档

CommonsHttpSolrServer server = new CommonsHttpSolrServer(MY_SERVER_URL);

SolrInputDocument doc = new SolrInputDocument();
// [...] multiple addField calls
server.add(doc);
UpdateResponse ur = server.commit();

最佳答案

相信您永远不会从添加或提交中获得UUID.当您执行添加或提交操作时,更新请求处理程序将为您提供返回的查询时间和状态,但不会给您其他查询(假定成功).您实际上可以通过运行手动添加/提交来查看HTTP响应中的内容,如下所示:

http://localhost:8983/solr/update?stream.body=<add><doc><field name="id">test</field><field name="title">test title</field></doc></add>
http://localhost:8983/solr/update?stream.body=<commit/>

如果您在网络浏览器中运行这些查询,它们将分别提交测试文档并提交.然后,您将能够看到SolrJ可以使用哪些信息(不多).

您可以用Java编写自己的(修改的)更新处理程序,但这似乎需要大量工作.您还可以在Solr模式中启用“时间戳”字段,以便您可以按上次修改日期查询solr并找到刚提交的项目.

不过,这两种方法都是主要的技巧.最好的选择是在将文档提交给Solr之前找出文档的唯一ID,然后使用该唯一ID进行检索.使用生成的UUID更像是“一劳永逸”的方法.由于您不想忘记,因此需要生成自己的UUID.

由于您使用的是Java,因此使用如下代码将UUID处理起来非常简单:

CommonsHttpSolrServer server = new CommonsHttpSolrServer(MY_SERVER_URL);

SolrInputDocument doc = new SolrInputDocument();
UUID uuid = UUID.randomUUID();
doc.addField("id", uuid.toString());
// [...] multiple addField calls
server.add(doc);
UpdateResponse ur = server.commit();