Azure 搜索合并索引操作 Returns 异常

Azure Search Merge Index Operation Returns Exception

我正在尝试 运行 批处理操作以将一些更改合并到现有的 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;
            }
        }

    }

我以前从未见过这个错误,我似乎无法在网上找到任何关于它的信息。任何帮助都将不胜感激!

编辑: 下面是我传入的 Type 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. 索引 API 请求中的字段名称与索引定义不匹配(已通过故障排除确认)。根本原因是模型 class.
  2. 上缺少 [SerializePropertyNamesAsCamelCase] 属性
  3. 在撰写本文时(2019 年 7 月),Azure 搜索索引 REST API 中存在一个错误,导致返回无用的错误消息 "Object reference not set to an instance of an object" 而不是更有用的错误消息错误信息。这是一种倒退。预期的行为是一条错误消息,它命名无法识别的字段,并明确指出该字段名称无法识别。

如果其他人遇到此无用的错误消息,double-check 您的字段名称在索引 API 和索引定义之间匹配。对于此错误给您带来的不便,我们深表歉意。