3

我正在使用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();
4

1 回答 1

4

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();
于 2011-06-01T17:25:41.993 回答