当前位置: 首页 > 面试题库 >

从Couchbase存储桶复制到Elasticsearch索引时出现问题?

夏雅志
2023-03-14
问题内容

这个问题似乎与在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另一个人的事实。

但是,如果我将这两个对象存储在一个沙发基存储桶中(而不是直接存储到elasticsearch中)并设置了XDCR,则第一个对象可以很好地复制,但是第二个对象会失败,并出现以下错误

无法执行批量项目(索引)索引{[test] [couchbaseDocument] [2],源[{“ doc”:{“ name”:“ Bill”,“
age”:“ forty”},“ meta”:{ “ id”:“ 2”,“ rev”:“
8-00000b9360d0a0bf0000000000000000”,“到期”:0,“标志”:0}}}}}
org.elasticsearch.index.mapper.MapperParsingException:无法解析[doc.age ]

我无法弄清楚为什么它可以通过REST API来工作,但是当沙发床复制相同的对象时却不能。

我遵循了答案,并使用以下映射通过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方面解决的问题。

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

希望这可以帮助



 类似资料:
  • 有没有一种方法可以将文件列表从一个S3存储桶复制到另一个存储桶?两个S3存储桶都在同一个AWS帐户中。我可以使用aws cli命令一次复制一个文件: 然而,我有1000份文件要复制。我不想复制源存储桶中的所有文件,因此无法使用sync命令。有没有一种方法可以用需要复制的文件名列表来调用一个文件,从而自动化这个过程?

  • 使用Java AWS SDK,我创建了一个lambda函数来从s3 bucket读取csv文件。我已经将bucket公之于众,可以从任何浏览器轻松访问它和文件。为了测试它,我使用lambda控制台上的test按钮。我正在使用hello world测试配置输入模板。 它失败的原因是: 错误消息:指定的桶无效。(服务:Amazon S3;状态代码:400;错误代码:InvalidBucketName;

  • remoteTransportException:未能从流中反序列化异常响应,原因是:org.elasticSearch.transport.transportSerializationException:未能从流中反序列化异常响应,原因是:org.elasticSearch.transport.netty.messageChannelHandler.handlerResponseError(Me

  • 试图通过存储传输将数据从AWS S3拉到谷歌云存储。 我有S3桶访问密钥ID和秘密访问密钥,并能够从gsutil(从笔记本电脑)复制,但它从存储传输抛出权限错误。 不明白它是如何与gsutil工作,但不与存储传输。 错误消息: 有没有办法在计算引擎中使用gsutil将文件从S3复制到GCS? 谢谢,

  • 问题内容: 使用Couchbase 5.0及其Java客户端2.0.3时,出现以下错误。 只需按照以下说明打开存储桶即可: https://developer.couchbase.com/documentation/server/current/sdk/java/managing- connections.html 如前所述,使用基本的本地配置,只需两行代码即可: 那应该打开localhost集群

  • 问题:我想从谷歌云存储桶中的文件夹(例如桶1中的文件夹1)复制文件到另一个桶(例如桶2)。我找不到任何谷歌云存储的气流操作员来复制文件。