MongoDB 复合索引到 Kibana elasticsearch

Posted

技术标签:

【中文标题】MongoDB 复合索引到 Kibana elasticsearch【英文标题】:Mongodb compound index to 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字段映射到弹性中的其他字段。检查我的答案 【参考方案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 做到这一点的?我有点迷路了!提前致谢!

以上是关于MongoDB 复合索引到 Kibana elasticsearch的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB——索引类型之复合索引(Compound Index)

MongoDB——索引类型之复合索引(Compound Index)

MongoDB - 唯一索引与复合索引

深入理解MongoDB的复合索引

Mongodb 索引

MongoDB 复合稀疏索引