def handle_search()

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,
    )