in example-apps/search-tutorial/v3/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 = {
"sub_searches": [
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": parsed_query,
"fields": ["name", "summary", "content"],
}
},
**filters,
}
}
},
{
"query": {
"bool": {
"must": [
{
"text_expansion": {
"elser_embedding": {
"model_id": ".elser_model_2",
"model_text": parsed_query,
}
},
}
],
**filters,
}
},
},
],
"rank": {"rrf": {}},
}
else:
search_query = {"query": {"bool": {"must": {"match_all": {}}, **filters}}}
results = es.search(
**search_query,
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,
)