提交后从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();

AFAIK您永远不会从添加或提交中获得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/>

如果您在web浏览器中运行这些查询,它们将分别提交测试文档并提交。然后,您将能够看到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();

最新更新