【问题标题】:Indexing Mysql Database with elasticsearch使用 elasticsearch 索引 Mysql 数据库
【发布时间】:2012-01-26 15:25:29
【问题描述】:

我最近开始寻找 ElasticSearch 在我的 应用。我在Mysql中有我的数据库,大约有。 >2 百万 记录。我知道在 sphinx 中我们可以直接在任何 mysql 表列。我想知道它在 Elasticsearch 中是否可行, 如果不是直接,我们如何实现呢?

谢谢 莫希特

【问题讨论】:

    标签: search elasticsearch


    【解决方案1】:

    在这种情况下,您有两个选择:-

    1. 基于事件,因此您可以在 api 级别触发事件并监听事件以重新同步更改。
    2. Orm 级别,大部分 Orm 都有钩子,因此您可以监听钩子并重新同步 Elastic 搜索。

    【讨论】:

      【解决方案2】:
      • 什么是 Logstash? Logstash 是一个具有实时性的数据收集引擎 流水线能力。您可以使用 Logstash 收集您的日志, 将它们解析为您想要的格式并存储它们以供搜索或 监控您的应用程序。

      第 1 步:下载最新版本的 弹性搜索

      Step-2:下载logstasch后需要安装jdbc插件

      bin/plugin 安装 logstash-input-jdbc

      第 3 步: 下载 mysql-jdbc 驱动程序...就像我下载的文件一样 名称是 mysql-connector-java-5.1.36.jar。把这个文件放在里面 logstash/drivers/mysql-connector-java-5.1.36.jar ....可以放 任何你想的地点都可以。但记住路径。

      步骤 4: 现在创建一个 db.conf 文件并将其放入 logstash 目录...在我的情况下是 logstash-2.3.2/logstash-jdbc.conf 这是 内容:

      输入 { jdbc { jdbc_driver_library => "/opt/logstash-2.3.2/drivers/mysql-connector-java-5.1.36.jar" jdbc_driver_class=> "com.mysql.jdbc.Driver" jdbc_connection_string => " jdbc:mysql://localhost/myapp_development" jdbc_user => "root" jdbc_password => "admin" 参数 => { "user_list" => "users" } schedule => "* * * * *" statement => "select名称,来自用户的电子邮件” } } 输出 { elasticsearch { index => "users" document_type => "users" document_id => "%{123}" hosts => "localhost:9200" } }

      Jdbc 输入参数说明

      jdbc_driver_library jdbc 库的完整路径 jdbc_driver_class JDBC 要加载的驱动程序类,对于 MySQL,它是 com.mysql.jdbc.Driver jdbc_connection_string JDBC mysql 连接字符串 jdbc_user MySQL user jdbc_password MySQL 用户密码 schedule 运行输入语句 每分钟。可用的调度选项语句 MySQL 语句 parameters 传入 MySQL 语句的参数

      Jdbc 输出参数说明

      参数说明
      index Elasticsearch 索引名称 document_type Elasticsearch 索引类型。 弹性搜索文档的document_id ID


      第 5 步:现在设置已完成。我们需要启动 logstart。在此之前开始 elasicsearch

      然后启动logstsh并给它配置jadbc-db.conf文件$ cd logstash-2.3.2 $ bin/logstash agent -f logstash-jdbc.conf

      现在在弹性搜索中快速测试您的数据 http://localhost:9200/users/users/_search

      谢谢你,德布斯

      【讨论】:

      • 不要去下载river and all.它会让人头疼。使用 Logstash 将数据输入到弹性搜索中。这绝对会帮助你。
      【解决方案3】:

      https://github.com/jprante/elasticsearch-river-jdbc 这样做。您可以使用“操作表”从 mysql 源同步数据。

      第一次安装有点麻烦,但是可以用。

      首先你必须安装插件 其次,您必须设置(配置)导入的数据

      【讨论】:

        【解决方案4】:

        像 Sphinx 一样,Elastic Search 中没有对 mysql 的原生支持(目前)。

        Elastic Search 是一个很好的搜索选择,但您可能需要做一些自定义工作,以便在数据库中的项目发生更改时触发对它们的重新索引。具体如何实现将在很大程度上取决于您的应用程序。 Elastic Search 具有出色的近乎实时的搜索功能,并且已被 perform well under heavy indexing load 证明,因此触发重新索引对于大多数应用程序来说不应该是一个问题。

        NoSQL movement 似乎也越来越受欢迎。 Some applications 使用 Elastic Search 作为唯一的数据存储。

        【讨论】:

        • @catalinux(下)是正确的,他提到的 github 项目允许将表从 mySQL 移动到 elasticSearch
        • @coderman - OP 正在询问原生支持,例如 Sphinx。 River JDBC 是一个对复制非常有用的轮询器,但它不是原生支持。
        猜你喜欢
        • 2013-06-23
        • 2018-05-21
        • 2014-08-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多