适用于SQL Server 2012企业的ElasticSearch JDBC River

时间:2014-06-13 16:06:16

标签: jdbc elasticsearch

我在使用JDBC Driver for ElasticSearch River从SQL Server 2012企业提供数据时遇到问题。

这是我的设置:

  • 操作系统:Windows 2008 R2 X64
  • ES:1.2.1
  • JDK:jdk-7u60-windows-x64
  • JRE:jre-7u60-windows-x64
  • 用于SQL Server的Microsoft JDBC驱动程序4.0

当我运行jdbc将数据输入ES时,我得到了以下异常:


C:\Users\madhavan.ram>curl -XPUT 'localhost:9200/orders/order/_meta' -d' {"type": "jdbc", "jdbc": {"driver ": "com.microsoft.sqlserver.jdbc.SQLServerDriver","url": "jdbc:sqlserver://localhost:1433;databaseName=adventureworks", "user":"sa","password":"password", "sql": "SELECT * From [orders]","index": "orders","type": "order","bulk_size": 100,"max_retries": 5,"max_retries_wait": "30s","max_bulk_requests": 5,"bulk_flush_interval": "5s"}}' curl: (3) [globbing] nested brace in column 83 curl: (6) Could not resolve host: * curl: (6) Could not resolve host: From curl: (3) [globbing] bad range in column 6


看起来MSSQL 4.0驱动程序不支持JDK 1.7。但是如果我将JAVA_Home配置为JDK 1.6 .. ES在Windows上不起作用。有没有更好的方法将数据从SQL Server 2012加载到ElasticSearch?

2 个答案:

答案 0 :(得分:1)

此问题相当陈旧,但现在可以使用 SQL Server Windows 上轻松设置弹性搜索

Rivers已被弃用:

https://www.elastic.co/blog/deprecating-rivers

所以你应该使用elasticsearch-jdbc插件:

https://github.com/jprante/elasticsearch-jdbc

使用JDBC导入器在馈送器模式下进行设置。

基本上,一旦您安装弹性搜索 elasticsearch-jdbc 插件:

  1. http://www.microsoft.com/en-us/download/details.aspx?id=11774

  2. 下载并安装JDBC SQL Server驱动程序
  3. 创建 jdbc_sqlserver.json

    {
       "type":"jdbc",
       "jdbc":{
          "url":"jdbc:sqlserver://localhost:1433;databaseName=test",
          "user":"test",
          "password":"test",
          "sql":"SELECT id as _id, id, name FROM planets",
          "index":"planets",
          "type":"planet",
          "autocommit":"true"
       }
    }
    
  4. 使用以下内容创建 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
    }
    $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
    
  5. Powershell

  6. 运行它
  7. .\jdbc_sqlserver.ps1

  8. 在这里描述了一个完整的设置: http://r2d2.cc/2015/08/05/elastic-search-on-windows-with-mysql-sql-server-2014-and-import-feeder/

答案 1 :(得分:0)

我假设您已经安装了jdbc插件,如果没有,请按照此处的说明操作:https://github.com/jprante/elasticsearch-river-jdbc实际上您可以在此页面中找到设置河流所需的几乎所有内容。

河流被放入一个名为_river的特殊索引,而不是您的文档索引/订单。

因此,如果您使用Sense(现在在Marvel中),下面的内容将起作用:

PUT /_river/glacgrp_river/_meta
{
"type":"jdbc",
"jdbc": {
    "driver":"com.microsoft.sqlserver.jdbc.SQLServerDriver", 
    "url":"jdbc:sqlserver://127.0.0.1:1433;databaseName=SAMLTD",
    "user":"sa","password":"sa",
    "sql":"select RTRIM(LTRIM(ACCTGRPCOD)) as id, RTRIM(LTRIM(ACCTGRPDES)) as descp from [GLACGRP]",
    "strategy" : "poll",
    "schedule":"0/10 * * * * ?",
    "index":"accountgroup",
    "type":"ag",
    "maxbulkactions":500

} }

您可以根据需要更改数据库名称,表名和其他选项。

在此之后,您可以使用GET / _river / your_river_name / _status来检查河流是否已经设置。

然后重新启动ES,您的河流应该开始自动从数据库中获取数据并将其编入索引!

希望这有帮助