我正在使用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();
答案 0 :(得分: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架构中启用“timestamp”字段,以便按上次修改日期查询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();