此问题似乎与在 couchbase 中使用 XDCR 有关。如果我有以下简单的对象
1: { "name" : "Mark", "age" : 30}
2: { "name" : "Bill", "age" : "forty"}
并设置一个elasticsearch索引
curl -XPUT 'http://localhost:9200/test/couchbaseDocument/_mapping' -d '
{
"couchbaseDocument" : {
"dynamic_templates": [
{
"store_generic": {
"match": "*",
"mapping": {
"store": "yes"
}
}
}
]
}
}'
然后我可以使用 REST API 将这两个对象添加到该索引
curl -XPUT localhost:9200/test/couchbaseDocument/1 -d '{
"name" : "Mark",
"age" : 30
}'
curl -XPUT localhost:9200/test/couchbaseDocument/2 -d '{
"name" : "Bill",
"age" : "forty"
}'
现在它们都可以搜索(尽管“年龄”是long
对于一和string
对于另一个。
但是,如果我将这两个对象存储在 couchbase 存储桶中(而不是直接存储到 elasticsearch)并设置 XDCR,则第一个对象复制正常,但第二个对象失败并出现以下错误
未能执行批量项目(索引)索引 {[test][couchbaseDocument][2],source[{"doc":{"name":"Bill","age":"40"},"meta":{ “id”:“2”,“rev”:“8-00000b9360d0a0bf0000000000000000”,“过期”:0,“flags”:0}}]}
org.elasticsearch.index.mapper.MapperParsingException:无法解析[doc.age]
我不明白为什么它通过 REST API 起作用,但当 couchbase 复制相同的对象时却不起作用。
我按照答案并使用以下映射通过 XDCR 使事情正常工作
curl -XPUT 'http://localhost:9200/test/couchbaseDocument/_mapping' -d '
{
"couchbaseDocument" : {
"properties" : {
"doc": {
"properties" : {
"name" : {"type" : "string", "store" : "yes"},
"age" : {"type" : "string", "store" : "yes"}
}
}
}
}
}'
现在,所有对象(尽管相同字段具有不同类型)都已复制且可搜索。我认为没有必要包括dynamic_templates
我最初尝试过的方法。映射有效。