2016-03-20 23 views
8

stavo usando Elastic Cerca 1.7 versione per la mia applicazione e utilizzando il concetto del fiume mi stava riempiendo i dati da SQL Server per elasticsearch utilizzando il seguente articolo: https://www.pluralsight.com/blog/it-ops/elasticsearch-and-sql-serverdati da SQL Server per elasticsearch Nodo

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" 

} 

} 

Ma nella documentazione di elasticsearch 2.0 si dice che i fiumi sono deprecati .IS c'è un modo migliore per copiare i dati da SQL Server ad elastico con elasticsearch 2.0

ogni codice di esempio di alternativa sarebbe veramente utile

Grazie

+0

Questa risposta potrebbe aiutare: http://stackoverflow.com/questions/34477095/elasticsearch-replication-of-other-system-data/34477639#34477639 – Val

risposta

11

si dovrebbe dare un'occhiata a questo: https://github.com/jprante/elasticsearch-jdbc/wiki/jdbc-plugin-feeder-mode-as-an-alternative-to-the-deprecated-elasticsearch-river-api

EDIT: Questo è ciò che ho fatto, passo dopo passo, di sincronizzare i dati da SQL Server a elasticsearch, senza il fiume deprecato. L'ho fatto da zero. Potresti aver già fatto alcuni di questi passaggi se hai già configurato un fiume.

{ "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" 
     } 
    } 
  • creare jdb_sqlserver.file di ps1 con questo contenuto:
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 
  • Eseguire jdb_sqlserver.ps1 con PowerShell

Questo articolo è stato molto utile: http://r2d2.cc/2015/08/05/elastic-search-on-windows-with-mysql-sql-server-2014-and-import-feeder/

+1

Sebbene ciò possa teoricamente rispondere alla domanda, [sarebbe preferibile] (// meta.stackoverflow.com/q/8259) includere qui le parti essenziali della risposta e fornire il link per riferimento. –

+0

Grazie ragazzi, ho appena modificato la mia risposta. – Fl4v

3

Il nostro piano per questo è quello quando scriviamo il record in SQL; quindi prendiamo la chiave primaria e la mettiamo in un sistema di accodamento (RabbitMQ nel nostro caso). Quindi, c'è un consumatore in quella coda (o molti consumatori) che estrae i dati da SQL e li inserisce in ES.

Avere una coda intermedia ci dà una serie di vantaggi:

  1. Possiamo prendere molto più tempo per raccogliere tutti i dati che vogliamo inserire in ES senza i nostri clienti dover attendere
  2. Se vogliamo sempre reindicizzare ES con più/dati diversi, possiamo semplicemente rimettere la chiave primaria in coda e raccogliere nuovamente i dati.
  3. Se ES è stato interrotto per manutenzione, i dati sarebbero ancora presenti nella coda e sarebbero stati recuperati quando ES era di nuovo in linea.
+0

come si fa a rilevare le modifiche da SQL server? – SHM

0

Se lei si riferisce questo post ora (come me), ElasticSearch si è spostato ed è presente un problema di compatibilità con il client di avvio a molla utilizzato per questo, che non supporta ES 5.xx Pertanto, è necessario creare il proprio client di avvio a molla compatibile/attendere che ES fornisca il supporto/utilizzare una soluzione alternativa per collegare SQL Server a ES.

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

Problemi correlati