我遇到的问题是,是否可以在关系数据库之上使用ElasticSearch。 1.当我在关系数据库中插入或删除记录时,它会反映在弹性搜索中吗? 2.如果我在弹性搜索中插入文档,它是否会保留在数据库中? 3.它是否使用缓存或内存数据库来促进搜索?如果有的话是什么用途?
答案 0 :(得分:2)
Elasticsearch和关系数据库之间没有直接连接 - ES拥有自己的基于Apache Lucene的数据存储。
也就是说,您可以像其他人一样注意到使用JDBC的Elasticsearch River插件将数据从关系数据库加载到Elasticsearch中。请记住,此方法存在许多限制:
这只是一种方式 - ES的JDBC River只能从源代码中读取 数据库 - 它不会将数据从ES推送到源数据库。
如果删除源数据库中的数据,则不会删除删除 在将其编入ES后,删除将不会被反映出来 在ES。 ElasticSearch river JDBC MySQL not deleting records 和https://github.com/jprante/elasticsearch-river-jdbc/issues/213
它不是一个生产,可扩展的解决方案 关系数据库和Elasticsearch集成。来自JDBC River的作者在2014年1月的评论,它被设计为“ 用于演示目的的单节点(不可扩展)解决方案。“ http://elasticsearch-users.115913.n3.nabble.com/Strategy-for-keeping-Elasticsearch-updated-with-MySQL-td4047253.html
直接回答您的问题(假设您使用的是JDBC River):
新文档插入可由JDBC River处理但现有 数据删除不是。
数据不会从Elasticsearch流入您的关系数据库。这需要定制开发工作。
Elasticsearch构建于Apache Lucene之上。 Lucene反过来 在OS级别上依赖于文件系统缓存(其中 这就是为什么ES建议将堆大小保持在不超过50%的原因 总内存,为文件系统缓存留下了很多)。此外 ES / Lucene堆栈使用了许多内部缓存(如 Lucene字段缓存和过滤器缓存) http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-cache.html 和 http://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)
在寻找类似的事情时遇到了这个问题。认为更新到期了。
我的发现:
我发现的另一个选项是Scotas Push Connector,它将插入,更新和删除从RDBMS推送到Elasticsearch。详情请见http://www.scotas.com/product-scotas-push-connector。
此处的示例实施:http://www.scotas.com/blog/?p=90