具有以下映射:
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
表的大多数行都已正确编入索引,但该数据库中的以下行给出了一个错误,并且它没有正确编制索引:
这是出现的错误:
[错误] [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",
或整个映射,它仍然会给我错误。提前谢谢。
答案 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
}
}