Nest 5.6-如何插入具有现有ID的文档?

时间:2019-03-26 15:59:53

标签: c# elasticsearch nest

我有以下代码:

IIndexResponse response = elclient.Index(appointmentHistoryRecord, i => i.Index(OperaIndexName)
                                                                         .Type(appointmentHistoryRecord.GetType())
                                                                         .Id(appointmentHistoryRecord.AppointmentId.ToString())
                                                                         .Refresh(Refresh.False));

上面的代码工作得很好,但是它并没有表现出我想要的表现。我要完成的工作是插入一个索引中已经存在的ID的文档。新文档具有相同的ID,但正文不同。

我编写的代码将采用现有文档并使用新的正文对其进行更新,这是我试图避免的事情。我希望索引中有一个新记录,尽管该文档中索引中的ID匹配。

我将尽一切帮助我实现这一目标。

2 个答案:

答案 0 :(得分:1)

您不能拥有2个具有相同ID的文档,以确保明显的存在理由。 id是密钥。

您可以upsert:如果不存在则创建一个文档,如果存在则进行更新。 更新:更新现有文档 部分更新:更新现有文档的一部分。

您当然可以创建带有my_field_id字段(不是文档ID)的文档,并插入具有相同my_field_id值的0-X文档。

我不太了解为什么您要重复文档,或者解释您的上下文,我们将尝试找到一个好的模型或解决方案。

根据第二个答案进行编辑

好吧,所以不要在文档中添加一个field(我认为是您的entityid),而不要使用elasticsearch id(= key field),而无需设置id字段即可插入文档(让我们为您生成一个id)。然后,使用entityid字段检索与您的实体相关的所有文档(希望我很清楚:)),如果需要帮助,请共享您的映射,我会进行更新。

很高兴能为您提供帮助;)

答案 1 :(得分:0)

与其在文档中添加一个字段(我认为是您的实体ID),而不是使用elasticsearch id(=键字段),而无需设置id字段即可插入文档(让ES为您生成一个id)。然后,使用entityid字段检索与您的实体相关的所有文档。