从couchbase存储桶复制到elasticsearch索引时出现的问题?

 45度向上倾斜的世界取_872 发布于 2023-01-29 01:18

这个问题似乎与在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],来源[{"doc":{"name":"Bill","age":"forty"},"meta":{ "id":"2","rev":"8-00000b9360d0a0bf0000000000000000","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我最初尝试的方法.映射有效.

1 个回答
  • 这是你必须在弹性搜索方面解决的问题.

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

    希望这可以帮助

    2023-01-29 01:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有