首页 > 解决方案 > 对弹性搜索结果的并发请求 null

问题描述

我正在尝试使用 C# Nest 更新弹性搜索中的文档。我有 Azure 服务总线触发功能,它提供要更新的数据。以下是我为更新文档而执行的步骤。

  1. 通过 ID 从 Elastic Search 索引中获取记录
  2. 进行更改
  3. 按 ID 更新记录

如果我使用单个消息进行测试,则逻辑工作正常。在并发请求的情况下,弹性搜索正在重新调整空响应。

下面是 servicebus 消息和 Nest 逻辑的详细信息。

信息 :

ID 数据待更新 12345678 XXXXXXXXXXXXXXXX

商业逻辑 :

public async Task Update(string message)
        {
            var obj = JsonConvert.DeserializeObject<Model>(topicMessage.Record);

            SearchResponse searchResponse = null;

            var esResult = await _elasticClient.GetAsync<SearchResponse>(obj.Id);
            searchResponse = esResult?.Source;

            if (searchResponse != null)
            {
                // Update logic which is working fine
            }
            else
            {
                throw new Exception($"Record with id:{obj.Id} not found in ES");
            }
        }

如果我一次处理 10000 条记录,那么大约有 500 到 1000 条记录返回 null(即使带有 Id 的记录也存在于 ES 索引上)。

我需要一些帮助来处理具有快速处理和更少故障的并发请求。

注意:任何消息中的 Id 都不为 null 或为空。

标签: c#elasticsearchnestazure-servicebus-topicsazure-servicebus-subscriptions

解决方案


推荐阅读