2016-03-20 25 views
8

używałem Elastic Search 1.7 w wersji dla mojej aplikacji i za pomocą pojęcia rzeki byłem wypełnienie danych z SQL Server do ElasticSearch stosując następujący artykuł: https://www.pluralsight.com/blog/it-ops/elasticsearch-and-sql-serverdanych z SQL Server do ElasticSearch Węzła

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" 

} 

} 

Ale w dokumentacji elastycznego poszukiwaniu 2.0 mówi rzeki są przestarzałe .Is istnieje lepszy sposób, aby skopiować dane z SQL Server elastyczna z elastycznego poszukiwaniu 2,0

Wszelkie przykładowy kod alternatywą byłoby bardzo pomocne

Dzięki

+0

Ta odpowiedź może pomóc: http://stackoverflow.com/questions/34477095/elasticsearch-replication-of-other-system-data/34477639#34477639 – Val

Odpowiedz

11

Trzeba spojrzeć na to: https://github.com/jprante/elasticsearch-jdbc/wiki/jdbc-plugin-feeder-mode-as-an-alternative-to-the-deprecated-elasticsearch-river-api

EDIT: To, co zrobiłem, krok po kroku, aby zsynchronizować dane z SQL Server do ElasticSearch bez nieaktualnych rzeki. Zrobiłem to od zera. Być może już wykonałeś niektóre z tych kroków, jeśli już ustawiłeś rzekę.

{ "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" 
     } 
    } 
  • Tworzenie jdb_sqlserver.PS1 plik z tej zawartości:
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 z PowerShell

Ten artykuł był bardzo pomocny: http://r2d2.cc/2015/08/05/elastic-search-on-windows-with-mysql-sql-server-2014-and-import-feeder/

+1

Chociaż może to teoretycznie odpowiedzieć na pytanie, [byłoby lepiej] (// meta.stackoverflow.com/q/8259), aby uwzględnić istotne części odpowiedzi tutaj, i podać link dla odniesienia. –

+0

Dziękuję, właśnie zredagowałem swoją odpowiedź. – Fl4v

3

Nasz plan polega na tym, że kiedy piszemy rekord do SQL; następnie zabieramy klucz podstawowy i umieszczamy go w systemie kolejkowym (RabbitMQ w naszym przypadku). Następnie w tej kolejce (lub wielu konsumentach) znajduje się konsument, który wyodrębnia dane z SQL i wstawia je do ES.

Mając kolejkę pośredni daje nam szereg korzyści:

  1. Możemy zająć dużo więcej czasu, aby zebrać wszystkie dane chcemy wstawić do ES bez nasi klienci konieczności oczekiwania
  2. If kiedykolwiek chcemy ponownie zindeksować ES z większą/inną ilością danych, możemy przywrócić klucz podstawowy z powrotem do kolejki i ponownie zgromadzimy dane.
  3. Jeśli ES był kiedykolwiek wyłączony z powodu konserwacji, dane nadal istniałyby w kolejce i zostałyby pobrane z powrotem, gdy ES powróciłby do trybu online.
+0

jak można wykryć zmiany z SQL serwer? – SHM

0

Jeśli odnosisz ten post teraz (jak ja), ElasticSearch został przeniesiony i występuje problem ze zgodnością ze sprężynowym klientem rozruchowym, który jest używany do tego, który nie obsługuje ES 5.xx Musisz więc stworzyć własnego klienta rozruchowego, który będzie kompatybilny/poczekać, aż ES udostępni wsparcie/użyje alternatywnego rozwiązania do połączenia SQL Server z ES.

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