Удаление документов в индексе поиска

В этой статье объясняется, как удалить целые документы из индекса поиска в службе "Поиск ИИ Azure" с помощью REST API или пакетов SDK Azure. В ней рассматриваются следующие задачи:

  • Понимание необходимости удаления вручную
  • Определение определенных документов для удаления
  • Получите количество документов и метрики хранения
  • Удаление одного документа или осиротевшего документа
  • Массовое удаление документов
  • Подтверждение удаления

Подсказка

Чтобы быстро удалить один документ, перейдите к разделу "Удалить один документ".

Предпосылки

Понимание необходимости удаления вручную

Удаление документов вручную необходимо при использовании подхода индексирования в режиме push, где код приложения обрабатывает импорт данных и управляет индексированием.

Если вы используете Logic Apps для загрузки индекса (предварительная версия), также необходимо вручную удалять документы.

Кроме того, может потребоваться вручную удалить документы в нагрузках, управляемых индексатором, если поисковые документы становятся "оторванными" от исходных документов. Важное преимущество индексаторов — автоматическое получение содержимого и синхронизация с помощью функций обнаружения изменений и удаления целевого источника данных. Все поддерживаемые источники данных обеспечивают некоторый уровень обнаружения. Но в некоторых случаях синхронизированное удаление предопределяется стратегией мягкого удаления, при которой исходный документ (или запись) помечается для удаления, запускается индексатор для удаления индексированного содержимого, и только после обновления индекса физически удаляется исходное содержимое. Если исходное содержимое удаляется сначала, у вас есть потерянные документы в индексе поиска. Чтобы повторно установить паритет между исходным и индексным содержимым, необходимо вручную удалить потерянные документы в индексе.

Следующие ссылки содержат дополнительные сведения об обнаружении изменений и удалений для каждого источника данных в рабочих нагрузках на основе индексатора.

Определение определенных документов для удаления

Все документы однозначно определяются ключом документа в индексе поиска. Чтобы удалить документ, необходимо определить, какое поле является ключом документа и указать ключ в запросе на удаление.

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

Поиск ключа документа

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

В этом примере строка поиска используется для поиска документа в индексе, а инструкция select определяет, какие поля находятся в результатах. "HotelId" — это ключ документа в этом примере.

POST https://[service name].search.windows.net/indexes/hotels-sample/docs/search?api-version=2025-09-01
{
    "search": "this query has terms that pertain to the document I want to delete",
    "select": "HotelName, HotelId",
    "count": true
}

Результаты поиска по этому ключевому слову являются топ-50 по умолчанию. Если документ, который вы хотите удалить, соответствует условиям поиска, вы должны увидеть его (и его ключ) в результатах. Убедитесь, что запрос содержит описательное поле, которое помогает подтвердить наличие правильного документа.

{
  "@odata.count": 50,
  "value": [
    {
      "@search.score": 4.5116634,
      "HotelId": "18",
      "HotelName": "Ocean Water Resort & Spa"
    }
   ...
  ]
}

Простая строка проста, но если индекс использует поле в кодировке Base-64 или если документы поиска были созданы из parsingMode параметра, возможно, вы работаете со значениями, с которыми вы не знакомы. Если вы работаете с документами, разбитыми на части индексатором, ключ документа часто создается как "chunked_id", состоящий из длинной последовательности цифр и букв.

Поиск определенного документа

Теперь, когда у вас есть ключ документа, выполните запрос поиска , который извлекает весь документ. Если документ является фрагментом, вы увидите идентификатор родительского документа. Ключ документа включен в качестве параметра запроса.

В первом примере возвращается отель, имеющий значение ключа документа 18.

GET https://[service name].search.windows.net/indexes/hotels-sample/docs('18')&api-version=2025-09-01

Второй пример возвращает блок-документ. Ключ документа — это chunk_id.

GET https://[service name].search.windows.net/indexes/chunking-example-index/docs('aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb')&api-version=2025-09-01

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

{
  "chunk_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
  "parent_id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
  "chunk": "Unpopulated Slopes of an Active Volcano\u2014Naples, Italy ... 90\n\nDazzling Coastlines\u2014Italy ... .92\n\nLiving on Fertile Land\u2014Nile River, Egypt  ... 94\n\n\n\n vii",
  "title": "earth_at_night_508.pdf",
  "text_vector": [ <omitted> ]
}

Подсказка

Используйте клиент REST, клиент Azure SDK или средство командной строки для выполнения подстановочного запроса. Портал Azure не поддерживает запросы GET для запроса.

Получите количество документов и метрики хранения

Перед удалением документов получите начальные метрики для определения количества документов и объема хранилища индекса, чтобы подтвердить удаление позже.

Количество документов и хранилище индексов можно получить с помощью:

Ниже приведен пример ответа:

{
  "documentCount": 12,
  "storageSize": 123456,
  "vectorIndexSize": 123456
}

Удаление одного документа

  1. Используйте REST API Документы - Индекс с помощью удаления @search.action, чтобы удалить его из индекса поиска.

  2. Сформулируйте вызов POST, указывающий имя индекса и конечную точку docs/index .

  3. Убедитесь, что текст запроса содержит ключ документа, который требуется удалить.

    POST https://[service name].search.windows.net/indexes/hotels-sample/docs/index?api-version=2025-09-01
    Content-Type: application/json   
    api-key: [admin key]
    
    {  
      "value": [  
        {  
          "@search.action": "delete",  
          "id": "18"  
        }  
      ]  
    }
    
  4. Отправьте запрос.

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

    Код состояния Meaning Повторная попытка Примечания.
    200 Документ успешно удален. n/a Операции удаления являются идемпотентными. То есть, даже если ключ документа не существует в индексе, попытка удаления с этим ключом приводит к коду состояния 200.
    400 В документе произошла ошибка, из-за которой она не была удалена. нет Сообщение об ошибке в ответе содержит сведения.
    422 Индекс временно недоступен, так как он был обновлен с флагом AllowIndexDowntime с значением true. Да Подождите, пока индекс станет доступным.
    503 (Сервис временно недоступен) Служба поиска временно недоступна, возможно, из-за тяжелой нагрузки. Да Ваш код должен подождать в этом случае, прежде чем предпринимать повторную попытку, иначе вы рискуете увеличить время недоступности службы.

    Замечание

    Если клиентский код часто встречает ответ 207, одна из возможных причин заключается в том, что система находится под нагрузкой. Это можно подтвердить, проверив statusCode свойство 503. В таком случае мы рекомендуем троттлинг запросов индексирования. В противном случае, если индексирование трафика не утихает, система может начать отклонять все запросы с ошибками 503.

  5. Чтобы подтвердить удаление, можно повторно отправить поисковый запрос. Вы должны получить сообщение об ошибке 404: документ не найден.

    GET https://[service name].search.windows.net/indexes/hotel-sample-index/docs/18?api-version=2025-09-01
    

Reference:Documents — Index

Успешный запрос на удаление возвращает HTTP 200 (ОК). Текст ответа содержит состояние для каждого документа:

{
    "value": [
        { "key": "18", "status": true, "statusCode": 200 }
    ]
}

Массовое удаление документов

  1. Используйте REST API Документы - Индекс с помощью удаления @search.action, чтобы удалить его из индекса поиска. Сформулируйте вызов POST, указывающий имя индекса и конечную точку docs/index .

  2. Убедитесь, что текст запроса содержит ключи всех документов, которые вы хотите удалить.

    POST https://[service name].search.windows.net/indexes/hotels-sample/docs/index?api-version=2025-09-01
    Content-Type: application/json   
    api-key: [admin key]
    
    {
      "value": [
        {
          "@search.action": "delete",
          "id": "doc1"
        },
        {
          "@search.action": "delete",
          "id": "doc2"
        }
      ]
    }
    
  • Ограничения пакетов: Рекомендуется ограничивать пакеты до 1000 документов или примерно 16 МБ на запрос, чтобы обеспечить оптимальную производительность.

  • Идемпотентность: удаление является идемпотентным; Если вы пытаетесь удалить идентификатор документа, который не существует, API по-прежнему возвращает состояние 200 OK.

  • Задержка. Документы не всегда удаляются мгновенно из хранилища. Фоновый процесс выполняет физическое удаление каждые несколько минут.

  • Хранилище векторов: удаление документов не сразу освобождает квоты хранилища векторов. Для физического удаления требуется несколько минут. Для немедленного восстановления пространства векторов может потребоваться удалить и перестроить индекс.

Reference:Documents — Index

Проверка удаления документов

После удаления документов убедитесь, что удаление выполнено успешно.

  1. На портале Azure откройте страницу обзора службы поиска.
  2. Выберите управление поиском>индексы.
  3. Проверьте столбец количество документов для вашего индекса.
  4. Подождите несколько минут и обновите, если число не изменилось (удаление асинхронно).

Удаление документа не сразу освобождает место в индексе. Каждые несколько минут фоновый процесс выполняет физическое удаление. Независимо от того, используется ли портал Azure или API получения статистики статистики для возврата статистики индекса, вы можете ожидать небольшую задержку, прежде чем удаление будет отражено на портале Azure и метриках API.

Устранение неполадок с удалением документов

В следующей таблице перечислены распространенные проблемы при удалении документов и их устранении.

Проблема Причина Резолюция
Количество документов без изменений Удаление асинхронно. Фоновый процесс выполняется каждые несколько минут. Подождите 2–3 минуты и обновите. Снова проверьте статистику индекса.
400 Недопустимый запрос Недопустимый ключ документа или неправильный текст запроса. Убедитесь, что имя поля ключа документа соответствует схеме индекса. Проверьте синтаксис JSON.
403 Запрещено Недостаточно разрешений. Используйте ключ API администратора или убедитесь, что ваше удостоверение имеет роль участника данных поискового индекса.
404 Не найдено в индексе Неправильное имя индекса или не существует. Проверьте имя индекса в URL-адресе запроса.
Хранилище не восстановлено для повторного использования Физическое удаление выполняется асинхронно в фоновом режиме. Подождите несколько минут. Для немедленного восстановления векторного хранилища удалите и перестроите индекс.
Потерянные документы остаются Исходные документы были удалены до запуска индексатора, обнаруживающего удаление. Вручную удалите потерянные документы с помощью ключей документов.

См. также