2011-05-12 40 views
2

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

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

感谢您的帮助。

编辑: 在我的Java代码,我有:

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

我希望得到在这一点上,是核心定义存在于coreContainer solr.xml,但没有核心有(但defaultCoreName说collection1)。我的solr.xml文件与示例dir中的文件相同:

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

你试过了什么?它是如何失败的? –

+0

好吧,我尝试使用XmlUpdateRequestHandler,就像他们在测试中做的一样,但是在某些时候我需要使用SolrQueryRequestBase,它需要在获得SolrCore之前?但为了获得核心,也许我没有得到如何去做,因为在获得CoreContainer之后,它告诉我它没有核心,但是我确定我在solr.xml中有一个核心。 – Guillaume

+0

我无法运行或调试您的上述评论:)你可以发布实际的代码和实际的异常? –

回答

1

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

+0

嘿,你可以回答这个问题关于SOLR更新https://stackoverflow.com/questions/45753129/how-to-update-data-in-solr – ashworx

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.您也可以“添加”到现有的字段或简单的“设置”现有值通过改变你把什么命令放在HashMap中。