【问题标题】:Mongodb compound index to Kibana elasticsearchMongoDB 复合索引到 Kibana elasticsearch
【发布时间】:2017-08-03 11:18:55
【问题描述】:

我在尝试从 mongoDB 数据库在 Kibana 上设置仪表板时遇到问题。

问题发生在复合索引上。我在 mongoDB 中有一个带有复合索引的集合:

sale : {"_id" : {"date" : Date, 
                 "country" : String, 
                 "game_id" : String }, 
        "field_1" : String, 
        "field_n" : String}

我正在尝试使用 mongoDB 文档的 _id 字段中的日期生成 Kibana 仪表板。

为了从 Kibana 访问 mongoDB 数据库,我使用了 mongo-connector elastic2,一切似乎都正常,因为我可以在 Kibana 中正确查看所有字段以及文档。但是 _id 没有被解释,它显示为一个字符串而不是 3 个字段。

_id:{'game_id': 'com.id.game', 'date': datetime.datetime(2016, 6, 22, 0, 0), 'country': 'DZ'}

我想要让 Kibana 知道 _id 不是字符串,即字符串 (game_id)、日期 (date) 和字符串 (国家),并让我使用日期字段作为报告字段,但到目前为止我还没有成功。

有人知道我该怎么做吗? 非常感谢您提前。

【问题讨论】:

  • _id 是文档 id 的保留键。 ES 允许该字段使用字符串、整数类型而不是 json 对象。
  • 我知道,这就是为什么它将我的日期、国家和游戏 ID 结构转换为纯字符串的原因,但是,我该怎么做才能恢复我的字段(日期、国家和游戏 ID)?
  • 那么我会建议将_id字段映射到弹性中的其他字段。检查我的答案

标签: mongodb elasticsearch kibana compound-index


【解决方案1】:

根据官方documentation 的 elastic_id 是每个类型的保留关键字,它代表每个文档的唯一标识符。 _id 以及 _index、_type、_uid 是 meta-fields 的类型。

如果您想保留您的 _id json 对象,您可以使用 mongo-elastic 命名空间配置(如 here)将 mongo 中的这个 _id 映射到 elastic 中的某个新字段。

{
  "namespaces": {
    "include": ["document_type._id"],
    "mapping": {
      "document_type._id": "document_type.mongo_id"
    }
  }
}

或类似-n company.employees -g company.new_employees的命令

谢谢

【讨论】:

  • 感谢您的回答,我已经尝试过您的解决方案,但是上面有两个 cmets: - 自 2.5.0 版以来似乎已弃用。 - 我已经尝试了自 v.2.5.0 以来应该采用的方式,例如:“namespaces”:{“.._id”:{“rename”:“. .mongo_id" } } 但我无法让它工作,它适用于重命名集合但不适用于字段,非常感谢
  • 是的,我记得去年某个时候弹性贬值的河流插件及其支持。我稍后会尝试向您建议另一种解决方案。谢谢
  • 非常感谢,我已经实现了一个类似的解决方案,就是修改elastic2-doc-manager,没什么大不了的,但是我真的很想找到更好的解决方案。
  • @bracana 您能否快速回答一下您是如何使用 elastic2-doc-manager 做到这一点的?我有点迷路了!提前致谢!
猜你喜欢
  • 2021-01-16
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2013-02-20
  • 1970-01-01
相关资源
最近更新 更多