繁体   English   中英

使用 Java 更新 Solr 中的文档

[英]Updating a document in Solr with Java

众所周知,Solrj 在 wiki 中的文档非常糟糕。 我设法使用 CommonsHttpSolrServer 查询索引,但从未使用嵌入式版本。 无论如何,现在我正在使用 EdgeNGrams 来显示自动建议,并且我的索引中有一个字段“计数”,以便我可以按人们查询元素的次数对结果进行排序。

我现在想要做的是能够在我的 Java 程序中更新这个“计数”字段,我猜这应该很容易? 我查看了源代码中的测试文件,但它非常复杂,尝试做类似的事情对我来说总是失败。 也许通过使用 Solrj?

谢谢你的帮助。

编辑:在我的java代码中,我有:

CoreContainer.Initializer initializer = new CoreContainer.Initializer();
CoreContainer coreContainer = initializer.initialize();

我希望此时得到的是 coreContainer 中存在的 solr.xml 中定义的核心,但那里没有核心(但 defaultCoreName 表示 collection1)。 我的 solr.xml 文件与示例目录中的相同:

<solr persistent="false">
  <cores adminPath="/admin/cores" defaultCoreName="collection1">
    <core name="collection1" instanceDir="." />
  </cores>
</solr>

这个测试示例修改。 要向 Solr 添加一个值,然后对其进行修改,您可以执行以下操作:

//add value to Solr
doc = new SolrInputDocument();
doc.addField("id", "A");
doc.addField("value", 10);
client.add(doc);
client.commit();

//query Solr
SolrQuery q = new SolrQuery("id:A");
QueryResponse r = client.query(q);

//update value
SolrDocument oldDoc = r.getResults().get(0);
SolrInputDocument newDoc = new SolrInputDocument();
newDoc.addField("id", oldDoc.getFieldValue("id");
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("inc", 15);
newDoc.addField("value", map);
client.add(newDoc);
client.commit();

这会将原始 10 值增加到 25。您还可以“添加”到现有字段,或者通过更改将您放入 HashMap 中的内容的命令更改为“设置”现有值。

我最终只是将这个计数存储在 Solr 中,然后检索它并更新它,然后运行更新,因为不可能更新 Solr 中的单个字段以及计数字段,这可能非常方便!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM