2016-03-20 2 views
8

Я использую Elastic Search 1.7 версию для моего приложения и с использованием концепции реки я заполнялся данными из SQL Server для ElasticSearch с помощью следующей статьи: https://www.pluralsight.com/blog/it-ops/elasticsearch-and-sql-serverданных из SQL Server для ElasticSearch узла

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" 

} 

} 

Но в документации упругого поиска 2.0 он говорит река осуждается .is есть ли лучший способ для копирования данных из SQL Server упругого эластичного поиска 2,0

любого пример коды альтернативы был бы действительно полезно

Thanks

+0

Этот ответ может помочь: http://stackoverflow.com/questions/34477095/elasticsearch-replication-of-other-system-data/34477639#34477639 – Val

ответ

11

Вы должны смотреть на это: https://github.com/jprante/elasticsearch-jdbc/wiki/jdbc-plugin-feeder-mode-as-an-alternative-to-the-deprecated-elasticsearch-river-api

EDIT: Это то, что я сделал, шаг за шагом, чтобы синхронизировать данные из SQL Server в ElasticSearch, без устаревшей реки. Я сделал это с нуля. Возможно, вы уже сделали некоторые из этих шагов, если вы уже создали реку.

  • Скачать JDBC импортер для вашей версии elasticsearch: https://github.com/jprante/elasticsearch-jdbc#compatiblity-matrix
  • разархивировать в папку elasticsearch. Обратите внимание, что вы можете разархивировать его в любом месте, но не помещайте его в {elasticsearch}/plugin или, поскольку он не является плагином, это приведет к сбою elasticsearch при запуске.
  • Загрузить драйверы JDBC от Microsoft: https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774 (я загрузил версию «.exe»)
  • Выполните его. Он создает распакованную папку. Откройте его и скопируйте sqljdbc4.jar, sqljdbc41.jar и sqljdbc42.jar в {elasticsearch-jdbc}/lib (будьте осторожны, чтобы не копировать sqljdbc.jar)
  • Включить соединение TCP/IP с SQL Server (см., Например, http://r2d2.cc/2015/08/05/the-tcpip-connection-to-the-host-localhost-port-1433-has-failed-microsoft-sql-server-2014/)
  • В каталоге Elasticsearch создать каталог {elasticsearch} \ Bin \ фидер
  • Создать файл jdbc_sqlserver.json с этим содержимым:
{ "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.ps1 файл с таким содержанием:
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 
  • Выполнить jdb_sqlserver.ps1 с PowerShell

Эта статья была очень полезна: http://r2d2.cc/2015/08/05/elastic-search-on-windows-with-mysql-sql-server-2014-and-import-feeder/

+1

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (// meta.stackoverflow.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. –

+0

Спасибо, ребята, я только что отредактировал свой ответ. – Fl4v

3

Наш план заключается в том, что когда мы записываем запись в SQL; затем мы берем первичный ключ и помещаем его в систему очередей (RabbitMQ в нашем случае). Затем в этой очереди есть потребитель (или многие потребители), который извлекает данные из SQL и вставляет их в ES.

Имея промежуточную очередь дает нам ряд преимуществ:

  1. Мы можем занять много больше времени, чтобы собрать все данные, которые мы хотим вставить в ES без наших клиентов, чтобы ждать
  2. If мы когда-либо хотели бы повторно индексировать ES с более/разными данными, мы можем просто вернуть этот первичный ключ в очередь, и он снова соберет данные.
  3. Если бы ES никогда не работали, данные все равно существовали бы в очереди и были бы выбраны, когда ES снова будет в сети.
+0

как вы обнаружить изменения из SQL сервер? – SHM

0

Если вы имеете в виду этот пост в настоящее время (как я), ElasticSearch переместился, и есть проблема совместимости с загрузочным клиентом Spring, который используется для этого, который не поддерживает ES 5.xx Таким образом, вам нужно создать собственный клиент загрузки Spring, который совместим/дожидается ES, чтобы предоставить поддержку/использовать альтернативное решение для подключения SQL Server к ES.

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

Смежные вопросы