从SQL Server到ElasticSearch节点的数据传输

时间:2016-03-20 07:38:11

标签: elasticsearch sql-server-2014

我在我的应用程序中使用Elastic Search 1.7版本,并使用river i的概念,使用以下文章将数据从SQL Server填充到ElasticSearch: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"

}

}

但是在弹性搜索2.0的文档中,它说河流已被弃用。有没有更好的方法将数据从SQL Server复制到弹性搜索2.0

替代的任何代码示例都非常有用

由于

3 个答案:

答案 0 :(得分:13)

你应该看看这个:https://github.com/jprante/elasticsearch-jdbc/wiki/jdbc-plugin-feeder-mode-as-an-alternative-to-the-deprecated-elasticsearch-river-api

编辑: 这就是我一步一步地将数据从SQL Server同步到ElasticSearch,而没有弃用的河流。我是从头开始做的。如果您已经设置了河流,则可能已经完成了其中一些步骤。

  • 使用以下内容创建jdb_sqlserver.ps1文件:
    {  "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"
         } 
     }
  • 使用powershell
  • 执行jdb_sqlserver.ps1

这篇文章非常有用:http://r2d2.cc/2015/08/05/elastic-search-on-windows-with-mysql-sql-server-2014-and-import-feeder/

答案 1 :(得分:4)

我们的计划是当我们将记录写入SQL时;然后我们接受主键并将其放入排队系统(在我们的例子中为RabbitMQ)。然后,该队列(或许多消费者)上有一个消费者从SQL中提取数据并将其插入ES。

拥有一个中间队列给我们带来了许多好处:

  1. 我们可以花更多的时间收集我们想要插入ES的所有数据而无需客户等待
  2. 如果我们想要使用更多/不同的数据重新索引ES,我们可以将该主键放回队列中,它将再次收集数据。
  3. 如果ES因维护不足而导致数据仍然存在于队列中,并且当ES重新上线时,数据将被重新启动。

答案 2 :(得分:0)

如果你现在正在推荐这篇文章(像我一样),ElasticSearch继续前进,并且用于此的弹簧启动客户端存在兼容性问题,不支持ES 5.x.x.因此,您必须创建自己的Spring引导客户端,该客户端兼容/等待ES提供支持/使用备用解决方案将SQL Server桥接到ES。

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