2016-03-20 8 views
8

I Elasticsearch Version 1.7 für meine Anwendung wurde mit und durch das Konzept des Flusses mit i wurde, um die Daten von SQL Server zu Elasticsearch mit dem folgenden Artikel füllt: https://www.pluralsight.com/blog/it-ops/elasticsearch-and-sql-serverDatenübertragung von SQL Server zu Elasticsearch Knoten

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" 

} 

} 

Aber in der Dokumentation von Elasticsearch 2.0 heißt es die Flüsse .ist es eine bessere Art und Weise veraltet sind die Daten von SQL Server zu elastisch mit Elasticsearch 2,0

jedes Codebeispiel Alternative zu kopieren wäre wirklich hilfreich

Dank

+0

Diese Antwort helfen könnten: http://stackoverflow.com/questions/34477095/elasticsearch-replication-of-other-system-data/34477639#34477639 – Val

Antwort

11

Sie sollten einen Blick auf diese: https://github.com/jprante/elasticsearch-jdbc/wiki/jdbc-plugin-feeder-mode-as-an-alternative-to-the-deprecated-elasticsearch-river-api

EDIT: Das ist, was ich tat, Schritt für Schritt, Daten von SQL Server zu Elasticsearch synchronisieren, ohne die veralteten Fluss. Ich habe es von Grund auf neu gemacht. Möglicherweise haben Sie bereits einige dieser Schritte ausgeführt, wenn Sie bereits einen Fluss eingerichtet haben.

{ "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 erstellen.ps1-Datei mit folgendem Inhalt:
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 
  • Execute jdb_sqlserver.ps1 mit Power

Dieser Artikel war sehr hilfreich: http://r2d2.cc/2015/08/05/elastic-search-on-windows-with-mysql-sql-server-2014-and-import-feeder/

+1

Während dies theoretisch die Frage beantworten könnte, [wäre es vorzuziehen] (// meta.stackoverflow.com/q/8259), die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. –

+0

Danke Leute, ich habe gerade meine Antwort bearbeitet. – Fl4v

3

Unser Plan dafür ist, dass, wenn wir den Datensatz zu SQL schreiben; Dann nehmen wir den Primärschlüssel und legen ihn in ein Warteschlangensystem (RabbitMQ in unserem Fall). Dann gibt es einen Verbraucher auf dieser Warteschlange (oder viele Verbraucher), die die Daten aus SQL extrahiert und fügt es in ES.

eine Zwischenwarteschlange zu haben, gibt uns eine Reihe von Vorteilen:

  1. wir viel mehr Zeit in Anspruch nehmen können alle Daten, die wir in ES einfügen wollen sammeln, ohne unsere Kunden
  2. zu warten, wenn wir wollen immer wieder Index eS mit mehr/andere Daten können wir diese Primärschlüssel in die Warteschlange stellen gerade zurück und es wird wieder die Daten sammeln.
  3. Wenn ES waren immer nach unten maintance für die Daten noch in der Warteschlange existieren würden und bis abgeholt zurück, wenn ES wieder online war.
+0

, wie Sie Änderungen von SQL erkennen Sie Server? – SHM

0

Wenn Sie diesen Artikel jetzt beziehen (wie ich), ElasticSearch ist weitergegangen und es gibt ein Kompatibilitätsproblem mit dem Springboot-Client, der dafür verwendet wird, der ES 5.xx nicht unterstützt Sie müssen also Ihren eigenen Spring Boot-Client erstellen, der kompatibel ist/darauf warten, dass ES die Unterstützung bietet/eine alternative Lösung zur Verbindung von SQL Server mit ES verwenden.

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