# RAG System Builder Advanced Hybrid Search Bm25 Vector

> Sub-skill of rag-system-builder: Advanced: Hybrid Search (BM25 + Vector).

- Skill: `vamseeachanta/rag-system-builder-advanced-hybrid-search-bm25-vector` (Agent Skill)
- Install (CLI): `npx skillmds@latest add vamseeachanta/rag-system-builder-advanced-hybrid-search-bm25-vector`
- Raw SKILL.md: https://api.skillmd.com/api/skills/vamseeachanta/rag-system-builder-advanced-hybrid-search-bm25-vector/raw
- Safety review: PASS (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: vamseeachanta (https://skillmd.com/u/vamseeachanta)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/vamseeachanta/rag-system-builder-advanced-hybrid-search-bm25-vector

---


# Advanced: Hybrid Search (BM25 + Vector)

## Advanced: Hybrid Search (BM25 + Vector)


Combine keyword and semantic search for better results:

```python
import sqlite3
from rank_bm25 import BM25Okapi
import numpy as np

class HybridSearch:
    def __init__(self, db_path, embedding_model):
        self.db_path = db_path
        self.model = embedding_model
        self._build_bm25_index()

    def _build_bm25_index(self):
        """Build BM25 index from chunks."""
        conn = sqlite3.connect(self.db_path)
        cursor = conn.cursor()
        cursor.execute('SELECT id, chunk_text FROM chunks')

        self.chunk_ids = []
        tokenized_corpus = []
        for chunk_id, text in cursor.fetchall():
            self.chunk_ids.append(chunk_id)
            tokenized_corpus.append(text.lower().split())


*See sub-skills for full details.*

