【问题标题】:Can I use one Azure Search Indexer to index multiple entities with the same Key?我可以使用一个 Azure 搜索索引器来索引具有相同键的多个实体吗?
【发布时间】:2020-01-01 18:31:06
【问题描述】:

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

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

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

【问题讨论】:

  • “多个条目”是指具有相同键的多个 Cosmos DB 文档,还是具有值数组的单个 Cosmos DB 文档?
  • 多个文档具有相同的键,我在索引中用作主键。谢谢! :)
  • 关键是代表每个文档的“身份”,还是只是您要搜索的内容?您目前如何查询索引?
  • 身份的代表。现在我只是在 azure 中使用搜索浏览器并测试哪个计划就足够了。
  • “相同”文档的多个版本的用例是什么?是不是类似历史数据?

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


【解决方案1】:

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

也许我的情况与你的情况相似,这会有所帮助,这是我的索引:

这是我的 cosmos db 中的数据:

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

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

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

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

【讨论】:

  • 问题在于我会丢失实际的 itemid 值,因为我需要它进行过滤。另一个问题是我无法在另一个索引器中使用 itemid 作为主键,因为该 itemid 值与另一个表中的 itemid 值不匹配。
  • 这只是为了提供一个思路来解决这个问题,使用 cosmos DB 数据源查询将文档导入索引:)
猜你喜欢
  • 1970-01-01
  • 2016-08-06
  • 2019-06-19
  • 2011-07-12
  • 2020-09-23
  • 2015-06-10
  • 1970-01-01
  • 2012-08-05
  • 2011-12-20
相关资源
最近更新 更多