0

我有一个非常简单的问题。

我有一个包含 1600000 个比较大的文档的 elasticsearch 索引,我需要扫描索引以将其与经典的 sql 数据库同步。

我的文档包括 sql ID 和时间戳。

然后同步 sql db 和弹性索引,我只是顺序读取行和文档,都按 id 排序,比较 id 可以确定是否需要删除文档(比较是否定的),添加一个新文档sql 行(比较为正),如果比较为 0,我比较时间戳以了解是否需要更新文档。

它可以工作,但我观察到,当我提前阅读时,阅读文档会变慢很多。

我通过在索引上重复搜索来分块检索我的文档,每次都移动请求的“来自”字段,如下所示:

{
    "from" : 0, "size" : 10000,
    "fields" : ["idannonce","ts"],
    "sort" : ["idannonce"],
    "query" : "match_all" {}
}

当“from”为 1000000 时,这个简单的查询比它为 0 时慢很多。

这是正常行为吗?我认为它应该与“idannonce”字段被索引的时间大致相同,不是吗?

任何想法 ?有没有办法编写相同的查询,使其在恒定时间内运行?

谢谢

4

2 回答 2

1

我也在做类似的事情,但我发现https://github.com/jprante/elasticsearch-river-jdbc更有用。这是非常简单的集成。请尝试使用它。请发布您的代码要点。此外 https://github.com/lukas-vlcek/bigdesk在您运行查询时观察图表。

于 2012-06-23T06:18:39.497 回答
1

搜索 API 不是为这个用例设计的。除了获得次优的性能之外,您可能还缺少一些更改,因为您的删除和添加会在更改提交到索引时通过“移动”您的检索窗口来干扰弹性搜索结果。您应该切换到更适合此操作 的Scroll API 。

于 2012-06-21T23:25:16.947 回答