Как лучше всего перенести схему поиска Azure в конвейере выпуска?
В мире SQL я бы использовал что-то вроде DbUp. Есть ли что-нибудь подобное для поиска Azure? Или есть другой подход, когда схему нужно изменить?
Как лучше всего перенести схему поиска Azure в конвейере выпуска?
В мире SQL я бы использовал что-то вроде DbUp. Есть ли что-нибудь подобное для поиска Azure? Или есть другой подход, когда схему нужно изменить?
Это зависит от того, отправляете ли вы контент через SDK или извлекаете контент из поддерживаемого источника контента с помощью одного из встроенных индексаторов. С помощью SDK вы можете добавить в модель новые свойства, как описано в этом сообщении: Обновить схему документа поиска Azure.
Примечание. Изменения в вашей модели данных могут потребовать либо обновления, либо перестроения индекса. Например, для добавления новых свойств требуется только и обновить. Но если вы измените настройки, такие как возможность поиска, фильтрации или сортировки, вам потребуется перестройка. Дополнительные сведения см. в разделе Как перестроить индекс в Azure Cognitive Search< /а>
ПРОВЕРКА СОВМЕСТИМОСТИ ЧЕРЕЗ PUSH
Мое предпочтительное решение — использовать принудительную индексацию для всего. Чтобы проверить, совместима ли модель данных в индексе, я создаю образец элемента и отправляю его в индекс. Если модель, используемая в индексе, несовместима, и пакет SDK поиска Azure выдает ошибку. Затем я удаляю индекс и создаю его с нуля, используя мою новую модель.
Вот упрощенный метод проверки совместимости какого-либо элемента с именованным индексом:
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, который заполняет каждое свойство моего элемента некоторым случайным значением выборки, но я не хотел создавать впечатление, что для этого варианта использования требуется сторонний компонент.