azure - Azure 搜索架构迁移
问题描述
在发布管道中迁移 Azure 搜索架构的最佳方式是什么?
在 SQL 世界中,我会使用 DbUp 之类的东西。Azure 搜索有什么类似的吗?或者当架构需要更改时是否有不同的方法?
解决方案
这取决于您是通过 SDK 推送内容,还是使用预建索引器之一从受支持的内容源中提取内容。使用 SDK,您可以向模型添加新属性,如本文所述:更新 Azure 搜索文档架构
注意:数据模型的更改可能需要更新或重建索引。例如,添加新属性只需要和更新。但是,如果您更改可搜索、可过滤或可排序等设置,您将需要重新构建。有关详细信息,请参阅如何在 Azure 认知搜索中重建索引
通过推送进行兼容性探测
我首选的解决方案是对所有内容使用推送索引。为了测试索引中的数据模型是否兼容,我创建了一个示例项并提交给索引。如果索引中使用的模型不兼容,并且 Azure 搜索 SDK 引发错误。然后我删除索引并使用我的新模型从头开始创建它。
这是测试任何项目是否与命名索引兼容的简化方法:
public async Task<bool> TestItemAsync<T>(T item, string indexName)
{
var isCompatible = false;
var indexClient = _searchServiceClient.Indexes.GetClient(indexName);
var indexActions = new List<IndexAction<T>> { IndexAction.MergeOrUpload((item)) };
var batch = IndexBatch.New(indexActions);
try
{
var unused = await indexClient.Documents.IndexAsync(batch);
isCompatible = true;
}
catch
{
// ignored
}
return isCompatible;
}
这是一个示例,说明如何使用它来探测索引的兼容性。
var item = new Product();
item.ID = 123;
item.Title = "Sample";
item.MyNewProperty = "Some value"
// ...
var isCompatible = await TestItemAsync(item, indexName);
if (isCompatible)
{
await DeleteItemAsync(item, indexName);
}
else
{
await DeleteIndexAsync<T>(indexName);
await CreateIndexAsync<T>(indexName);
}
要实际验证兼容性,请确保使用一些值填充您的项目。在此示例中,为了示例,我对一些值进行了硬编码。在实际使用中,我使用了一个 Mock 框架,该框架使用一些随机样本值填充我的项目的每个属性,但我不想给人这种用例需要第三方组件的印象。
推荐阅读
- javascript - 如何用照片添加谷歌评论?
- python - 在 python 中登录到控制台时显示额外的字段
- r - 表示多个 OR("|") 运算符语句的简写符号
- c# - 没有自定义文化的 ClickOnce
- python - 对于两个数据框,如何检索两个标签值的组合在一个但不在另一个的行
- angular - sap模板的使用顺序是什么?
- python - microsoft graph 无法使用刷新令牌获取刷新令牌
- javascript - 如何防止角度应用程序中路由器链接的默认点击行为?
- angular - 在视图模型中未检测到 ag-grid 最后更改的单元格值
- excel - 在 ListObject 表列中使用 Range