def search_products()

in supporting-blog-content/homecraft-vertex/pages/homecraft_finetuned.py [0:0]


def search_products(query_text):

    # Elasticsearch query (BM25) and kNN configuration for hybrid search
    query = {
        "bool": {
            "must": [{"match": {"title": {"query": query_text, "boost": 1}}}],
            "filter": [{"exists": {"field": "title-vector"}}],
        }
    }

    knn = {
        "field": "title-vector",
        "k": 1,
        "num_candidates": 20,
        "query_vector_builder": {
            "text_embedding": {
                "model_id": "sentence-transformers__all-distilroberta-v1",
                "model_text": query_text,
            }
        },
        "boost": 24,
    }

    fields = [
        "title",
        "description",
        "url",
        "availability",
        "price",
        "brand",
        "product_id",
    ]
    index = "home-depot-product-catalog-vector"
    resp = es.search(
        index=index, query=query, knn=knn, fields=fields, size=5, source=False
    )

    doc_list = resp["hits"]["hits"]
    body = resp["hits"]["hits"]
    url = ""
    for doc in doc_list:
        # body = body + doc['fields']['description'][0]
        url = url + "\n\n" + doc["fields"]["url"][0]

    return body, url