Elasticsearch River - java.lang.String无法强制转换为java.util.Map

时间:2015-01-08 17:57:00

标签: java mongodb elasticsearch elasticsearch-plugin

我正在尝试为MongoDB创建一个弹性搜索河。我正在使用elasticsearch-mapper-attachmentselasticsearch-river-mongodb个插件。我遇到的问题是我收到有关java.lang.String cannot be cast to java.util.Map

的投诉

这是我创建的索引:

{
    "type": "mongodb",
    "mongodb": {
        "collection": "config_files", 
        "db": "tore_dev"
    },
    "index": "config_files" 
}

这是命令:

one@old-dash ~/river $ curl -X PUT "localhost:9200/_river/config_files/_meta" -d @create.json |  python -m json.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   220  100    84  100   136   3032   4909 --:--:-- --:--:-- --:--:--  5230
{
    "_id": "_meta", 
    "_index": "_river", 
    "_type": "config_files", 
    "_version": 1, 
    "created": true
}
one@old-dash ~/river $ 

以下是它的状态:

one@old-dash ~/river $ curl localhost:9200/_river/config_files/_status |  python -m json.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   640  100   640    0     0  30247      0 --:--:-- --:--:-- --:--:-- 33684
{
    "_id": "_status", 
    "_index": "_river", 
    "_source": {
        "error": "CreationException[Guice creation errors:\n\n1) Error injecting constructor, java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map\n  at org.elasticsearch.river.mongodb.MongoDBRiver.<init>(Unknown Source)\n  while locating org.elasticsearch.river.mongodb.MongoDBRiver\n  while locating org.elasticsearch.river.River\n\n1 error]; nested: ClassCastException[java.lang.String cannot be cast to java.util.Map]; ", 
        "node": {
            "id": "57f4LnVMSn2xDlo1Es0meQ", 
            "name": "Wicked", 
            "transport_address": "inet[/10.1.23.69:9300]"
        }
    }, 
    "_type": "config_files", 
    "_version": 1, 
    "found": true
}

1 个答案:

答案 0 :(得分:0)

修正了它。我将string传递到index字段:

    ...
    "index": "config_files" 
    ....

相反,我需要pass an object进入索引字段:

{
    "type": "mongodb",
    "mongodb": {
        "collection": "config_files", 
        "db": "tore_dev"
    },
    "index": {
        "name": "mongo_index",
        "type": "config_files"
    }
}

该对象可能在Elasticsearch内部结构中表示为java.util.Map,因为它们描述了objects

  

在其他语言中称为散列,散列映射,字典或关联数组。

因此,这解释了错误消息java.lang.String cannot be cast to java.util.Map