Я пытаюсь визуализировать связи между взаимодействиями моего бота. Каждое взаимодействие отправляется в Elasticsearch и содержит данные об идентификаторе взаимодействия и идентификаторе предыдущего взаимодействия. Взаимодействие может иметь разные «предыдущие взаимодействия». Таким образом, после «группы по идентификатору взаимодействия» я получаю список взаимодействий, их количество и встроенный список предыдущих взаимодействий.
root иерархии - это когда в previous_Id
есть пустая строка.
Как создать график, который покажет путь?
Данные выглядит так:
0:
interaction: "1751"
interaction_count: 14
previous: Array(2)
0: {key: "1552", doc_count: 9}
1: {key: "1752", doc_count: 5}
1:
interaction: "0"
interaction_count: 8
previous: Array(1)
0: {key: "", doc_count: 8}
После выполнения метода flatten
данные выглядят следующим образом:
0:
interaction: "1751"
interaction_count: 14
previous_Id: "1552"
previous_count: 9
1:
interaction: "1751"
interaction_count: 14
previous_Id: "1752"
previous_count: 5
2:
interaction: "0"
interaction_count: 8
previous_Id: ""
previous_count: 8
3:
interaction: "1552"
interaction_count: 8
previous_Id: "0"
previous_count: 8
4:
interaction: "1752"
interaction_count: 6
previous_Id: "1751"
previous_count: 6
Как вы можете видеть, взаимодействие 1751
удваивается. Это потому, что у него два разных previous_Id
, поэтому метод stratify
не работает из-за ambiguous 1751
.
Код:
{
$schema: https://vega.github.io/schema/vega/v4.json
description: Visualization of bot's interactions data.
padding: 5
data: [
{
name: table
url: {
%context%: true
%timefield%: @timestamp
index: bots_1152,
body: {
size: 10000
aggs: {
botdata: {
filter: {
term: {
meta.botId: "1403"
}
}
aggs: {
group_by_interaction: {
terms: {
field: data.interactionId.keyword
}
aggs: {
group_by_prev: {
terms: {
field: data.prevInteractionId.keyword
}
}
}
}
}
}
}
}
}
format: {
property: aggregations.botdata.group_by_interaction.buckets
}
transform: [
{
type: project
fields: [
key
doc_count
group_by_prev.buckets
]
as: [
interaction
interaction_count
previous
]
}
]
}
{
name: linked_data
source: table
transform: [
{
type: flatten
fields: [
previous
]
}
{
type: project
fields: [
interaction
interaction_count
previous.key
previous.doc_count
]
as: [
interaction
interaction_count
previous_Id
previous_count
]
}
]
}
]
}