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中创建的实际结果。