from haystack import Document from haystack.components.retrievers.in_memory import InMemoryBM25Retriever from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack.document_stores.types import FilterPolicy document_store = InMemoryDocumentStore( bm25_algorithm="BM25Plus", bm25_parameters={"k1": 1.2, "b": 0.75, "delta": 0.5}, ) documents = [ Document( content="Restart the payment API after changing retry settings.", meta={"domain": "operations", "section": "api"}, ), Document( content="BM25 retrievers match exact error codes and product names.", meta={"domain": "operations", "section": "search"}, ), Document( content="Embedding retrievers find semantic matches with vector similarity.", meta={"domain": "ml", "section": "search"}, ), ] document_store.write_documents(documents) retriever = InMemoryBM25Retriever( document_store=document_store, filters={"field": "meta.domain", "operator": "==", "value": "operations"}, filter_policy=FilterPolicy.MERGE, top_k=2, scale_score=True, ) result = retriever.run( query="exact error codes product names", filters={"field": "meta.section", "operator": "==", "value": "search"}, top_k=1, ) documents = result["documents"] print(f"indexed_documents: {document_store.count_documents()}") print(f"retrieved_documents: {len(documents)}") for document in documents: print(f"content: {document.content}") print(f"section: {document.meta['section']}") print(f"score: {document.score:.4f}")