in supporting-blog-content/ElasticDocs_GPT/elasticdocs_gpt.py [0:0]
def search(query_text):
cid = os.environ["cloud_id"]
cp = os.environ["cloud_pass"]
cu = os.environ["cloud_user"]
es = es_connect(cid, cu, cp)
# 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", "body_content", "url"]
index = "search-elastic-docs"
resp = es.search(
index=index, query=query, knn=knn, fields=fields, size=1, source=False
)
body = resp["hits"]["hits"][0]["fields"]["body_content"][0]
url = resp["hits"]["hits"][0]["fields"]["url"][0]
return body, url