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; }
}
此问题是由两个不同的问题引起的:
- 索引 API 请求中的字段名称与索引定义不匹配(已通过故障排除确认)。根本原因是模型 class.
上缺少 [SerializePropertyNamesAsCamelCase]
属性
- 在撰写本文时(2019 年 7 月),Azure 搜索索引 REST API 中存在一个错误,导致返回无用的错误消息 "Object reference not set to an instance of an object" 而不是更有用的错误消息错误信息。这是一种倒退。预期的行为是一条错误消息,它命名无法识别的字段,并明确指出该字段名称无法识别。
如果其他人遇到此无用的错误消息,double-check 您的字段名称在索引 API 和索引定义之间匹配。对于此错误给您带来的不便,我们深表歉意。
我正在尝试 运行 批处理操作以将一些更改合并到现有的 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; }
}
此问题是由两个不同的问题引起的:
- 索引 API 请求中的字段名称与索引定义不匹配(已通过故障排除确认)。根本原因是模型 class. 上缺少
- 在撰写本文时(2019 年 7 月),Azure 搜索索引 REST API 中存在一个错误,导致返回无用的错误消息 "Object reference not set to an instance of an object" 而不是更有用的错误消息错误信息。这是一种倒退。预期的行为是一条错误消息,它命名无法识别的字段,并明确指出该字段名称无法识别。
[SerializePropertyNamesAsCamelCase]
属性
如果其他人遇到此无用的错误消息,double-check 您的字段名称在索引 API 和索引定义之间匹配。对于此错误给您带来的不便,我们深表歉意。