2015-09-11 64 views
0

即时尝试索引更新我的elasticsearch索引内的文件。如何使用NEST更新ElasticSearch索引内的现有文档?

作业在白天定期运行,标识自上次作业运行以来已更新的数据库记录。我希望能够更新索引中的这些特定记录。记录中的任何字段可能已更改。

所以我填充一个数据集,然后通过记录循环来填充我的类的一个实例与数据库中的所有属性。

每次我想更新相应的记录在索引或添加,如果当前犯规存在,

...

我的循环IM中尝试一些像这样的代码来执行更新...

client.Update<MyContentClass>(u => u 
       .Id("AU-7zORce3_kxnyDoVLv") 
       .Index("qubecontent") 
       //.Doc(new MyContentClass { ESUniqueKey = MyContentClassInstance.ESUniqueKey }) 
       .DocAsUpsert() 
       .Refresh() 
       ); 

即时通讯不知道标识符是什么引用?这是elasticsearch为每个索引记录自动生成的id吗?我在课堂中生成了一个额外的唯一ID,但不知道我如何引用它?

任何人都可以告诉我如何执行此更新记录的索引更新?

回答

0

upsert中的ID字段确实引用了内部ElasticSearch ID(将其视为ES的主键)。如果您已经有了自己的唯一主键,那么您也可以将其用作ES中的主键。把这些例子:

例1:让ES生成它自己的ID

POST test/type1 
{ 
    "f1": "record 1", 
    "f2": "2000-01-01" 
} 

结果1:

{ 
    "_index": "test", 
    "_type": "type1", 
    "_id": "AU--Dz-Kl6g2APRJ9y7l", 
    "_version": 1, 
    "created": true 
} 

你可以看到,ES产生的“AU它自己的主键 - DZ -Kl6g2APRJ9y7l”

例2:Epecify自己的ID

POST test/type1/thisIsMyID 
{ 
    "f1": "record 1", 
    "f2": "2000-01-01" 
} 

结果2:

{ 
    "_index": "test", 
    "_type": "type1", 
    "_id": "thisIsMyID", 
    "_version": 1, 
    "created": true 
} 

通知如何实施例2中使用它,我所指定的ID。一旦你使用与ES相同的主键,那么你可以运行你的upsert语句。

注意:如果您正在重新生成整个文档,并且您真正想要执行的操作是覆盖旧版vs旧版。然后,您可以再次使用相同的ID进行POST,它会用新记录覆盖旧记录。覆盖将是方式比插入更快。

相关问题