Река Elasticsearch — java.lang.String нельзя преобразовать в java.util.Map

Я пытаюсь создать эластичную поисковую реку для моей MongoDB. Я использую плагины elasticsearch-mapper-attachments и elasticsearch-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
}

person dman    schedule 08.01.2015    source источник


Ответы (1)


Починил это. Я передавал string в поле index:

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

Вместо этого мне нужно было передать 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

person dman    schedule 08.01.2015