【问题标题】:Treat multiple documents with a common id to be treated as one in kibana/elasticsearch在 kibana/elasticsearch 中将具有共同 id 的多个文档视为一个文档
【发布时间】:2016-02-10 16:41:42
【问题描述】:

如果我存储在 elasticsearch 中的文档与同一事件相关,则它们会被赋予一个通用 ID (cid)。

在 kibana 中是否有办法将这些多个文档视为一个文档?

例如,我想找到一个字段的基数。每组具有相同“cid”的文档应该只计算一次。

{
   "f": "foo",
   "cid": 1,
   ...
}

{
   "f": "foo",
   "cid": 1,
   ...
}

{
   "f": "foo",
   "cid": 2,
   ...
}

这应该使术语 foo 的基数为 2。

当我尝试使用 cid 作为存储桶创建可视化,然后我想将字段可视化为子存储桶时,我只是在 cids 上获得可视化,然后在另一个字段内。

我不确定 kibana 是否适用于此,或者我最好通过脚本将索引传回以将这些文档合并为一个(似乎有点混乱)。

任何想法表示赞赏。

布雷特

【问题讨论】:

  • 在指标中,您可以使用“唯一计数”。
  • 谢谢 - 正如我在下面的评论中所说,你解决了这个例子,我会支持你们两个,但我缺两个代表。所以我只能表示感谢:)

标签: elasticsearch logging logstash kibana nosql


【解决方案1】:

请记住,Elasticsearch (ES) 会为每个文档分配它自己的 _id,因此即使您将 cid 视为文档的唯一标识符,ES 也不知道它会为示例索引 3 个不同的文档你给了你的问题。您可以更改 ES 为文档生成索引的方式,并使其使用 cid 字段的值。如果 ES 一直使用 cid 值作为索引,那么您将只有 2 个文档被索引。请参阅 this question 以了解如何让 ES 使用您的 cid 字段作为标识符。

当您按 f 术语拆分为存储桶时,您的另一个选择是让 Kibana 计算 cid 字段的唯一值(这将是您的指标)。如果你玩 Kibana UI,你应该可以完成同样的任务

【讨论】:

  • 谢谢 - 我想你和 Alain 已经为我解决了上面的例子。只是想想想这不适用于更复杂的查询(试图弄清楚这是否真的是最好的方法,或者合并它们是否更明智)。否则,我会将您的答案标记为已接受。
  • 补充以上内容 - 让多个文档使用相同的 _id 或 _uid 是否安全?关于它们必须是独一无二的,我找不到任何一种或另一种方式。 “感觉”不是一件好事。
  • 我认为您最终不会拥有两个具有相同 ID 的不同文档。最后一次写入将作为对现有文档的更新。不过,我会用你的 ES 发行版来测试上述假设:)
【解决方案2】:

oldbam 的回答让我走上了正确的道路,但我的问题含糊不清,无助于准确。

最后,我使用的答案是通过 logstash 而不是插入 upsert,同时还使用我的 cid 作为 _id。

所以在 elasticsearch 输出中你必须这样做:

doc_as_upsert => true # Make sure we use the doc as the values to upsert
action => "update" # update if possible instead of overwriting 
document_id => "%{cid}" set the _id to cid

希望能帮助其他人解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2015-04-12
    • 2017-02-14
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多