Azure搜索 - 数据库表是200万条记录,但Azure搜索索引是900万

时间:2017-05-30 16:37:15

标签: azure azure-search

我们的SQL Server数据库表包含大约200万条记录。我们从中导入的Azure搜索索引现在最多可达950万个文档。我们的索引器每24小时运行一次。我们在数据库中将更改跟踪设置为开启。我们需要知道如何正确配置索引器,以便每24小时只导入一次新记录。

我想知道问题是否与我们的数据库如何写入其记录有关:每24小时从网络收集所有200万条记录并写入临时表。然后,存储过程将登台表中的数据与主数据表进行比较。如果在登台表和主表之间匹配某个源ID的记录,则登台表记录将替换主表中的那些记录,甚至是相同的记录。主表中的记录具有staging表中不存在的源ID的保留是独立的。因此,即使写入主数据表的大多数记录只是替换现有的相同数据,Azure搜索索引器必须将这些记录视为新记录吗?

在任何给定时间,如果我们的数据库只有200万条记录,那么Azure搜索索引应该只有200万个文档。但它继续添加文档,似乎基于上述内容,这是我们需要知道如何解决的问题。

编辑:我注意到“软删除政策”的选项。这是否会对我们有所帮助,因为它还会删除索引中与已被替换的数据库中的记录相对应的文档?

编辑#2:我在这里上传了一个Excel电子表格,其中列出了我试图解释的流程,以防它可视化:https://dl.dropboxusercontent.com/u/8477791/v4AzureSearchIndexFlow.xlsx

1 个答案:

答案 0 :(得分:0)

新文档继续累积的事实与更改检测或删除检测无关。问题是您的源行在更改时会获得新ID。

Azure搜索仅根据索引关键字段的值来确定文档标识。更改跟踪是关于从数据源读取的内容;它与索引数据的方式无关。唯一的因素是每个文档的ID。具有匹配ID的文档将被更新,而索引中不包含的ID将导致新文档被上传。

一种可能的解决方法是使用SQL表的不同列作为文档密钥,但这只适用于

  1. 存在一个跨行实际上唯一的列,
  2. 当行中的数据发生更改时,列的值不会更改。