【发布时间】:2017-06-01 02:45:18
【问题描述】:
我们的 SQL Server 数据库表包含大约 200 万条记录。我们拥有的从中导入的 Azure 搜索索引现在多达 950 万个文档。我们的索引器设置为每 24 小时运行一次。我们已在我们的数据库中开启更改跟踪。我们需要知道如何正确配置索引器,使其仅每 24 小时导入一次新记录。
我想知道问题是否出在我们的数据库如何写入记录:每 24 小时从网络收集所有 200 万条记录并写入临时表。然后存储过程将临时表中的数据与主数据表进行比较。如果某个 Source ID 的记录在 staging table 和 master table 之间匹配,则 staging table 记录将替换 master table 中的那些记录,甚至是相同的记录。 master table 中的记录暂存表中不存在的源 ID 将被单独保留。因此,即使写入主数据表的大多数记录只是替换现有的相同数据,Azure 搜索索引器是否必须将这些记录视为新记录?
在任何给定时间,如果我们的数据库只有 200 万条记录,那么 Azure 搜索索引应该只有 200 万条文档。但是它继续添加文档,似乎基于上述内容,这是我们需要知道如何解决的问题。
编辑:我注意到“软删除策略”的选项。这对我们有帮助吗,因为它还会删除索引中与数据库中已被替换的记录相对应的文档?
编辑 #2:我已在此处上传了一个 Excel 电子表格,它描绘了我试图解释的流程,以防它有助于可视化它:https://dl.dropboxusercontent.com/u/8477791/v4AzureSearchIndexFlow.xlsx
【问题讨论】:
-
在 Azure 搜索的索引定义中,您是否将 SQL 数据库中的唯一 ID 字段标记为键?假设 ID 保持不变,这应该使 Azure 搜索只更新文档而不是插入新文档。 “软删除”选项更多的是关于您何时实际删除记录。
-
是的,key 是一个具有唯一 id 的字段。问题是这些替换记录为这些记录创建了一个新的唯一 ID(即使所有其他数据与被替换的数据相同),因此 Azure 搜索索引将这些记录视为新记录。但我的理解是,通过为数据库打开更改跟踪并指示水印列,索引器应该能够确定哪些是新的,哪些不是。
-
感谢您的澄清。您需要告诉 Azure 搜索使用数据库更改跟踪,您这样做了吗?见docs.microsoft.com/en-us/azure/search/…。当然,这只适用于任何新内容,因此您必须重新索引所有内容。
-
弗兰斯,感谢您迄今为止的帖子。我已经在 Azure 门户中的数据源下选中了“跟踪更改”复选框。这与发布链接中显示的 dataChangeDetectionPolicy 不一样吗?
-
我怀疑您可能需要删除索引并重新创建它...
标签: azure azure-cognitive-search