elasticsearch,document,nest,Indexing,elasticsearch,Document,Nest" /> elasticsearch,document,nest,Indexing,elasticsearch,Document,Nest" />

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

Indexing 如何使用NEST更新ElasticSearch索引中的现有文档?,indexing,elasticsearch,document,nest,Indexing,elasticsearch,Document,Nest,我正在尝试对elasticsearch索引中的文档进行索引更新 作业在一天中定期运行,用于标识自上次运行作业以来已更新的数据库记录。我希望能够更新索引中的这些特定记录。记录中的任何字段都可能已更改 因此,我填充了一个数据集,然后循环遍历记录,用数据库中的所有属性填充我的类的一个实例 每次我想更新索引中的相应记录,或者如果它当前不存在,就添加它 在我的循环中,我正在尝试一些类似这样的代码来进行更新 client.Update<MyContentClass>(u => u

我正在尝试对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再次发布,它将用新记录覆盖旧记录。覆盖要比升级快得多