Last active
January 24, 2021 17:56
-
-
Save markjhoy/51e849189ef480abd5dd010abe195726 to your computer and use it in GitHub Desktop.
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