使用Java在Solr中更新文档

时间:2011-05-12 23:52:21

标签: java solr document solrj

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

我现在要做的是能够在我的Java程序中更新这个“count”字段,我猜这应该很容易吗?我从源代码中查看了测试文件,但它非常复杂,尝试做类似的事总是失败了。也许通过使用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>

3 个答案:

答案 0 :(得分:1)

此网址对我有用。有SOLRJ测试的例子,你可以在那里找到很多很好的例子。

https://svn.apache.org/repos/asf/lucene/solr/tags/release-1.3.0/client/java/solrj/test/org/apache/solr/client/solrj/

这不是文档,但您应该使用SOLRJ找到几乎所有可能的文档。

答案 1 :(得分:1)

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.您还可以添加&#34;添加&#34;到现有的领域或简单地&#34;设置&#34;通过更改放置在HashMap中的内容的命令来获取现有值。

答案 2 :(得分:0)

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