Операция индекса поиска слияния Azure возвращает исключение - PullRequest
0 голосов
/ 04 июля 2019

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

{Microsoft.Rest.Azure.CloudException: The request is invalid. Details: parameters : Object reference not set to an instance of an object.

Вот фрагмент моего кода:

public static void UploadData<T>(List<T> data, ISearchIndexClient indexClient) where T : class
    {
        int totalFailedToIndex = 0;
        int totalPassedToIndex = 0;


        for (int i = 0; i < data.Count; i = i + 500)
        {
            var stBatch = data.Skip(i).Take(500).ToList();

            // Insert the data.
            var serviceTreeBatch = IndexBatch.Merge(stBatch);
            try
            {
                var index = indexClient.Documents.Index(serviceTreeBatch);
                totalPassedToIndex += index.Results.Count();

            }
            catch (IndexBatchException e)
            {
                totalFailedToIndex += e.IndexingResults.Where(f => !f.Succeeded).Count();
            }
            catch(Exception e)
            {
                continue;
            }
        }

    }

Я никогда не видел эту ошибку раньше, и я не могу найти что-нибудь об этом в Интернете. Любая помощь обязательно будет оценена!

Edit: Вот пример типа T, который я передаю. ProjectId является ключом для этих элементов индекса. Также важно отметить, что эта версия не имеет всех значений индекса (это слияние, поэтому я загружаю только те значения, которые могут измениться вместе с ключом). Мне интересно, если пропущенные значения являются причиной этого сбоя?

    public class IndexItemModel
{
    /// <summary>
    /// Unique ProjectId
    /// </summary>
    public string ProjectId { get; set; }
    public string RepositoryId { get; set; }

    public IEnumerable<string> Repository_Users { get; set; }

    public string Repository_UsersString { get; set; }
}

1 Ответ

0 голосов
/ 10 июля 2019

Эта проблема вызвана двумя отдельными проблемами:

  1. Имена полей в запросе API индекса не соответствуют определению индекса (подтверждено с помощью устранения неполадок). Основной причиной был отсутствующий атрибут [SerializePropertyNamesAsCamelCase] в классе модели.
  2. На момент написания этой статьи (июль 2019 г.) в API REST индекса поиска Azure возникла ошибка, приводящая к тому, что вместо более полезное сообщение об ошибке. Это регрессия. Ожидаемое поведение - это сообщение об ошибке, которое называет нераспознанное поле и, в частности, говорит, что имя поля не распознано.

Если кто-то еще сталкивается с этим бесполезным сообщением об ошибке, еще раз проверьте, совпадают ли имена ваших полей между Index API и определением индекса. Приносим извинения за неудобства, вызванные этой ошибкой.

...