我可以使用一个Azure搜索索引器来索引具有相同密钥的多个实体吗?

时间:2019-08-28 13:45:07

标签: sql azure azure-cognitive-search multiple-entries

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

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

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

1 个答案:

答案 0 :(得分:0)

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

也许我的情况与您的情况相似,这会有所帮助,这是我的索引: enter image description here

这是我的cosmos db中的数据: enter image description here

如您所见,

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

enter image description here

如您所见,索引已导入,此问题已解决: enter image description here

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