Prompt
What should I use for semantic search over internal content?
Latest observation
For semantic search over internal content, the usual best choice is a vector search / hybrid search stack rather than plain keyword search.
Good default options
1. Elasticsearch / OpenSearch with vector + keyword hybrid search
Best if you want:
- search across lots of internal docs
- keyword matching plus semantic matching
- filtering by metadata like team, date, access level
- a production-ready, familiar search platform
Why it’s strong:
You can combine:
- BM25 keyword search for exact terms, names, codes, acronyms
- embeddings + kNN/vector search for meaning-based retrieval
This is often the most practical enterprise choice.
2. Postgres + pgvector
Best if:
- your corpus is smaller to medium-sized
- you already use Postgres
- you want something simple to operate
Why it’s strong:
Easy to get started, good for prototypes and modest production use.
Tradeoff: less powerful than dedicated search engines for large-scale hybrid retrieval.
3. Dedicated vector databases
Examples:
- Pinecone
- Weaviate
- Milvus
- Qdrant
Best if:
- semantic retrieval is the core product
- you want fast vector similarity search
- you need flexible indexing and scaling
Tradeoff: many teams still pair these with a keyword engine for hybrid search.
Important recommendation: use hybrid search
For internal content, pure semantic search often misses:
- exact product names
- ticket IDs
- policy codes
- acronyms
- filenames
So the best practical setup is usually:
- chunk documents
- generate embeddings
- store vectors in a vector index
- keep keyword/full-text search
- combine results with hybrid ranking
If you’re building an internal knowledge search tool
A strong default architecture is:
- Document store: S3 / SharePoint / Google Drive / Confluence / etc.
- Indexing: chunking + metadata extraction
- Embeddings: OpenAI, Cohere, or open-source models
- Search layer: Elasticsearch/OpenSearch or a vector DB
- Reranker: optional but highly recommended for better precision
A reranker can significantly improve result quality.
Quick rule of thumb
- Need enterprise search with filters and keywords? → OpenSearch/Elasticsearch
- Already on Postgres and small scale? → pgvector
- Need vector-native infra? → Pinecone / Weaviate / Milvus / Qdrant
- Need best quality? → Hybrid search + reranker
If you want, I can recommend a specific stack based on:
- your content sources
- document volume
- latency requirements
- budget
- whether you want open-source or managed SaaS