短篇小说: 我使用azure搜索服务,看起来它没有索引添加到我视图中的新行(数据源指向视图)。
长篇故事: 我有一个视图,从我的数据库中的许多表创建。我创建了一个指向此视图的数据源。视图有很多列,这里的相关内容是2:Id和ChangeIndicator。更改指示符(int)具有计算值,即对表中更改的某些值进行求和的结果,用于生成视图。 我定义了一个索引,maped到我的数据源和索引器。索引器正确填充索引(第一次),它会查看我视图中的所有行并正确索引数据(据我所检查)。
问题是当我在视图中添加新行时 - 这些行未编入索引。
我使用API调用创建数据源,索引和索引器。
数据源的创建方式如下:
{
"name": "cs5datasource",
"description": "Data source for cs search",
"type": "azuresql",
"credentials": { "connectionString" : "XXX - Connection string - XXX" },
"container": {"name": "UserDataAggregatedView"},
"dataChangeDetectionPolicy": {
"@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName" : "ChangeIndicator"
}
}
索引创建如下:
{
"name": "cs5indexer",
"description": "Indexer service",
"dataSourceName": "cs5datasource",
"targetIndexName": "cs5index",
"schedule": {"interval" : "PT5M", "startTime" : "2017-06-24T22:00:00Z"}
}
添加新行(未编制索引的行)后,如果删除索引器并再次创建它,则视图将正确编入索引。似乎问题是检测新行。添加的新行有效,索引过程不会生成错误。
我需要一种方法来将新添加的行编入索引,以及从索引中删除已删除行的方法。怎么做?
谢谢。
稍后编辑: 新添加的行未编入索引。 我添加的新行看起来像这样:
Id | name | lang | proffesion | changeIndicator
26 | test_011 | en | history teacher | 49536867
答案 0 :(得分:2)
视图中的changeIndicator
列可能不适合作为高水印列。对于每个新行或更新的行,高水位栏应单调增加;我们建议您使用rowversion
列进行更改跟踪。
如果您的表或视图包含一列,则可以使用此策略 符合以下标准:
- 所有插入都指定列的值。
- 项目的所有更新 还会更改列的值。
- 此列的值 每次插入或更新都会增加。
- 使用以下WHERE查询 和ORDER BY子句可以有效执行:
WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]
。
要捕获已删除的行,请阅读Capturing new, changed, and deleted rows中的Soft Delete Column Deletion Detection policy
部分。