众所周知,在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>
答案 0 :(得分:1)
此网址对我有用。有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中的单个字段以及计数字段,这可能非常方便!