elasticsearch 从couchbase bucket复制到elasticsearch索引时出现问题?,elasticsearch,couchbase,elasticsearch,Couchbase" /> elasticsearch 从couchbase bucket复制到elasticsearch索引时出现问题?,elasticsearch,couchbase,elasticsearch,Couchbase" />

elasticsearch 从couchbase bucket复制到elasticsearch索引时出现问题?

elasticsearch 从couchbase bucket复制到elasticsearch索引时出现问题?,elasticsearch,couchbase,elasticsearch,Couchbase,这个问题似乎与在couchbase中使用XDCR有关。如果我有以下简单的对象 1: { "name" : "Mark", "age" : 30} 2: { "name" : "Bill", "age" : "forty"} 并建立一个elasticsearch索引 curl -XPUT 'http://localhost:9200/test/couchbaseDocument/_mapping' -d ' { "couchbaseDocument" : { "dynam

这个问题似乎与在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"
          }
        }
      }
      ]
    }
}'
然后,我可以使用RESTAPI将这两个对象添加到此索引中

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 bucket中(而不是直接存储到elasticsearch)并设置XDCR,则第一个对象可以很好地复制,但第二个对象失败,出现以下错误

未能执行批量项目(索引)索引{[test][couchbaseDocument][2],源[{“doc”:{“name”:“Bill”,“age”:“foury”},“meta”:{“id”:“2”,“rev”:“8-00000 B9360D0A0BF0000000000”,“expiration”:0,“flags”:0}]} org.elasticsearch.index.mapper.MapperParsingException:解析[doc.age]失败

我不明白为什么它可以通过RESTAPI工作,但当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\u模板方法。映射是有效的。

这是你必须在elasticsearch方面解决的问题

如果同一字段名可以同时包含数值和字符串值,则应首先创建一个映射,表示
age
是一个字符串。 因此elasticsearch不会尝试自动猜测此字段的类型


希望这有助于

在定义映射后才引入
age
字段的情况下,我该怎么办?因此,它首先作为一个数字引入,映射被更新,但随后它作为一个字符串出现?在这种情况下,我无法指定它在初始映射中被视为一个字符串,因为我不知道t甚至将作为属性出现。这有意义吗?它将失败。具有该字段的第一个文档将给出类型。并且您不能更改类型。可能正在使用模板,您可以说所有字段都应视为字符串。