def get_hybrid_search_rrf_request_body()

in example-apps/relevance-workbench/app-api/app.py [0:0]


def get_hybrid_search_rrf_request_body(query, size=10, **options):
    """
    Generates an ES hybrid search with RRF
    """
    fields = datasets[options["dataset"]]["elser_search_fields"]
    result_fields = datasets[options["dataset"]]["result_fields"]
    search_fields = datasets[options["dataset"]]["search_fields"]
    text_expansions = []
    boost = 1

    for field in fields:

        split_field_descriptor = field.split("^")
        if len(split_field_descriptor) == 2:
            boost = split_field_descriptor[1]
            field = split_field_descriptor[0]
        te = {"text_expansion": {}}
        te["text_expansion"][field] = {
            "model_text": query,
            "model_id": ".elser_model_1",
            "boost": boost,
        }
        text_expansions.append(te)
    return {
        "_source": False,
        "fields": result_fields,
        "size": size,
        "rank": {"rrf": {"window_size": 10, "rank_constant": 2}},
        "sub_searches": [
            {"query": {"bool": {"should": text_expansions}}},
            {"query": {"multi_match": {"query": query, "fields": search_fields}}},
        ],
    }