2013-10-12 52 views
0

我是solr的新手。有人可以解决以下问题。 1.目前我有一个1.5米的记录指数。我需要将字段的值更新为新值。我该怎么做。它会重新编制索引吗?示例代码将会很有帮助。添加和更新Solr和lucene字段

  1. 我有另一个需要在哪里添加索引字段但不想重新索引整个内容。我有文件ID与我。对于这个需求我可以使用lucene如果有帮助。

回答

0

目前我有一个1.5磨记录索引。我需要将字段的值更新为新值。我该怎么做。它会重新编制索引吗?示例代码将会很有帮助。

好吧,好消息是最新版本的Solr(以4.3或4.4开头,我认为)允许你做他们称之为Atomic Updates的东西。在这里看到:

http://wiki.apache.org/solr/Atomic_Updates

从视图编码来看,它好像你只更新所需的字段。使用Java SolrJ API,它是这样的:

假设您有一个带有多值字段的文档,名为“stuffedAnimals”。该字段已包含“泰迪熊”和“毛绒乌龟”作为值。你想更新它并添加一个新的值,如“粉红色的蓬松火烈鸟”。你可以做的是:

SolrInputDocument updateDocument = new SolrInputDocument(); 
//here you must add the id field with the desired value, corresponding to the doc you want to update: 
updateDocument.addField("id", 2312312); 
//tell it to add the new value to the existing ones, rather then replace them with it: 
updateDocument.addField("stuffedAnimals", new HashMap(){{put("add","pink fluffy flamingo");}}); 

问题的,这是表现:到底发生了什么,当你做到这一点的是,文件被删除,完全重新添加(不只是场)。如果您计划进行大量此类操作,则需要考虑这一点。

我还有一个需要添加索引字段但不想重新索引整个内容的地方。我有文件ID与我。对于这个需求我可以使用lucene如果有帮助。

那么,正如我上面所说的:当你更新一个字段时,文档实际上是完全重写的,所以这意味着它也被重新编入了新字段。如果您使用的是Solr 4.4或更早版本,则需要在schema.xml文件中声明新字段。如果您使用的是Solr 4.5或更新版本,则不必再担心schema.xml。

最后,作为这两个问题的注释:如果你想更新一个Solr文档,确保它的所有字段都被标记为“存储”(stored-true在schema.xml中)。由于字段上的部分更新转换为Solr删除和重新添加文档(应用了更新),如果某些字段未存储,Solr将不知道在更新后应该放入什么值。

0

看看atomic update功能新增4.0。 它允许您更改特定字段的值,而无需重新索引整个文档。 请记住,您的架构中的所有字段都必须存储(不带copyFields)。如果您需要进一步的帮助,请写更详细的说明。