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