Nano Hash - криптовалюты, майнинг, программирование

Миграции схемы поиска Azure

Как лучше всего перенести схему поиска Azure в конвейере выпуска?

В мире SQL я бы использовал что-то вроде DbUp. Есть ли что-нибудь подобное для поиска Azure? Или есть другой подход, когда схему нужно изменить?


Ответы:


1

Это зависит от того, отправляете ли вы контент через 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, который заполняет каждое свойство моего элемента некоторым случайным значением выборки, но я не хотел создавать впечатление, что для этого варианта использования требуется сторонний компонент.

08.02.2021
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..