java - 使用 Java 更新 Solr 中的文档

标签 java solr solrj

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

我现在想做的是能够更新我的 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>

最佳答案

修改自 this测试示例。要向 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 中输入的命令来简单地“设置”现有值。

关于java - 使用 Java 更新 Solr 中的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5985860/

相关文章:

java - 如何获取搜索结果中出现的术语集?

java - Apache Solr 核心架构从 4.x 升级到 5.x(或更高版本)

java - 从包含一些字符串的文档 jsoup 中提取链接到其他字符串

java - 录制视频时启用相机闪光灯

Javascript 分面搜索客户端(框架)

java - 如何在 solr 中提交完全导入之前获取文档编号?

java - 为什么接口(interface)不能有 protected 方法

java - KStream mapValues 和 transformValues 之间的区别

apache - SOLR中倒排索引的数据结构到底长什么样