Meilisearch & Typesense
Also Known As
Meilisearch
Typesense
self-hosted search
open-source search
TL;DR
Open-source, self-hosted search engines with PHP SDKs — fast BM25 search, typo-tolerance, and faceting without the operational complexity of Elasticsearch.
Explanation
Meilisearch (Rust, MIT license) and Typesense (C++, open core) are modern search servers optimised for developer experience. Both provide: BM25 relevance ranking, typo-tolerance, faceting and filtering, geosearch, and sub-50ms response times. Meilisearch has a simpler API and easier setup; Typesense has stronger multi-tenancy support. Both have official PHP SDKs. For most PHP applications needing search, either is a better choice than Elasticsearch due to lower operational overhead and simpler configuration.
Common Misconception
✗ Elasticsearch is required for production search — Elasticsearch is powerful but operationally complex; Meilisearch handles most search needs with 10x less operational overhead and a simpler PHP integration.
Why It Matters
A PHP glossary with LIKE search returns misspelled terms as 'not found' — Meilisearch's typo-tolerance matches 'php arry' to 'php array' automatically, with no extra code.
Common Mistakes
- Indexing data in real-time on every write — batch index updates in a queue worker to avoid blocking requests.
- Not configuring filterable and sortable attributes before indexing — adding them later requires re-indexing.
- Storing all document fields in the search index — only index searchable fields; store others in your DB.
- Not setting searchable attributes priority — title should rank higher than body text.
Code Examples
✗ Vulnerable
// LIKE search — slow, no relevance, no typo tolerance:
$results = $pdo->query(
"SELECT * FROM glossary WHERE term LIKE '%" . $db->escape($q) . "%'
OR body LIKE '%" . $db->escape($q) . "%'"
)->fetchAll();
// Issues: no ranking, O(n) scan, no typos, injection risk
✓ Fixed
// Meilisearch PHP SDK:
$client = new \Meilisearch\Client('http://localhost:7700');
$index = $client->index('glossary');
// Index a term:
$index->addDocuments([[
'id' => $term['slug'],
'term' => $term['term'],
'short' => $term['short'],
'category' => $term['category'],
]]);
// Search:
$results = $index->search($query, [
'limit' => 20,
'filter' => 'category = security',
'sort' => ['term:asc'],
]);
// Typo-tolerant, ranked, facetable — 5ms response
Tags
🤝 Adopt this term
£79/year · your link shown here
Added
16 Mar 2026
Edited
22 Mar 2026
Views
24
🤖 AI Guestbook educational data only
|
|
Last 30 days
Agents 0
No pings yet today
No pings yesterday
Perplexity 7
Amazonbot 6
Unknown AI 2
Ahrefs 2
Google 1
How they use it
crawler 18
Related categories
⚡
DEV INTEL
Tools & Severity
🟡 Medium
⚙ Fix effort: Medium
⚡ Quick Fix
Use Meilisearch for self-hosted search (zero config, excellent defaults) or Typesense for a simpler managed option — both are dramatically simpler than Elasticsearch for typical PHP app search
📦 Applies To
PHP 7.0+
web
api
laravel
🔗 Prerequisites
🔍 Detection Hints
LIKE '%term%' full scan; MySQL FULLTEXT at its limits with poor relevance; Elasticsearch overkill for app search feature
Auto-detectable:
✗ No
laravel-scout
meilisearch
typesense
⚠ Related Problems
🤖 AI Agent
Confidence: Low
False Positives: Medium
✗ Manual fix
Fix: Medium
Context: File
Tests: Update