web-dev-qa-db-ja.com

SQL ServerからElasticSearchへのデータ転送Node

私はアプリケーションにElastic Search 1.7バージョンを使用しており、riverの概念を使用して、次の記事を使用してSQL ServerからElasticSearchにデータを入力していました: https://www.pluralsight.com/blog/it -ops/elasticsearch-and-sql-server

URL: POST http://localhost:9200/_river/my_jdbc_river/_meta

JSON:

{

"type":"jdbc",

"schedule" : "0 0-59 0-23 ? * *",

"jdbc": {

"driver":"com.Microsoft.sqlserver.jdbc.SQLServerDriver",

"url":"jdbc:sqlserver://127.0.0.1:1433;databaseName=MyDatabase",

"user":"my_db_user","password":"password",

"sql":"select ID as _id, FirstName, LastName, DateOfBirth from People",

"index":"people",

"type":"person"

}

}

しかし、Elastic Search 2.0のドキュメントでは、川は廃止されていると記載されています。ElasticSearch 2.0を使用してSQL ServerからElasticにデータをコピーするより良い方法はありますか?

代替のコードサンプルは本当に役に立ちます

ありがとう

10
andy

これを見てください: https://github.com/jprante/elasticsearch-jdbc/wiki/jdbc-plugin-feeder-mode-as-an-alternative-to-the-deprecated-elasticsearch- river-api

編集:これは、廃止予定のリバーなしでSQL ServerからElasticSearchにデータを同期するために、私が段階的に行ったことです。一からやりました。すでに川を設定している場合は、これらの手順のいくつかをすでに行っている可能性があります。

    {  "type":"jdbc",
      "jdbc":{ 
         "url":"jdbc:sqlserver://localhost:1433;databaseName=test", 
         "user":"test",
         "password":"test",
         "sql":"SELECT id as _id, id, name,email FROM test",
         "index":"users",
         "type":"user", 
         "autocommit":"true"
         } 
     }
  • 次の内容でjdb_sqlserver.ps1ファイルを作成します。
function Get-PSVersion {
     if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"}
}
$powershell = Get-PSVersion
if($powershell.Major -le 2 ){
 Write-Error "Oh, so sorry, this script requires Powershell 3 (due to convertto-json)"
 exit
}
if((Test-Path env:\Java_HOME) -eq $false){
 Write-Error "Environment variable Java_HOME must be set to your Java home"
 exit
}
curl -XDELETE "http://localhost:9200/planets"

$DIR = "D:\programs\elasticsearch\plugins\elasticsearch-jdbc-1.7.0.1\"
$FEEDER_CLASSPATH="$DIR\lib"
$FEEDER_LOGGER="file://$DIR\bin\log4j2.xml"

Java -cp "$FEEDER_CLASSPATH\*" -"Dlog4j.configurationFile=$FEEDER_LOGGER" "org.xbib.tools.Runner" "org.xbib.tools.JDBCImporter" jdbc_sqlserver.json
  • PowerShellでjdb_sqlserver.ps1を実行する

この記事は非常に役に立ちました: http://r2d2.cc/2015/08/05/elastic-search-on-windows-with-mysql-sql-server-2014-and-import-feeder/ =

15
Fl4v

このための計画は、レコードをSQLに書き込むときです。次に、主キーを取得してキューシステムに入れます(この場合はRabbitMQ)。次に、SQLからデータを抽出してESに挿入するコンシューマー(または多くのコンシューマー)があります。

中間キューがあると、いくつかの利点があります。

  1. お客様が待たなくても、ESに挿入するすべてのデータを収集するために、さらに多くの時間をかけることができます。
  2. ESをより多く/異なるデータで再インデックス化したい場合は、その主キーをキューに戻すだけで、データが再び収集されます。
  3. ESがメンテナンスのためにダウンした場合でも、データは引き続きキューに存在し、ESがオンラインに戻ったときにピックアップされます。
4
jhilden

今この投稿を参照している場合(私のように)、ElasticSearchは先に進んでおり、これに使用されているスプリングブートクライアントとの互換性の問題があり、ES 5.x.xをサポートしていません。そのため、互換性のある独自のスプリングブートクライアントを作成する必要があります。ESがサポートを提供するのを待つ/ ESにSQL Serverをブリッジする代替ソリューションを使用する必要があります。

参照: https://github.com/spring-projects/spring-data-elasticsearch/wiki/Spring-Data-Elasticsearch---Spring-Boot---version-matrix

0
banavalikar