繁体   English   中英

如何使用NEST更新ElasticSearch索引内的现有文档?

[英]How to update an existing document inside an ElasticSearch index using NEST?

我正在尝试对我的Elasticsearch索引中的文档进行索引更新。

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

所以我填充数据集,然后遍历记录以使用数据库中的所有属性填充类的实例。

每次我想更新索引中的相应记录或如果它当前不存在添加它...

在我的循环中,我正在尝试像这样的代码来进行更新...

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

我不确定ID是指什么? 这是Elasticsearch为每个索引记录自动生成的ID吗? 我的确在班级内生成了一个额外的唯一ID,但不确定如何引用它?

谁能建议我如何对更改的记录执行此索引更新?

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:确认您自己的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语句。

注意:如果您要重新生成整个文档,而您真正想要做的就是覆盖旧文档,然后覆盖旧文档。 然后,您可以再次使用相同的ID进行POST,它将用新记录覆盖旧记录。 覆写便一路比upserting更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM