web-dev-qa-db-ja.com

ElasticSearch Mysqlと統合する方法

私のプロジェクトの1つで、mysqlでElasticSearchを使用する予定です。 ElasticSearchを正常にインストールしました。 ESでインデックスを個別に管理できます。しかし、mysqlで同じことを実装する方法がわかりません。

いくつかのドキュメントを読みましたが、少し混乱していて、明確なアイデアを持っていません。誰でも助けてくれますか?

前もって感謝します。

53
Yaxita Shah

最終的に私は答えを見つけることができました。調査結果を共有します。

ElasticSearchをMysqlで使用するには、Javaデータベース接続(JDBC)インポーターが必要です。 JDBCドライバーを使用すると、mysqlデータをelasticsearchに同期できます。

私はubuntu 14.04 LTSを使用していますが、Javaで書かれているようにelasticsearchを実行するにはJava8をインストールする必要があります

以下にインストール手順を示しますElasticSearch 2.2.0およびElasticSearch-jdbc 2.2.そして、注意してください両方のバージョンが同じでなければなりません

java8のインストール後.....次のようにelasticsearch 2.2.0をインストールします

# cd /opt

# wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.2.0/elasticsearch-2.2.0.deb

# Sudo dpkg -i elasticsearch-2.2.0.deb

このインストール手順では、Elasticsearchが/ usr/share/elasticsearch /にインストールされ、その構成ファイルは/ etc/elasticsearchに配置されます。

ここで、設定ファイルで基本的な設定を行います。ここで/etc/elasticsearch/elasticsearch.ymlは設定ファイルで、変更するファイルを開くことができます

nano /etc/elasticsearch/elasticsearch.yml

クラスター名とノード名を変更します

例えば ​​:

# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
 cluster.name: servercluster
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
 node.name: vps.server.com
#
# Add custom attributes to the node:
#
# node.rack: r1

ファイルを保存してelasticsearchを開始します

 /etc/init.d/elasticsearch start

インストールされたESをテストするか、次を実行しない

 curl -XGET 'http://localhost:9200/?pretty'

あなたが次のようになったら、今すぐelasticsearchがインストールされています:)

{
  "name" : "vps.server.com",
  "cluster_name" : "servercluster",
  "version" : {
    "number" : "2.2.0",
    "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe",
    "build_timestamp" : "2016-01-27T13:32:39Z",
    "build_snapshot" : false,
    "lucene_version" : "5.4.1"
  },
  "tagline" : "You Know, for Search"
}

それではelasticsearch-JDBCをインストールしましょう。

http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.3.1/elasticsearch-jdbc-2.3.3.1-dist.Zip からダウンロードして、/ etc/elasticsearch /に同じものを抽出し、そこにも「logs」フォルダーを作成します(ログのパスは/ etc/elasticsearch/logsでなければなりません)

Mysqlに「ElasticSearchDatabase」という名前のデータベースが1つあり、その中に「test」という名前のテーブルフィールドid、name、emailがあります

cd /etc/elasticsearch

そして、次を実行します

echo '{
"type":"jdbc",
"jdbc":{

"url":"jdbc:mysql://localhost:3306/ElasticSearchDatabase",
"user":"root",
"password":"",
"sql":"SELECT id as _id, id, name,email FROM test",
"index":"users",
"type":"users",
"autocommit":"true",
"metrics": {
            "enabled" : true
        },
        "elasticsearch" : {
             "cluster" : "servercluster",
             "Host" : "localhost",
             "port" : 9300 
        } 
}
}' | Java -cp "/etc/elasticsearch/elasticsearch-jdbc-2.2.0.0/lib/*" -"Dlog4j.configurationFile=file:////etc/elasticsearch/elasticsearch-jdbc-2.2.0.0/bin/log4j2.xml" "org.xbib.tools.Runner" "org.xbib.tools.JDBCImporter"

mysqlデータがESにインポートされたかどうかを確認します

curl -XGET http://localhost:9200/users/_search/?pretty

すべてうまくいけば、すべてのmysqlデータをjson形式で見ることができ、エラーがある場合は/etc/elasticsearch/logs/jdbc.logファイルで見ることができます。

注意:

ESの古いバージョンでは、プラグインElasticsearch-river-jdbcが使用されていましたが、最新バージョンでは完全に非推奨であるため、使用しないでください。

私はあなたの時間を節約できることを願っています:)

それ以上の考えは大歓迎です

参照URL: https://github.com/jprante/elasticsearch-jdbc

41
Yaxita Shah

ES 5.xの時点で、彼らは logstash プラグインでこの機能をすぐに使用できます。

これにより、データベースからデータが定期的にインポートされ、ESサーバーにプッシュされます。

以下に示す単純なインポートファイル(これも here で説明)を作成し、logstashを使用してスクリプトを実行する必要があります。 Logstashは、このスクリプトをスケジュールに従って実行することをサポートしています。

# file: contacts-index-logstash.conf
input {
    jdbc {
        jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
        jdbc_user => "user"
        jdbc_password => "pswd"
        schedule => "* * * * *"
        jdbc_validate_connection => true
        jdbc_driver_library => "/path/to/latest/mysql-connector-Java-jar"
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
        statement => "SELECT * from contacts where updatedAt > :sql_last_value"
    }
}
output {
    elasticsearch {
        protocol => http
        index => "contacts"
        document_type => "contact"
        document_id => "%{id}"
        Host => "ES_NODE_Host"
    }
}
# "* * * * *" -> run every minute
# sql_last_value is a built in parameter whose value is set to Thursday, 1 January 1970,
# or 0 if use_column_value is true and tracking_column is set

Mysql jarはmaven here からダウンロードできます。

このスクリプトの実行時にESにインデックスが存在しない場合、インデックスは自動的に作成されます。 elasticsearchへの通常のポストコールのように

60
Nikhil Sahu

Logstash JDBCプラグインがジョブを実行します。

input {
  jdbc { 
    jdbc_connection_string => "jdbc:mysql://localhost:3306/testdb"
    jdbc_user => "root"
    jdbc_password => "factweavers"
    # The path to our downloaded jdbc driver
    jdbc_driver_library => "/home/comp/Downloads/mysql-connector-Java-5.1.38.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    # our query
    schedule => "* * * *"
    statement => "SELECT" * FROM testtable where Date > :sql_last_value order by Date"
    use_column_value => true
    tracking_column => Date
}

output {
  stdout { codec => json_lines }
  elasticsearch {
  "hosts" => "localhost:9200"
  "index" => "test-migrate"
  "document_type" => "data"
  "document_id" => "%{personid}"
  }
}
3
Ijaz Ahmad Khan

より簡単にするために、セットアップするPHPクラスを作成しました MySQL with Elasticsearch 。 My Classを使用すると、MySQLデータをelasticsearchで同期したり、全文検索を実行したりできます。 SQLクエリを設定するだけで、後はクラスが自動的に行います。

1
Ahmed Khan