在 Elasticsearch NEST 中的索引间歇性失败后立即调用 Search

Posted

技术标签:

【中文标题】在 Elasticsearch NEST 中的索引间歇性失败后立即调用 Search【英文标题】:Calling Search immediately after indexing fails intermittently in Elasticsearch NEST 【发布时间】:2021-09-28 11:04:40 【问题描述】:

我正在使用NEST Elasticsearch 客户端并尝试进行单元测试。我看到 GET 立即开始工作,但 SEARCH 需要几毫秒,导致测试间歇性失败。

await _elasticClient.GetAsync<User>(id)).Source; //Works fine 
elasticClient.Search<User>(s =>
                s.Query(q =>
                    q.MultiMatch(x =>
                        x.Fields(f => f
                            .Field(petType => petType.Name, 3)
                            .Field(petType => petType.Category)
                    )));
             // response.Documents is empty many times.

在 Index 和 Search 语句之间添加 500 毫秒的延迟是可行的,但会使测试变慢。

有没有办法解决这个问题。

我相信搜索遵循最终的一致性。我将尝试将副本数或分片数配置为 1,看看是否有帮助。

【问题讨论】:

【参考方案1】:

我可以通过调用 Refresh API 来解决这个问题。

await _client.Indices.RefreshAsync("index-name");

刷新等待索引完成。 这个答案可以参考。

How to wait for reindexing in elasticsearch?

【讨论】:

以上是关于在 Elasticsearch NEST 中的索引间歇性失败后立即调用 Search的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch搜索查询以检索所有记录NEST

ElasticSearch 和 NEST:如何从索引中清除所有文档?

使用 Elasticsearch NEST C# 索引 Json 文档

如何将单个 .NET 类型映射到 ElasticSearch/NEST 中的多个嵌套对象类型?

使用 ElasticSearch Nest 索引动态对象 - *** 异常

使用 NEST (ElasticSearch) 插入文档