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

Posted

技术标签:

【中文标题】用于 SQL Server 2012 企业版的 ElasticSearch JDBC River【英文标题】:ElasticSearch JDBC River for SQL Server 2012 enterprise 【发布时间】:2014-06-13 16:06:15 【问题描述】:

我在使用 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 Microsoft JDBC Driver 4.0 for SQL Server

当我运行 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?

【问题讨论】:

【参考方案1】:

这个问题已经很老了,但现在 Elastic Search 可以通过 SQL ServerWindows 上轻松设置。

Rivers 已被弃用:

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

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

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

并在 feeder 模式下使用 JDBC importer 进行设置。

基本上,一旦您安装了 Elastic Searchelasticsearch-jdbc 插件:

    从http://www.microsoft.com/en-us/download/details.aspx?id=11774下载并安装 JDBC SQL Server 驱动程序

    创建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"
       
    
    

    使用以下内容创建 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
    

    Powershell 运行它

    .\jdbc_sqlserver.ps1

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

【讨论】:

【参考方案2】:

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

河流被放入名为 _river 的特殊索引中,而不是您的文档索引 /orders。

因此,如果您使用 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,你的河流应该开始自动从数据库中获取数据并索引它们!

希望对你有帮助

【讨论】:

"took":30,"timed_out":false,"_shards":"total":5,"successful":5,"failed":0,"hits": "total":2,"max_score":1.0,"hits":["_index":"orders","_type":"order","_id":"s21t3YGNSAO7c-pA2Eo9pA","_score":1.0, "_source":"type": "jdbc", "jdbc": "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver","url": "jdbc:sqlserver://localhost:1433;Trusted_Connection =yes;databaseName=adventureworks","sql":"select * from [orders]","poll":"10m","strategy":"simple","index":"orders","type":" order","bulk_size": 100,"max_retries": 5,"max_retries_wait": "30s","max_bulk_requests": 5,"bulk_flush_interval": "5s" 你成功设置河流了吗?使用 GET /_river/your_river_name/_status 在此处检查和发布。欢呼 另外,请注意 jdbc 插件不再支持“poll”参数。所以你不能使用“poll”:“10m”。要指定您希望从数据库中获取数据的频率,请改用“schedule”参数。顺便说一句,bulk_size 和 bulk_flush_interval 也是过时的参数。仔细阅读github.com/jprante/elasticsearch-river-jdbc。

以上是关于用于 SQL Server 2012 企业版的 ElasticSearch JDBC River的主要内容,如果未能解决你的问题,请参考以下文章

将数据库从 SQL Server 2012 转移到 SQL Server 2008 [关闭]

win8 装的SQL Server2012 企业版

Sql server2016有几个版本

用于连接到 Oracle Directory Server 企业版的 C# 脚本

windows server 2008企业版的iso镜像文件去那里下载?急!

求一个windows server 2008 R2 企业版的产品密钥?