Elastic Workplace Search - Vega Configuration for Top Queries With No Clicks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
$schema: https://vega.github.io/schema/vega-lite/v4.json | |
title: Top Queries With No Clicks | |
data: { | |
url: { | |
index: .ent-search-workplace-search-analytics-ecs-ilm-logs-* | |
body: { | |
query: { | |
bool: { | |
must: [ | |
"%dashboard_context-must_clause%" | |
{ | |
range: { | |
@timestamp: { | |
"%timefilter%": true | |
} | |
} | |
} | |
] | |
} | |
}, | |
aggs: { | |
"queries_no_clicks": { | |
"scripted_metric": { | |
"params": { | |
"return_count": 5 | |
}, | |
"init_script": "state.queries=new HashMap(); state.query_clicks=new HashMap(); ", | |
"map_script": "String query_id = doc['SearchMetrics.query.id'].value; if (state.queries[query_id] == null) { state.queries[query_id] = [ 'query_value':'', 'click_count':0 ] } if (doc['event.action'].value == 'SearchMetrics.query') { state.queries[query_id]['query_value'] = doc['SearchMetrics.query.value'].value } else { state.queries[query_id]['click_count'] += 1 }", | |
"combine_script": "for (q in state.queries.entrySet()) { String query_value = q.getValue()['query_value']; int click_count = q.getValue()['click_count']; if (state.query_clicks[query_value] == null) { state.query_clicks[query_value] = [ 'click_count': click_count, 'query_count': 1] } else { state.query_clicks[query_value]['click_count'] += click_count; state.query_clicks[query_value]['query_count'] += 1; } } return state.query_clicks", | |
"reduce_script": "HashMap final_counts=new HashMap(); for (c in states[0].entrySet()) { String query_value = c.getKey(); int click_count = c.getValue()['click_count']; int query_count = c.getValue()['query_count']; if (final_counts[query_value] == null) { final_counts[query_value] = [ 'click_count': click_count, 'query_count': query_count] } else { final_counts[query_value]['click_count'] += click_count; final_counts[query_value]['query_count'] += query_count; } } def final_output=[]; for (c in final_counts.entrySet()) { String query_value = c.getKey(); int click_count = c.getValue()['click_count']; int query_count = c.getValue()['query_count']; if (click_count == 0) { final_output.add(['query': query_value, 'count': query_count]) } } final_output.sort((x,y) -> y['count'] - x['count']); return final_output.subList(0, params['return_count'])" | |
} | |
} | |
}, | |
size: 0 | |
} | |
} | |
format: {property: "aggregations.queries_no_clicks.value"} | |
} | |
mark: bar | |
encoding: { | |
x: { | |
field: count | |
type: quantitative | |
axis: {title: "Query Count"} | |
} | |
y: { | |
field: query | |
type: nominal | |
axis: {title: "Query"}, | |
sort: -x | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment