我们使用 spring boot 应用程序来插入/更新弹性搜索文档。我们的数据提供者通过 Kafka 发送数据。我们的应用程序处理事件,尝试查找记录并插入记录,如果不存在,或者如果接收到的记录与保存的记录不同,则更新。elasticsearch 中不应该有任何重复的记录。
应用程序插入/更新文档并立即刷新
问题:有时我们必须删除所有数据并重新加载它们,因为有重复的记录。我发现这些克隆的记录仅与插入日期不同。它通常有几个小时的差异。
通常它按预期工作,详细的集成测试org.codelibs.elasticsearch-cluster-runner
是绿色的。
来自弹性搜索查询的示例元数据:
{
"docs" : [
{
"_index" : "reference",
"_type" : "reference",
"_id" : "s0z-BHIBCvxpj4TjysIf",
"_version" : 1,
"_seq_no" : 17315835,
"_primary_term" : 40,
"found" : true,
"_source" : {
...
"insertedDate" : 1589221706262,
...
}
},
{
"_index" : "reference",
"_type" : "reference",
"_id" : "jdVCBHIBXucoJmjM8emL",
"_version" : 1,
"_seq_no" : 17346529,
"_primary_term" : 41,
"found" : true,
"_source" : {
...
"insertedDate" : 1589209395577,
...
}
}
]
}
测试
- 我将多次数据加载到 ES 的本地实例 - 没有重复
- 我创建了一些长期工作的集成测试,在内存中有 1 到 5 个节点的本地实例上进行大量插入、更新、查询 -
org.codelibs.elasticsearch-cluster-runner
没有重复
详细信息:Elastic Search 版本 - 7.5 ES 连接org.elasticsearch.client.RestHighLevelClient