Azure搜索合并索引操作返回异常

时间:2019-07-03 23:18:40

标签: c# azure azure-search azure-search-.net-sdk

我正在尝试运行批处理操作以合并对现有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 个答案:

答案 0 :(得分:0)

此问题是由两个单独的问题引起的:

  1. Index API请求中的字段名称与索引定义不匹配(已通过故障排除确认)。根本原因是模型类上缺少[SerializePropertyNamesAsCamelCase]属性。
  2. 在撰写本文时(2019年7月),Azure搜索索引REST API中存在一个错误,导致返回了无用的错误消息“对象引用未设置为对象的实例”,而不是返回更多错误消息。有用的错误消息。这是回归。预期的行为是一条错误消息,其中命名了无法识别的字段,并特别指出无法识别该字段名称。

如果其他人遇到此无用的错误消息,请仔细检查您的字段名称在Index API和索引定义之间是否匹配。抱歉,此错误给您带来的不便。