J'utilisais la version Elastic Search 1.7 pour mon application et en utilisant le concept de rivière, je remplissais les données de SQL Server vers ElasticSearch en utilisant l'article suivant: 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"
}
}
Mais dans la documentation de la recherche élastique 2.0, il est indiqué que les rivières sont obsolètes. Existe-t-il un meilleur moyen de copier les données de SQL Server vers élastique avec la recherche élastique 2.0?
N'importe quel exemple de code d'alternative serait vraiment utile
Merci
Vous devriez jeter un oeil à ceci: https://github.com/jprante/elasticsearch-jdbc/wiki/jdbc-plugin-feeder-mode-as-an-alternative-to-the-deprecated-elasticsearch-river- api
EDIT: C’est ce que j’ai fait, étape par étape, pour synchroniser les données de SQL Server vers ElasticSearch, sans le fleuve obsolète. Je l'ai fait à partir de zéro. Vous avez peut-être déjà effectué certaines de ces étapes si vous avez déjà créé une rivière.
{ "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"
}
}
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
Cet article a été très utile: http://r2d2.cc/2015/08/05/elastic-search-on-windows-with-mysql-sql-server-2014-and-import-feeder/
Notre plan pour cela est que lorsque nous écrivons l'enregistrement en SQL; nous prenons ensuite la clé primaire et la mettons dans un système de file d’attente (RabbitMQ dans notre cas). Ensuite, il y a un consommateur dans cette file d'attente (ou plusieurs consommateurs) qui extrait les données hors SQL et les insère dans ES.
Avoir une file d'attente intermédiaire nous donne un certain nombre d'avantages:
Si vous faites maintenant référence à ce message (comme moi), ElasticSearch a évolué et il existe un problème de compatibilité avec le client d'amorçage Spring utilisé à cette fin, qui ne prend pas en charge ES 5.x.x. Vous devez donc créer votre propre client de démarrage de printemps compatible/attendre que ES fournisse le support/utiliser une solution alternative pour relier SQL Server à ES.