【发布时间】:2014-03-03 09:20:53
【问题描述】:
这个问题似乎与在 couchbase 中使用 XDCR 有关。如果我有以下简单的对象
1: { "name" : "Mark", "age" : 30}
2: { "name" : "Bill", "age" : "forty"}
并设置一个弹性搜索索引
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":"forty"},"meta ":{"id":"2","rev":"8-00000b9360d0a0bf00000000000000000","expiration":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 方法。映射有效。
【问题讨论】: