我存储在elasticsearch中的文档如果与同一事件有关,则会被赋予一个共同的id(cid)。
在kibana中有没有办法将这些多个文件视为单个文件?
例如,我想找到一个字段的基数。每组文件都有相同的“cid”字样。应该算一次。
{
"f": "foo",
"cid": 1,
...
}
{
"f": "foo",
"cid": 1,
...
}
{
"f": "foo",
"cid": 2,
...
}
这应该将术语foo的基数设为2.
当我尝试使用cid作为存储桶创建可视化时,那么我想要将其视为子存储桶的字段,我只是在cid上获得可视化,然后在其他字段中获得可视化。
我不确定kibana是否适合这种情况,或者我最好将索引传回脚本以将这些文档合并为一个(看起来有点混乱)。
任何想法都赞赏。
布雷特
答案 0 :(得分:0)
请记住,Elasticsearch(ES)会为每个文档分配自己的_id
,因此,即使您将cid
视为文档的唯一标识符,ES也不知道它并将3个不同的索引您在问题中提供的示例的文档。您可以更改ES为文档生成索引的方式,并使其使用cid
字段的值。如果ES一直使用cid
值作为索引,那么您只能索引2个文档。请参阅https://angularu.com/VideoSession/2015sf/angular-2-server-rendering以了解如何让ES使用您的cid
字段作为标识符。
另一个选择是,当您按cid
项分割为存储桶时,让Kibana计算f
字段的唯一值(这将是您的指标)。如果您使用Kibana UI,您应该能够完成相同的任务
答案 1 :(得分:0)
最后,我使用的答案是通过logstash而不是insert进行upsert,同时使用我的cid作为_id。
所以在弹性搜索输出中你必须这样做:
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
希望能帮助其他人解决这个问题。