3

众所周知,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>
4

2 回答 2

2

从此测试示例修改。要将值添加到 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 中放置的命令来简单地“设置”现有值。

于 2015-10-05T21:34:17.600 回答
0

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

于 2011-10-27T06:25:53.967 回答