在顶级关系数据库上运行ElasticSearch

时间:2014-08-25 13:33:21

标签: java sql json elasticsearch

我遇到的问题是,是否可以在关系数据库之上使用ElasticSearch。 1.当我在关系数据库中插入或删除记录时,它会反映在弹性搜索中吗? 2.如果我在弹性搜索中插入文档,它是否会保留在数据库中? 3.它是否使用缓存或内存数据库来促进搜索?如果有的话是什么用途?

3 个答案:

答案 0 :(得分:2)

Elasticsearch和关系数据库之间没有直接连接 - ES拥有自己的基于Apache Lucene的数据存储。

也就是说,您可以像其他人一样注意到使用JDBC的Elasticsearch River插件将数据从关系数据库加载到Elasticsearch中。请记住,此方法存在许多限制:

  1. 这只是一种方式 - ES的JDBC River只能从源代码中读取 数据库 - 它不会将数据从ES推送到源数据库。

  2. 如果删除源数据库中的数据,则不会删除删除 在将其编入ES后,删除将不会被反映出来 在ES。 ElasticSearch river JDBC MySQL not deleting recordshttps://github.com/jprante/elasticsearch-river-jdbc/issues/213

  3. 它不是一个生产,可扩展的解决方案 关系数据库和Elasticsearch集成。来自JDBC River的作者在2014年1月的评论,它被设计为“ 用于演示目的的单节点(不可扩展)解决方案。“ http://elasticsearch-users.115913.n3.nabble.com/Strategy-for-keeping-Elasticsearch-updated-with-MySQL-td4047253.html

  4. 直接回答您的问题(假设您使用的是JDBC River):

    1. 新文档插入可由JDBC River处理但现有 数据删除不是。

    2. 数据不会从Elasticsearch流入您的关系数据库。这需要定制开发工作。

    3. Elasticsearch构建于Apache Lucene之上。 Lucene反过来 在OS级别上依赖于文件系统缓存(其中 这就是为什么ES建议将堆大小保持在不超过50%的原因 总内存,为文件系统缓存留下了很多)。此外 ES / Lucene堆栈使用了许多内部缓存(如 Lucene字段缓存和过滤器缓存) http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-cache.htmlhttp://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-fielddata.html 在内部,过滤器缓存使用bitset实现: http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/

答案 1 :(得分:1)

1)您应该查看ElasticSearch jdbc河here以获取插入内容(我相信已删除的行不再受管理,请参阅developper comment)。

2)除非您手动执行此操作,否则它不会由ElasticSearch本地管理。

3)的确,ElasticSearch使用缓存来提高性能,尤其是在使用过滤器时。存储位组(0/1的数组)。

答案 2 :(得分:0)

在寻找类似的事情时遇到了这个问题。认为更新到期了。

我的发现:

  1. Elasticsearch现在已经弃用了Rivers,虽然above-mentioned jprante's River依赖于......
  2. 我发现的另一个选项是Scotas Push Connector,它将插入,更新和删除从RDBMS推送到Elasticsearch。详情请见http://www.scotas.com/product-scotas-push-connector

    此处的示例实施:http://www.scotas.com/blog/?p=90