Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure搜索架构迁移_Azure_Asp.net Core_Azure Cognitive Search - Fatal编程技术网

Azure搜索架构迁移

Azure搜索架构迁移,azure,asp.net-core,azure-cognitive-search,Azure,Asp.net Core,Azure Cognitive Search,在发布管道中迁移Azure搜索架构的最佳方法是什么 在SQL世界中,我会使用类似DbUp的东西。Azure搜索有类似的功能吗? 或者,当架构需要更改时,是否有不同的方法?这取决于您是通过SDK推送内容,还是使用一个预构建的索引器从受支持的内容源中提取内容。使用SDK,您可以向模型添加新属性,如本文所述: 注意:数据模型中的更改可能需要更新或重建索引。例如,添加新属性只需要添加和更新。但是,如果您更改了可搜索、可筛选或可排序等设置,则需要重新生成。有关详细信息,请参阅 通过推送进行兼容性探测 我的

在发布管道中迁移Azure搜索架构的最佳方法是什么

在SQL世界中,我会使用类似DbUp的东西。Azure搜索有类似的功能吗?
或者,当架构需要更改时,是否有不同的方法?

这取决于您是通过SDK推送内容,还是使用一个预构建的索引器从受支持的内容源中提取内容。使用SDK,您可以向模型添加新属性,如本文所述:

注意:数据模型中的更改可能需要更新或重建索引。例如,添加新属性只需要添加和更新。但是,如果您更改了可搜索、可筛选或可排序等设置,则需要重新生成。有关详细信息,请参阅

通过推送进行兼容性探测

我的首选解决方案是对所有内容使用推式索引。为了测试索引中的数据模型是否兼容,我创建了一个示例项并提交给索引。如果索引中使用的模型不兼容,Azure Search 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;
}
公共异步任务TestItemAsync(T项,字符串索引名)
{
var isCompatible=假;
var indexClient=\u searchServiceClient.index.GetClient(indexName);
var indexActions=新列表{IndexAction.MergeOrUpload((项))};
var batch=IndexBatch.New(indexActions);
尝试
{
var unused=await indexClient.Documents.IndexAsync(批处理);
isCompatible=true;
}
抓住
{
//忽略
}
返回是不可竞争的;
}
下面是一个示例,说明如何使用它来探测索引的兼容性

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);
}
var item=新产品();
项目ID=123;
item.Title=“样本”;
item.MyNewProperty=“某些值”
// ... 
var isCompatible=await TestItemAsync(项,索引名);
如果(不兼容)
{
等待DeleteItemAsync(item,indexName);
}
其他的
{
等待DeleteIndexAsync(indexName);
等待CreateIndexAsync(indexName);
}
要实际验证兼容性,请确保使用一些值填充项目。在这个例子中,为了这个例子,我硬编码了一些值。在实际使用中,我使用一个模拟框架,用一些随机样本值填充我的项的每个属性,但我不想给人这样的印象,即这个用例需要第三方组件