在 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 C# 索引 Json 文档
如何将单个 .NET 类型映射到 ElasticSearch/NEST 中的多个嵌套对象类型?