Azure 搜索:索引文档计数与上传记录总数不匹配
Azure Search: Indexed document count does not match the total number of uploaded records
我一直在尝试使用 Azure Search .NET SDK 将 31 条不同的记录从 SQL 服务器上传到 Azure 云。我能够上传记录而不会出现任何技术错误。甚至日志也确认所有 31 条记录都被 return 索引,所有 31 条记录的状态代码为 200
但是在 Azure 门户中,当我看到索引上的文档数时,我只看到 27。这意味着 4 条记录由于某种原因没有被索引。如果两条记录具有相同的派对 ID,则只会上传一条记录。
为了避免这种情况,我在 dto 中创建了一个新密钥
是 party id 和 tag id 的组合,以确保每一行的键都是唯一的。然而,这没有帮助,我不断丢失具有重复 partyIds 的行。
有人可以向我解释为什么记录丢失了吗?我尝试用谷歌搜索相关文章,但到目前为止没有成功。
下面是对象 Dto
public class PartyTagMappingDto
{
[Key] //combination of partyId and TagId
public string Id { get; set; }
[IsFilterable,IsSearchable]
public string PartyId { get; set; }
[IsSearchable,IsFilterable]
public string TagId { get; set; }
[IsSearchable,IsFilterable]
public string TagName { get; set; }
public string Description { get; set; }
}
也许这可能是您发送了重复的数据如果您想检查请添加此code
您可以找到您的4
记录的去向。
var batch = IndexBatch.New(actions);
try
{
var data = GetIndexClient(IndexName).Documents.Index(batch);
var passResultCount = data.Results.Where(x => x.Succeeded).Count();
var failResultCount = data.Results.Where(x => x.Succeeded==false).Count();
var MessageResult = data.Results.Where(x => !string.IsNullOrEmpty(x.ErrorMessage));
var keyResult = data.Results.Where(x => !string.IsNullOrEmpty(x.Key)).Select(x=>x.Key).ToList();
var unikKey = keyResult.Distinct().ToList();
string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
}
catch (IndexBatchException e)
{
// Sometimes when your Search service is under load, indexing will fail for some of the documents in
// the batch. Depending on your application, you can take compensating actions like delaying and
// retrying. For this simple demo, we just log the failed document keys and continue.
Console.WriteLine(
"Failed to index some of the documents: {0}",
String.Join(", ", e.IndexingResults.Where(r => !r.Succeeded).Select(r => r.Key)));
}
注: in unikKey
result 可以查到哪个更新或在azure server中创建的实际结果。
我一直在尝试使用 Azure Search .NET SDK 将 31 条不同的记录从 SQL 服务器上传到 Azure 云。我能够上传记录而不会出现任何技术错误。甚至日志也确认所有 31 条记录都被 return 索引,所有 31 条记录的状态代码为 200
但是在 Azure 门户中,当我看到索引上的文档数时,我只看到 27。这意味着 4 条记录由于某种原因没有被索引。如果两条记录具有相同的派对 ID,则只会上传一条记录。 为了避免这种情况,我在 dto 中创建了一个新密钥 是 party id 和 tag id 的组合,以确保每一行的键都是唯一的。然而,这没有帮助,我不断丢失具有重复 partyIds 的行。
有人可以向我解释为什么记录丢失了吗?我尝试用谷歌搜索相关文章,但到目前为止没有成功。
下面是对象 Dto
public class PartyTagMappingDto
{
[Key] //combination of partyId and TagId
public string Id { get; set; }
[IsFilterable,IsSearchable]
public string PartyId { get; set; }
[IsSearchable,IsFilterable]
public string TagId { get; set; }
[IsSearchable,IsFilterable]
public string TagName { get; set; }
public string Description { get; set; }
}
也许这可能是您发送了重复的数据如果您想检查请添加此code
您可以找到您的4
记录的去向。
var batch = IndexBatch.New(actions);
try
{
var data = GetIndexClient(IndexName).Documents.Index(batch);
var passResultCount = data.Results.Where(x => x.Succeeded).Count();
var failResultCount = data.Results.Where(x => x.Succeeded==false).Count();
var MessageResult = data.Results.Where(x => !string.IsNullOrEmpty(x.ErrorMessage));
var keyResult = data.Results.Where(x => !string.IsNullOrEmpty(x.Key)).Select(x=>x.Key).ToList();
var unikKey = keyResult.Distinct().ToList();
string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
}
catch (IndexBatchException e)
{
// Sometimes when your Search service is under load, indexing will fail for some of the documents in
// the batch. Depending on your application, you can take compensating actions like delaying and
// retrying. For this simple demo, we just log the failed document keys and continue.
Console.WriteLine(
"Failed to index some of the documents: {0}",
String.Join(", ", e.IndexingResults.Where(r => !r.Succeeded).Select(r => r.Key)));
}
注: in unikKey
result 可以查到哪个更新或在azure server中创建的实际结果。