Elasticsearch JDBC导入器未正确导入条目

时间:2016-02-22 15:11:47

标签: jdbc elasticsearch

具有以下映射:

curl -XPUT 'localhost:9200/borrador' -d '{
  "mappings": {
    "item": {
       "dynamic": "strict",
       "properties" : {
            "body" : { "type": "string"  },
            "source_id" : { "type": "integer"  },
}}}}'

我尝试使用Elasticsearch-JDBC importer将我的数据库导入Elasticsearch。 这是我使用的脚本:

#!/bin/sh

bin=/usr/share/elasticsearch/elasticsearch-jdbc-2.1.1.2/bin
lib=/usr/share/elasticsearch/elasticsearch-jdbc-2.1.1.2/lib
echo "Indexando base de datos..."
echo '{
    "type" : "jdbc",
    "jdbc" : {
        "url" : "jdbc:mydbip/mydbname",
        "user" : "username",
        "password" : "pw",
        "sql" : "select source_id, body, id as _id from table_name",
        "index" : "borrador",
        "type" : "item"
    }
}' | java \
       -cp "${lib}/*" \
       -Dlog4j.configurationFile=${bin}/log4j2.xml \
       org.xbib.tools.Runner \
       org.xbib.tools.JDBCImporter 

表的大多数行都已正确编入索引,但该数据库中的以下行给出了一个错误,并且它没有正确编制索引: http://i.imgur.com/UPEfRS0.png

这是出现的错误:

  

[错误] [org.xbib.elasticsearch.helper.client.BulkTransportClient] [elasticsearch [进口商] [听者] [T#1]]   批量[957]失败,1个失败的项目,失败消息=失败   批量执行:       [3499]:index [borrador],type [item],id [14327140],message [MapperParsingException [未能解析[body]];嵌套:   IllegalArgumentException [未知属性[记录]];]

正如您在本案中所看到的,此特定行具有json format字符串({"format":"MS Excel","price":"750","records":"577","recordType":"records"}<!-- com -->),而不是具有正确索引的其他条目的普通字符串。

发生了什么事?我想将其存储为普通字符串。这是映射的问题,因为它将其作为json或其他东西阅读?即使我删除了"dynamic": "strict",或整个映射,它仍然会给我错误。提前谢谢。

1 个答案:

答案 0 :(得分:2)

默认情况下,JDBC导入程序会尝试检测数据中的JSON字符串并解析它们。您需要使用detect_json设置修改导入程序的配置,并将其设置为false

{
    "type" : "jdbc",
    "jdbc" : {
        "url" : "jdbc:mydbip/mydbname",
        "user" : "username",
        "password" : "pw",
        "sql" : "select source_id, body, id as _id from table_name",
        "index" : "borrador",
        "type" : "item",
        "detect_json": false            <--- add this
    }
}