langchain-postgres icon indicating copy to clipboard operation
langchain-postgres copied to clipboard

hybrid search

Open gecBurton opened this issue 1 year ago • 1 comments

Not an "issue" I know, but would it be possible to have a hybrid full-text/vector search similar to https://www.alibabacloud.com/help/en/analyticdb-for-postgresql/user-guide/fusion-search-use-guide?

gecBurton avatar May 31 '24 08:05 gecBurton

any thoughts on this?

I am thinking something like:

query = "who were the leading figures in the french revolution?"

h = 1

index_vector = func.to_tsvector("english", vectorstore.EmbeddingStore.document)
search_vector = func.plainto_tsquery("english", " | ".join(query.split(" ")))
fulltext_search = func.ts_rank(index_vector, search_vector)

embedding = embedder.embed_query(query)
vector_search = vectorstore.distance_strategy(embedding)

results = session.query(
    vectorstore.EmbeddingStore,
    (vector_search * (1-h) + fulltext_search * h).label("distance")
).order_by(desc("distance"))


for doc, score in vectorstore._results_to_docs_and_scores(results):
    print(doc.page_content)

if this is of interest Ill raise a PR.

gecBurton avatar Jun 19 '24 08:06 gecBurton

Any updates on this? I’d love to see hybrid search support in PGVector! It would help tremendously. I'd be happy to contribute if needed.

salmatfq avatar Jan 29 '25 11:01 salmatfq

im closing this issue in favour of https://github.com/langchain-ai/langchain-postgres/issues/71

gecBurton avatar Apr 27 '25 16:04 gecBurton