Skip to content

Commit 5264994

Browse files
Aggregations section for the search tutorial (elastic#161)
1 parent bda20cd commit 5264994

File tree

12 files changed

+326
-134
lines changed

12 files changed

+326
-134
lines changed
228 Bytes
Binary file not shown.

example-apps/search-tutorial/start/search-tutorial/data.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
"name": "Swe Career Matrix",
5757
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/EVYuEyRhHh5Aqc3a39sqbGcBkqKIHRWtJBjjUjNs6snpMg?e=nv1mf4",
5858
"created_on": "2018-04-15",
59+
"updated_at": "2018-04-15",
5960
"category": "sharepoint",
6061
"rolePermissions": ["demo", "manager"]
6162
},
@@ -65,6 +66,7 @@
6566
"name": "Sales Engineering Collaboration",
6667
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/EW21-KJnfHBFoRiF49_uJMcBfHyPKimuPOFsCcJypQWaBQ?e=mGdIqe",
6768
"created_on": "2019-04-15",
69+
"updated_at": "2019-04-15",
6870
"category": "sharepoint",
6971
"rolePermissions": ["demo", "manager"]
7072
},
@@ -74,6 +76,7 @@
7476
"name": "Intellectual Property Policy",
7577
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/EWz3cYEVdzBNsiHsYbKhms4BVYGhravyrUw3T3lzxL4pTg?e=mPIgbO",
7678
"created_on": "2021-06-15",
79+
"updated_at": "2021-06-15",
7780
"category": "sharepoint",
7881
"rolePermissions": ["demo", "manager"]
7982
},
@@ -84,6 +87,7 @@
8487
"name": "Code Of Conduct",
8588
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/ER3xmeKaZ_pAqPeJWyyNR0QBg6QmoWIGPhwfEyCABWHrPA?e=cvzrgV",
8689
"created_on": "2018-01-12",
90+
"updated_at": "2018-01-12",
8791
"category": "sharepoint",
8892
"rolePermissions": ["demo", "manager"]
8993
},
@@ -93,6 +97,7 @@
9397
"name": "Office Pet Policy",
9498
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/ETf-69wBeaZJpAn3CY7ExRABQWvav-p24VOnB6C0A4l2pQ?e=X72WuK",
9599
"created_on": "2018-01-12",
100+
"updated_at": "2018-01-12",
96101
"category": "sharepoint",
97102
"rolePermissions": ["demo", "manager"]
98103
},
@@ -102,6 +107,7 @@
102107
"name": "Performance Management Policy",
103108
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/ERsxt9p1uehJqeJu4JlxkakBavbKwcldrYv_hpv3xHikAw?e=pf5R2C",
104109
"created_on": "2018-01-12",
110+
"updated_at": "2018-01-12",
105111
"category": "sharepoint",
106112
"rolePermissions": ["demo", "manager"]
107113
},
@@ -112,6 +118,7 @@
112118
"name": "Sales Organization Overview",
113119
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/EYsr1eqgn9hMslMJFLR-k54BBX-O3iC26bK7xNEBtYIBkg?e=xeAjiT",
114120
"created_on": "2018-01-15",
121+
"updated_at": "2018-01-15",
115122
"category": "sharepoint",
116123
"rolePermissions": ["demo", "manager"]
117124
},
@@ -121,6 +128,7 @@
121128
"name": "Compensation Framework For It Teams",
122129
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/EaAFec6004tAg21g4i67rfgBBRqCm1yY7AZLLQyyaMtsEQ?e=wTMb4z",
123130
"created_on": "2018-01-12",
131+
"updated_at": "2018-01-12",
124132
"category": "sharepoint",
125133
"rolePermissions": ["manager"]
126134
},
@@ -130,6 +138,7 @@
130138
"name": "Updating Your Tax Elections Forms",
131139
"url": "./github/Updating Your Tax Elections Forms.txt",
132140
"created_on": "2022-12-20",
141+
"updated_at": "2022-12-20",
133142
"category": "github",
134143
"rolePermissions": ["demo", "manager"]
135144
},
@@ -139,6 +148,7 @@
139148
"name": "New Employee Onboarding Guide",
140149
"url": "./github/New Employee Onboarding guide.txt",
141150
"created_on": "2018-01-12",
151+
"updated_at": "2018-01-12",
142152
"category": "github",
143153
"rolePermissions": ["demo", "manager"]
144154
}

example-apps/search-tutorial/start/search-tutorial/templates/index.html

Lines changed: 46 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,59 @@
33
{% block content %}
44
<form method="POST" action="{{ url_for('handle_search') }}">
55
<div class="mb-3">
6-
<input type="text" class="form-control" name="query" id="query" placeholder="Enter your search query" autofocus>
6+
<input type="text" class="form-control" name="query" id="query" placeholder="Enter your search query" value="{{ query }}" autofocus>
77
</div>
88
</form>
99
{% if results %}
1010
<div class="row mb-3">
11-
<div class="col-sm-auto my-auto">
12-
Showing results {{ from_ + 1 }}-{{ from_ + results|length }} out of {{ total }}.
11+
<div class="col-2 mt-2">
12+
<p><a href="javascript:history.back(1)">← Back</a></p>
13+
{% for agg in aggs %}
14+
<h6 class="mt-3">{{ agg }}</h6>
15+
{% for key, count in aggs[agg].items() %}
16+
<form method="POST">
17+
<input type="hidden" name="query" value="{{ agg|lower }}:{{key}} {{ query }}">
18+
<button type="submit" class="btn btn-link btn-sm"{% if aggs[agg]|length == 1 %} disabled{% endif %}>{{ key }} ({{ count }})</button>
19+
</form>
20+
{% endfor %}
21+
{% endfor %}
1322
</div>
14-
{% if from_ > 0 %}
15-
<div class="col-sm-auto my-auto">
16-
<a href="javascript:history.back(1)" class="btn btn-primary">← Previous page</a>
17-
</div>
18-
{% endif %}
19-
{% if from_ + results|length < total %}
20-
<div class="col-sm-auto my-auto">
21-
<form method="POST">
22-
<input type="hidden" name="query" value="{{ query }}">
23-
<input type="hidden" name="from_" value="{{ from_ + results|length }}">
24-
<button type="submit" class="btn btn-primary">Next page →</button>
25-
</form>
23+
<div class="col-10">
24+
<div class="row mb-3">
25+
<div class="col-sm-auto my-auto">
26+
Showing results {{ from_ + 1 }}-{{ from_ + results|length }} out of {{ total }}.
27+
</div>
28+
{% if from_ > 0 %}
29+
<div class="col-sm-auto my-auto">
30+
<a href="javascript:history.back(1)" class="btn btn-primary">← Previous page</a>
31+
</div>
32+
{% endif %}
33+
{% if from_ + results|length < total %}
34+
<div class="col-sm-auto my-auto">
35+
<form method="POST">
36+
<input type="hidden" name="query" value="{{ query }}">
37+
<input type="hidden" name="from_" value="{{ from_ + results|length }}">
38+
<button type="submit" class="btn btn-primary">Next page →</button>
39+
</form>
40+
</div>
41+
{% endif %}
42+
<div class="col"></div>
2643
</div>
27-
{% endif %}
28-
<div class="col"></div>
44+
{% for result in results %}
45+
<p>
46+
{{ from_ + loop.index }}. <b><a href="{{ url_for('get_document', id=result._id) }}">{{ result._source.name }}</a></b>
47+
<br>
48+
{{ result._source.summary }}
49+
<br>
50+
<small>
51+
Category: {{ result._source.category }}.
52+
Last updated: {{ result._source.updated_at | default(result._source.created_on) }}.
53+
{% if result._score %}<i>(Score: {{ result._score }})</i>{% endif %}
54+
</small>
55+
</p>
56+
{% endfor %}
57+
</div>
2958
</div>
30-
{% for result in results %}
31-
<p>
32-
{{ from_ + loop.index }}. <b><a href="{{ url_for('get_document', id=result._id) }}">{{ result._source.name }}</a></b>
33-
<br>
34-
{{ result._source.summary }}
35-
<br>
36-
<small>
37-
Category: {{ result._source.category }}.
38-
Last updated: {{ result._source.updated_at | default(result._source.created_on) }}.
39-
{% if result._score %}<i>(Score: {{ result._score }})</i>{% endif %}
40-
</small>
41-
</p>
42-
{% endfor %}
4359
{% elif request.method == 'POST' %}
4460
<p>No results found.</p>
4561
{% endif %}

example-apps/search-tutorial/v1/search-tutorial/app.py

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,38 @@ def handle_search():
3939
**search_query,
4040
**filters
4141
}
42-
}, size=5, from_=from_
42+
},
43+
aggs={
44+
'category-agg': {
45+
'terms': {
46+
'field': 'category.keyword',
47+
}
48+
},
49+
'year-agg': {
50+
'date_histogram': {
51+
'field': 'updated_at',
52+
'calendar_interval': 'year',
53+
'format': 'yyyy',
54+
},
55+
},
56+
},
57+
size=5,
58+
from_=from_
4359
)
60+
aggs = {
61+
'Category': {
62+
bucket['key']: bucket['doc_count']
63+
for bucket in results['aggregations']['category-agg']['buckets']
64+
},
65+
'Year': {
66+
bucket['key_as_string']: bucket['doc_count']
67+
for bucket in results['aggregations']['year-agg']['buckets']
68+
if bucket['doc_count'] > 0
69+
},
70+
}
4471
return render_template('index.html', results=results['hits']['hits'],
4572
query=query, from_=from_,
46-
total=results['hits']['total']['value'])
73+
total=results['hits']['total']['value'], aggs=aggs)
4774

4875

4976
@app.get('/document/<id>')
@@ -63,19 +90,31 @@ def reindex():
6390

6491

6592
def extract_filters(query):
93+
filters = []
94+
6695
filter_regex = r'category:([^\s]+)\s*'
6796
m = re.search(filter_regex, query)
68-
if m is None:
69-
return {}, query # no filters
70-
filters = {
71-
'filter': [{
97+
if m:
98+
filters.append({
7299
'term': {
73100
'category.keyword': {
74101
'value': m.group(1)
75102
}
76-
}
77-
}]
78-
}
79-
query = re.sub(filter_regex, '', query).strip()
80-
return filters, query
103+
},
104+
})
105+
query = re.sub(filter_regex, '', query).strip()
106+
107+
filter_regex = r'year:([^\s]+)\s*'
108+
m = re.search(filter_regex, query)
109+
if m:
110+
filters.append({
111+
'range': {
112+
'updated_at': {
113+
'gte': f'{m.group(1)}||/y',
114+
'lte': f'{m.group(1)}||/y',
115+
}
116+
},
117+
})
118+
query = re.sub(filter_regex, '', query).strip()
81119

120+
return {'filter': filters}, query

example-apps/search-tutorial/v1/search-tutorial/data.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
"name": "Swe Career Matrix",
5757
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/EVYuEyRhHh5Aqc3a39sqbGcBkqKIHRWtJBjjUjNs6snpMg?e=nv1mf4",
5858
"created_on": "2018-04-15",
59+
"updated_at": "2018-04-15",
5960
"category": "sharepoint",
6061
"rolePermissions": ["demo", "manager"]
6162
},
@@ -65,6 +66,7 @@
6566
"name": "Sales Engineering Collaboration",
6667
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/EW21-KJnfHBFoRiF49_uJMcBfHyPKimuPOFsCcJypQWaBQ?e=mGdIqe",
6768
"created_on": "2019-04-15",
69+
"updated_at": "2019-04-15",
6870
"category": "sharepoint",
6971
"rolePermissions": ["demo", "manager"]
7072
},
@@ -74,6 +76,7 @@
7476
"name": "Intellectual Property Policy",
7577
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/EWz3cYEVdzBNsiHsYbKhms4BVYGhravyrUw3T3lzxL4pTg?e=mPIgbO",
7678
"created_on": "2021-06-15",
79+
"updated_at": "2021-06-15",
7780
"category": "sharepoint",
7881
"rolePermissions": ["demo", "manager"]
7982
},
@@ -84,6 +87,7 @@
8487
"name": "Code Of Conduct",
8588
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/ER3xmeKaZ_pAqPeJWyyNR0QBg6QmoWIGPhwfEyCABWHrPA?e=cvzrgV",
8689
"created_on": "2018-01-12",
90+
"updated_at": "2018-01-12",
8791
"category": "sharepoint",
8892
"rolePermissions": ["demo", "manager"]
8993
},
@@ -93,6 +97,7 @@
9397
"name": "Office Pet Policy",
9498
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/ETf-69wBeaZJpAn3CY7ExRABQWvav-p24VOnB6C0A4l2pQ?e=X72WuK",
9599
"created_on": "2018-01-12",
100+
"updated_at": "2018-01-12",
96101
"category": "sharepoint",
97102
"rolePermissions": ["demo", "manager"]
98103
},
@@ -102,6 +107,7 @@
102107
"name": "Performance Management Policy",
103108
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/ERsxt9p1uehJqeJu4JlxkakBavbKwcldrYv_hpv3xHikAw?e=pf5R2C",
104109
"created_on": "2018-01-12",
110+
"updated_at": "2018-01-12",
105111
"category": "sharepoint",
106112
"rolePermissions": ["demo", "manager"]
107113
},
@@ -112,6 +118,7 @@
112118
"name": "Sales Organization Overview",
113119
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/EYsr1eqgn9hMslMJFLR-k54BBX-O3iC26bK7xNEBtYIBkg?e=xeAjiT",
114120
"created_on": "2018-01-15",
121+
"updated_at": "2018-01-15",
115122
"category": "sharepoint",
116123
"rolePermissions": ["demo", "manager"]
117124
},
@@ -121,6 +128,7 @@
121128
"name": "Compensation Framework For It Teams",
122129
"url": "https://enterprisesearch.sharepoint.com/:t:/s/MSBuilddemo/EaAFec6004tAg21g4i67rfgBBRqCm1yY7AZLLQyyaMtsEQ?e=wTMb4z",
123130
"created_on": "2018-01-12",
131+
"updated_at": "2018-01-12",
124132
"category": "sharepoint",
125133
"rolePermissions": ["manager"]
126134
},
@@ -130,6 +138,7 @@
130138
"name": "Updating Your Tax Elections Forms",
131139
"url": "./github/Updating Your Tax Elections Forms.txt",
132140
"created_on": "2022-12-20",
141+
"updated_at": "2022-12-20",
133142
"category": "github",
134143
"rolePermissions": ["demo", "manager"]
135144
},
@@ -139,6 +148,7 @@
139148
"name": "New Employee Onboarding Guide",
140149
"url": "./github/New Employee Onboarding guide.txt",
141150
"created_on": "2018-01-12",
151+
"updated_at": "2018-01-12",
142152
"category": "github",
143153
"rolePermissions": ["demo", "manager"]
144154
}

0 commit comments

Comments
 (0)