Hybrid search helps find information by combining exact word matches and understanding the meaning behind words. This makes search results more accurate and useful.
Hybrid search (keyword + semantic) in LangChain
from langchain.vectorstores import FAISS from langchain.embeddings import OpenAIEmbeddings from langchain.chains import RetrievalQA from langchain.llms import OpenAI # Create embeddings embeddings = OpenAIEmbeddings() # Load or create vector store vectorstore = FAISS.load_local("index_path", embeddings) # Define keyword search function (example with simple filter) def keyword_search(docs, keyword): return [doc for doc in docs if keyword.lower() in doc.page_content.lower()] # Combine keyword and semantic search query = "your search query" keyword_results = keyword_search(vectorstore.docstore._dict.values(), "keyword") semantic_results = vectorstore.similarity_search(query, k=5) # Merge and rank results (example: semantic results first, then keyword) combined_results = semantic_results + [doc for doc in keyword_results if doc not in semantic_results]
This example shows how to combine keyword filtering with semantic similarity search using LangChain and FAISS.
You can customize keyword search logic and how to merge results based on your needs.
semantic_results = vectorstore.similarity_search("climate change effects", k=3)
keyword_results = [doc for doc in docs if "energy" in doc.page_content.lower()]
combined_results = semantic_results + [doc for doc in keyword_results if doc not in semantic_results]
This program creates a small set of documents, builds semantic embeddings, and performs both semantic and keyword searches. It then combines the results and prints them.
from langchain.vectorstores import FAISS from langchain.embeddings import OpenAIEmbeddings from langchain.schema import Document # Sample documents docs = [ Document(page_content="Climate change impacts on polar bears."), Document(page_content="Renewable energy sources and benefits."), Document(page_content="Effects of global warming on oceans."), Document(page_content="Energy consumption trends in 2023."), Document(page_content="Polar bear habitats and climate."), ] # Create embeddings embeddings = OpenAIEmbeddings() # Create vector store from documents vectorstore = FAISS.from_documents(docs, embeddings) # Define keyword search function keyword = "energy" def keyword_search(documents, keyword): return [doc for doc in documents if keyword.lower() in doc.page_content.lower()] # Perform semantic search query = "climate change" semantic_results = vectorstore.similarity_search(query, k=3) # Perform keyword search keyword_results = keyword_search(docs, keyword) # Combine results without duplicates combined_results = semantic_results + [doc for doc in keyword_results if doc not in semantic_results] # Print combined results for i, doc in enumerate(combined_results, 1): print(f"Result {i}: {doc.page_content}")
Hybrid search improves search quality by balancing exact matches and meaning.
Keyword search is fast but can miss related ideas; semantic search understands meaning but may be slower.
Adjust how you combine results to fit your app's needs and user expectations.
Hybrid search mixes keyword and semantic search for better results.
Use keyword search to find exact words and semantic search to find related meanings.
Combining both helps users find what they want more easily.