HeliosDB Full-Text Search Tuning Guide
HeliosDB Full-Text Search Tuning Guide
Version: 1.0 Last Updated: 2025-11-30
Quick Start
-- Create full-text search indexCREATE INDEX idx_documents_fts ON documents USING FULLTEXT(title, content);
-- Basic searchSELECT id, title, ts_rank(document, query) as rankFROM documents, websearch_to_tsquery('english', 'database optimization') as queryWHERE document @@ queryORDER BY rank DESC;Full-Text Indexes
Creating Indexes
-- Single columnCREATE INDEX idx_articles_fts ON articles USING FULLTEXT(content);
-- Multiple columnsCREATE INDEX idx_docs_fts ON documents USING FULLTEXT(title, body, tags);
-- With custom tokenizerCREATE INDEX idx_multi_language ON articles USING FULLTEXT(content)WITH (language = 'auto', tokenizer = 'unicode');Index Configuration
-- Full-text parametersALTER TABLE articles SET SEARCH_PARAMS ( language = 'english', tokenizer = 'standard', stemming = true, stop_words = 'english', min_token_length = 3);Search Queries
Basic Search
-- Keyword searchSELECT id, title, ts_rank(document, query) as relevanceFROM documents, plainto_tsquery('english', 'database performance') as queryWHERE document @@ queryORDER BY relevance DESC;Advanced Search
-- Phrase searchSELECT * FROM documentsWHERE content @@ phraseto_tsquery('english', 'query optimization');
-- Boolean searchSELECT * FROM documentsWHERE content @@ to_tsquery('english', 'database & (optimization | tuning)');
-- Wildcard searchSELECT * FROM documentsWHERE content @@ to_tsquery('english', 'optim:*'); -- optim*, optimization, etcRanking & Relevance
-- Rank by relevanceSELECT id, title, ts_rank(document, query) as rank, ts_rank_cd(document, query) as rank_detailedFROM documents, plainto_tsquery('english', 'search terms') as queryWHERE document @@ queryORDER BY rank DESC;
-- Custom rankingSELECT id, title, (ts_rank(document, query) * popularity_score) as custom_rankFROM documents, plainto_tsquery('english', 'search') as queryWHERE document @@ queryORDER BY custom_rank DESC;Optimization Techniques
Partial Indexes
-- Index only published articlesCREATE INDEX idx_published_fts ON articles USING FULLTEXT(content)WHERE status = 'PUBLISHED';Covering Indexes
-- Include frequently accessed columnsCREATE INDEX idx_search_covering ON documents USING FULLTEXT(content)INCLUDE (title, author, publish_date);Batch Indexing
-- Disable index during bulk insertALTER INDEX idx_documents_fts DISABLE;INSERT INTO documents (title, content) SELECT ...;ALTER INDEX idx_documents_fts ENABLE;ANALYZE documents;Similarity Search
Basic Similarity
-- Find similar documentsSELECT id, title, similarity(content, 'search text') as simFROM documentsWHERE similarity(content, 'search text') > 0.5ORDER BY sim DESC;Fuzzy Matching
-- Handle misspellingsSELECT id, title, levenshtein(title, 'databaes') as distanceFROM documentsWHERE levenshtein(title, 'databaes') < 3ORDER BY distance;Performance Tuning
Configuration
-- Tune search performanceALTER TABLE documents SET SEARCH_PARAMS ( index_threads = 4, batch_size = 1000, update_interval = 60);
-- Aggressive cachingALTER TABLE documents ENABLE SEARCH_CACHE;ALTER TABLE documents SET CACHE_PARAMS ( max_entries = 10000, ttl_seconds = 3600);Monitoring
-- Search performance metricsSELECT query_text, execution_count, avg_time_ms, cache_hit_rateFROM search_statisticsORDER BY execution_count DESC;Multilingual Search
-- Auto-detect languageCREATE INDEX idx_multilang_fts ON articles USING FULLTEXT(content)WITH (language = 'auto');
-- Search specific languageSELECT * FROM articlesWHERE content @@ to_tsquery('spanish', 'búsqueda');Best Practices
- Create indexes on columns you search frequently
- Use phrase queries for exact matches
- Configure language-specific tokenizers
- Monitor index size and performance
- Rebuild indexes periodically
- Use covering indexes for faster retrieval
Related Documentation: