【问题标题】:Issues when replicating from couchbase bucket to elasticsearch index?从 couchbase 存储桶复制到 elasticsearch 索引时出现问题?
【发布时间】: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","re​​v":"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 方法。映射有效。

【问题讨论】:

    标签: elasticsearch couchbase


    【解决方案1】:

    这是你必须在弹性搜索方面解决的问题。

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

    希望对你有帮助

    【讨论】:

    • age 字段直到映射被定义之后才被引入的情况下我会怎么做,所以它首先作为一个数字引入,映射被更新,但是它发生在一个字符串?在这种情况下,我无法将其指定为初始映射中的字符串,因为我不知道它甚至会作为属性出现。这有意义吗?
    • 它会失败。具有该字段的第一个文档将给出类型。而且你不能改变一个类型。可能正在使用模板,您可以说所有字段都应视为字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2019-01-27
    • 1970-01-01
    • 2016-03-18
    • 2019-06-24
    • 2019-09-24
    • 2022-07-12
    相关资源
    最近更新 更多