如何在预先存在的 SQL 数据库之上使用 Elastic Search?
Posted
技术标签:
【中文标题】如何在预先存在的 SQL 数据库之上使用 Elastic Search?【英文标题】:How to use Elastic Search on top of a pre-existing SQL Database? 【发布时间】:2013-07-25 06:05:39 【问题描述】:我已经阅读了很多关于如何使用 javascript 或 php 在网站上实现 Elastic Search 的优秀文档。
非常好introduction to ES。
非常完整的文档here 和here。
整个CRUD。
使用 PHP 进行弹性搜索:here、here 和 here。
因此,我给您提供这些 URL 的原因是为了了解在拥有预先存在的 SQL DB 时如何使用这些优秀文档中的一个或多个。
我在某处遗漏了要点:正如他们所说,Elasticsearch 将使用 MongoDB 创建自己的索引和数据库,我不明白如何使用 SQL 使用我的(巨大的)数据库?假设我有一个 mysql 数据库,我想使用 Elasticsearch 来加快我的研究速度并提出用户预先制作的查询,我该怎么做? ES 如何在 MySQL 之上/沿着 MySQL 工作?如何将这组庞大的数据(超过 8GB)传输到 ES DB 中,以便在开始时充分高效?
非常感谢
【问题讨论】:
将 elasticsearch 想象成另一个数据库,它是一个基于文档的 NoSQL 数据库(如 MongoDB),针对搜索进行了优化。您必须将所有数据索引到 elasticsearch 才能使用它。 所以你的意思是我必须将我在实际数据库中的所有信息都转移到 ES'NoSQL 数据库中?那么每次我在我的 SQL DB 中添加一些东西时,我都必须复制到 ES 的 DB 中? 有一些技术可以使它们保持同步。查找河流。您只需要导入您可能实际用于搜索的信息,因此可能不是每个字段。想想它如何能够在不以某种方式重新排列数据的情况下比 SQL 更快地进行搜索?如果不需要这样做,那么 mySQL 数据库人员肯定会实现一些东西! 谢谢,非常有帮助。 大多数人使用 elasticsearch 的方式是使用库、用于 php 的 elastica、用于 ruby 的轮胎等...这些通常有一些方法可以轻松维护基于其他数据存储的 elasticsearch 索引.有些人使用 elasticsearch 作为他们的主要数据存储,我会留给你阅读,但我得到的印象是它还不够成熟,无法做到这一点。 【参考方案1】:我正在使用带有 mysql 的 jdbc-river。它非常快。您可以将它们配置为持续轮询数据,或使用一次性(一次性策略)导入。
例如
curl -xPUT http://es-server:9200/_river/my_river/_meta -d '
"type" : "jdbc",
"jdbc" :
"strategy" : "simple",
"poll" : "5s",
"scale" : 0,
"autocommit" : false,
"fetchsize" : 10,
"max_rows" : 0,
"max_retries" : 3,
"max_retries_wait" : "10s",
"driver" : "com.mysql.jdbc.Driver",
"url" : "jdbc:mysql://mysql-server:3306/mydb",
"user" : "root",
"password" : "password*",
"sql" : "select c.id, c.brandCode, c.companyCode from category c"
,
"index" :
"index" : "mainIndex",
"type" : "category",
"bulk_size" : 30,
"max_bulk_requests" : 100,
"index_settings" : null,
"type_mapping" : null,
"versioning" : false,
"acknowledge" : false
'
【讨论】:
【参考方案2】:如果您需要针对 jdbc-river 提供的轮询提供更高性能和可扩展性的解决方案,我建议您观看此演示文稿,该演示文稿解释了如何执行从 SQL Server 到 Elastic Search 的增量同步:
视频中讨论的原则也适用于其他 RDBMS -> NoSQL 复制应用程序。
Adding Elasticsearch To An Existing .NET / SQL Server Application(YouTube)【讨论】:
以上是关于如何在预先存在的 SQL 数据库之上使用 Elastic Search?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SQLAlchemy ORM 会话中查询预先存在的表?
如何将预先存在的 sqlite 文件导入核心数据 iOS 7.1