我正在尝试为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
}
答案 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