0

基本上我有两个数据源(cosmos db、azure sql)、一个索引和两个索引器。

两个索引器共享相同的主键,这使我可以将来自两个源的数据连接到一个索引中。现在的问题是 cosmos db 包含多个条目,这些条目具有在索引器中用作主键的相同键,然后默认情况下(我假设)只是扁平化具有相同键的所有条目,并且只索引找到的最新条目. 它运行没有错误,但显然缺少条目,因为只有找到的最后一个被索引。

到目前为止唯一的解决方案是我使用唯一键在另一个索引器中索引 cosmos db。我有点想避免有多个搜索查询,但似乎这是唯一的解决方案,除非有人有更好的主意。谢谢!

4

1 回答 1

0

不,您不能对多个文档使用相同的密钥,密钥是每个文档的唯一 ID,用于查找。如果您将多个具有相同键的文档添加到索引中,sys 将对具有该键的文档执行多个更新操作,以便您只能看到最后一条记录。

也许我的情况与您的情况相似,这会有所帮助,这是我的索引: 在此处输入图像描述

这是我的 cosmos db 中的数据: 在此处输入图像描述

如您所见, itemid 是我的索引的键,它在我的 cosmos db 中的值都相同,即 1 。在我的情况下,我在通过下面的 sql 查询创建数据源时使用该_rid值替换该值:itemid

SELECT u._rid as itemid, u.FirstName , u.LastName,u.Email , u._ts FROM user u  where u._ts >= @HighWaterMark ORDER BY u._ts

在此处输入图像描述

如您所见,索引已导入,此问题已解决: 在此处输入图像描述

通过这种方式,您可以将数据导入原始索引,而不会出现相同的关键问题。如果有任何误解或不清楚,请随时告诉我。

于 2019-08-29T05:07:45.900 回答