Служба поиска Azure Удаление индекса - PullRequest
0 голосов
/ 10 сентября 2018

Я очень новичок в службе поиска Azure и следую инструкциям, которые я нашел в Интернете. В одном из этих руководств у них есть такой метод:

static void Main(string[] args)
{
    IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
    IConfigurationRoot configuration = builder.Build();

    SearchServiceClient serviceClient = CreateSearchServiceClient(configuration);
    var test = serviceClient.Indexes.GetClient("testindex");

    Console.WriteLine("{0}", "Deleting index...\n");
    DeleteHotelsIndexIfExists(serviceClient);

    Console.WriteLine("{0}", "Creating index...\n");
    CreateHotelsIndex(serviceClient);

    ISearchIndexClient indexClient = serviceClient.Indexes.GetClient("hotels");

    Console.WriteLine("{0}", "Uploading documents...\n");
    UploadDocuments(indexClient);

    ISearchIndexClient indexClientForQueries = CreateSearchIndexClient(configuration);

    RunQueries(indexClientForQueries);

    Console.WriteLine("{0}", "Complete.  Press any key to end application...\n");
    Console.ReadKey();
}

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

Если это живой индекс, то если я удалю его даже на долю секунды, не будет ли это означать, что службы, вызывающие поиск по этому индексу, не будут работать? Другая вещь, которая меня беспокоит, заключается в том, что в большинстве случаев мои данные будут на 90% одинаковыми, у меня будут некоторые обновления и новые записи, возможно, некоторые будут удалены. Но если в моей базе данных есть миллион записей, кажется глупым удалять все это, а затем создавать заново.

Есть ли лучший подход. Могу ли я просто обновить документы в индексе, а не удалять его?

Так что, я думаю, это вопрос из двух частей. 1. Если я удалю индекс, остановит ли он поиск во время создания нового? 2. Есть ли лучший подход, чем просто удаление индекса. Если есть способ обновления, как вы обрабатываете сценарии, в которых изменилась структура документа, например, добавлено новое поле.

1 Ответ

0 голосов
/ 10 сентября 2018

Этот пример предназначен для демонстрации вызова службы поиска Azure через .NET SDK.Его не следует рассматривать в качестве примера передового опыта.

Чтобы ответить на ваши конкретные вопросы:

  1. Удаление индекса немедленно приведет к сбою всех запросов, нацеленных на этот индекс.Вы не должны удалять живой индекс в производстве.Кроме того, пока нет возможности резервного копирования / восстановления для индексов, поэтому даже если индекс не является живым, вы не должны удалять его, если не можете восстановить данные из другого места.
  2. Если вам нужно обновить документыбез обновления схемы индекса этого можно добиться с помощью действия «слияние» Index API.Существует учебник, который охватывает это здесь .Если вам нужно добавить новое поле, вы можете сделать это без удаления и повторного создания индекса - просто используйте один из Indexes.CreateOrUpdate методов .NET SDK.По умолчанию эта операция не приводит к простою индекса.Однако, если вам нужно удалить, переименовать или изменить тип существующего поля или включить новое поведение в поле (например, сделать его граненым, сортируемым или частью подсказки), вам необходимо создатьновый индекс.По этой причине рекомендуется, чтобы ваше приложение реализовало дополнительный уровень косвенности над именами индексов, чтобы при необходимости вы могли менять и перестраивать индексы.
...