in example-apps/search-tutorial/v1/search-tutorial/app.py [0:0]
def handle_search():
query = request.form.get("query", "")
filters, parsed_query = extract_filters(query)
from_ = request.form.get("from_", type=int, default=0)
if parsed_query:
search_query = {
"must": {
"multi_match": {
"query": parsed_query,
"fields": ["name", "summary", "content"],
}
}
}
else:
search_query = {"must": {"match_all": {}}}
results = es.search(
query={"bool": {**search_query, **filters}},
aggs={
"category-agg": {
"terms": {
"field": "category.keyword",
}
},
"year-agg": {
"date_histogram": {
"field": "updated_at",
"calendar_interval": "year",
"format": "yyyy",
},
},
},
size=5,
from_=from_,
)
aggs = {
"Category": {
bucket["key"]: bucket["doc_count"]
for bucket in results["aggregations"]["category-agg"]["buckets"]
},
"Year": {
bucket["key_as_string"]: bucket["doc_count"]
for bucket in results["aggregations"]["year-agg"]["buckets"]
if bucket["doc_count"] > 0
},
}
return render_template(
"index.html",
results=results["hits"]["hits"],
query=query,
from_=from_,
total=results["hits"]["total"]["value"],
aggs=aggs,
)