web-dev-qa-db-fra.com

Transfert de données de SQL Server au nœud ElasticSearch

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

9
andy

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"
         } 
     }
  • Créez un fichier jdb_sqlserver.ps1 avec ce contenu:
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
  • Exécutez jdb_sqlserver.ps1 avec powershell

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/

13
Fl4v

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:

  1. Nous pouvons prendre beaucoup plus de temps pour rassembler toutes les données que nous voulons insérer dans ES sans que nos clients aient à attendre.
  2. Si nous voulons un jour réindexer ES avec plus de données/différentes, nous pouvons simplement remettre cette clé primaire dans la file d’attente et celle-ci va rassembler les données à nouveau.
  3. Si jamais ES était arrêté pour maintenance, les données existeraient toujours dans la file d'attente et seraient récupérées lorsque ES était de nouveau en ligne.
4
jhilden

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.

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

0
banavalikar