Elasticsearch搜索时间一致性

时间:2012-06-21 22:37:55

标签: elasticsearch

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

我的弹性搜索索引包含1600000个相对较大的文档,我需要扫描索引以将其与经典的sql数据库同步。

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

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

它有效,但我观察到,随着我的阅读提前阅读文档的速度会慢得多。

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

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

当“from”是1000000而不是0时,这个简单的查询要慢得多。

这是正常行为吗?我认为应该大概在“idannonce”字段应该被编入索引的同时,不是吗?

有什么想法? 有没有办法编写相同的查询,以便它在一个恒定的时间内运行?

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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