משתמשים מגיעים לאתר, מקלידים שאילתה... וכלום. אפס תוצאות. או גרוע מכך — מאות עמודים ללא פילטרים. חיפוש MySQL סטנדרטי עם # docker-compose.yml services: typesense: image: typesense/typesense:0.25.2 command: > --data-dir /data --api-key=${TYPESENSE_API_KEY} --listen-port=8108 --enable-cors volumes: - typesense_data:/data ports: - "8108:8108" כבר לא יכול להתמודד עם התחרות. לפי הסטטיסטיקות, 70% מהמשתמשים עוזבים את האתר אם הם לא מוצאים את המוצר הרצוי בתוך 3 השניות הראשונות. עם חיפוש LIKE, זמן התגובה גדל באופן ליניארי עם גודל מסד הנתונים: על 100,000 רשומות הוא מגיע ל-2-3 שניות. Typesense, לעומת זאת, מעבד שאילתות ב-15-50 אלפיות השנייה, מהיר פי 200. אנחנו פותרים בעיה זו על ידי שילוב Typesense — מנוע חיפוש שמגיב באלפיות השנייה ומספק תוצאות רלוונטיות אפילו על מאגרי מיליוני מסמכים. המעבר ל-Typesense חוסך עד 60% מהתקציב בהשוואה ל-Algolia, ועלות השילוב מחזירה את עצמה תוך 3-6 חודשים.
למה Typesense?
Typesense כתוב ב-C++ ומציג את עצמו כאלטרנטיבה מתארחת עצמית ל-Algolia. התכונה המרכזית שלו היא סכמת אוסף קפדנית שמבטיחה שלמות נתונים וזמן תגובה יציב (באופן עקבי מתחת ל-50 אלפיות השנייה). בניגוד ל-Meilisearch, ל-Typesense יש אשכולות מובנים דרך אלגוריתם Raft, תמיכה בחיפוש וקטורי דרך HNSW, וחיפוש גיאוגרפי מובנה. תיעוד Typesense טוען שעל מאגר של 10 מיליון מסמכים, זמן התגובה הממוצע אינו עולה על 30 אלפיות השנייה.
| מאפיין | Typesense | Meilisearch |
|---|---|---|
| שפת פיתוח | C++ | Rust |
| אשכולות | מובנה (Raft) | לא קיים ב-OSS |
| חיפוש וקטורי | כן (HNSW) | כן (מגרסה 1.6) |
| חיפוש גיאוגרפי | כן, מובנה | כן |
| ניתוח שאילתות | מובנה | דרך כלים של צד שלישי |
| סכמה קפדנית | חובה | אופציונלי |
Typesense מהיר פי שניים עד שלושה מ-Meilisearch בשאילתות עם פנים (facets) בזכות ניתוח מובנה ואינדוקס יעיל יותר. ניסיון השילוב שלנו מאשר: לאחר מעבר מ-Elasticsearch, זמן התגובה הממוצע ירד מ-200 אלפיות השנייה ל-15 אלפיות השנייה, ודיוק החיפוש הגיע ל-95%.
איך אנחנו מגדירים את Typesense
תהליך השילוב כולל 5 שלבים:
- פריסה — הרצת Typesense בקונטיינר Docker עם מפתח API ופורט.
- יצירת סכמה — הגדרת אוספים עם סוגי שדות קפדניים ופנים (facets).
- אינדוקס — כתיבת סקריפט לסנכרון נתונים ממסד הנתונים ל-Typesense בקבוצות.
- רכיב פרונטאנד — פיתוח סרגל חיפוש עם השלמה אוטומטית, פנים ומיון.
- כוונון עדין — בדיקת רלוונטיות, התאמת משקלי שדות ומילים נרדפות.
פריסה ויצירת אוסף
Typesense נפרס בקלות דרך Docker. דוגמה { "name": "products", "fields": [ { "name": "id", "type": "string" }, { "name": "name", "type": "string" }, { "name": "description", "type": "string" }, { "name": "price", "type": "float", "facet": true }, { "name": "category", "type": "string", "facet": true }, { "name": "brand", "type": "string", "facet": true }, { "name": "in_stock", "type": "bool", "facet": true }, { "name": "rating", "type": "float", "optional": true }, { "name": "location", "type": "geopoint","optional": true } ], "default_sorting_field": "rating" } :
---
# docker-compose.yml services: typesense: image: typesense/typesense:0.25.2 command: > --data-dir /data --api-key=${TYPESENSE_API_KEY} --listen-port=8108 --enable-cors volumes: - typesense_data:/data ports: - "8108:8108"
---לאחר ההפעלה, אנחנו יוצרים אוסף עם סכמה קפדנית. עלינו לציין סוגי שדות ודגל פנים:
{
"name": "products",
"fields": [
{
"name": "id",
"type": "string"
},
{
"name": "name",
"type": "string"
},
{
"name": "description",
"type": "string"
},
{
"name": "price",
"type": "float",
"facet": true
},
{
"name": "category",
"type": "string",
"facet": true
},
{
"name": "brand",
"type": "string",
"facet": true
},
{
"name": "in_stock",
"type": "bool",
"facet": true
},
{
"name": "rating",
"type": "float",
"optional": true
},
{
"name": "location",
"type": "geopoint",
"optional": true
}
],
"default_sorting_field": "rating"
} אינדוקס נתונים
אנחנו כותבים אינדקסר ב-PHP (או Python/Node — לפי בחירת הלקוח). הוא טוען נתונים ממסד הנתונים ל-Typesense בקבוצות של 1000 מסמכים. כל מסמך חייב להכיל את כל שדות הסכמה. עבור upsert אנחנו משתמשים ב-import עם פעולת 'upsert':
$documents = $products->map(fn($p) => [
'id' => (string) $p->id,
'name' => $p->name,
'price' => (float) $p->price,
'category' => $p->category->slug,
'in_stock' => $p->stock > 0,
])->toArray();
$client->collections['products']->documents->import(
$documents,
['action' => 'upsert']
);
חיפוש עם פנים בפרונטאנד
בצד הלקוח, אנחנו מיישמים סרגל חיפוש עם השלמה אוטומטית (suggestions) ופילטרים לפי קטגוריה, מותג, מחיר. Typesense מחזיר צבירות פנים שמאפשרות עדכון ספירת התוצאות לכל פילטר ללא בקשה שנייה.
$results = $client->collections['products']->documents->search([
'q' => $query,
'query_by' => 'name,description,brand',
'query_by_weights' => '3,1,2',
'filter_by' => 'in_stock:true && price:[100..5000]',
'facet_by' => 'category,brand,price',
'max_facet_values' => 20,
'sort_by' => 'rating:desc',
'per_page' => 20,
'page' => 1,
]); איך Typesense תומך בחיפוש וקטורי
לחיפוש סמנטי, Typesense מקבל וקטורי embedding. ה-Embeddings נוצרים בצד היישום (OpenAI, Cohere), ולאחר מכן הווקטורים מועברים ל-Typesense. חיפוש היברידי (טקסט + וקטור) נתמך, ומאפשר למצוא מסמכים לפי משמעות, לא רק התאמות מדויקות. זה שימושי במיוחד עבור קטלוגים גדולים של מוצרים: לדוגמה, השאילתה "סמארטפון זול עם מצלמה טובה" תחזיר דגמים רלוונטיים גם אם המילים האלה לא מופיעות בתיאור.
טעויות נפוצות בשילוב
- בחירת סכמה שגויה — אם שדה לא מסומן כפנים, אי אפשר להשתמש בו לסינון. שינוי הסכמה לאחר תחילת האינדוקס הוא קשה (יש ליצור את האוסף מחדש).
- יותר מדי שדות פנים — ככל שיש יותר שדות פנים, הכתיבה איטית יותר. אנחנו ממליצים על לא יותר מ-10.
- התעלמות מניתוח — Typesense מאחסן סטטיסטיקות שאילתות עבור שאילתות ללא תוצאות. נתונים אלה עוזרים לשפר מילים נרדפות ומילות עצירה.
מה כלול בעבודה?
- ביקורת חיפוש נוכחית — ניתוח שאילתות, שגיאות, רלוונטיות.
- פריסת Typesense — קונטיינר Docker על השרת שלך או בענן.
- יצירת סכמת אוסף — מותאמת למבנה הנתונים שלך.
- אינדקסר לסנכרון — קוד ב-PHP/Node/Python עם טיפול בדלתא.
- רכיב חיפוש פרונטאנד — עם השלמה אוטומטית, פנים, מיון וחיפוש גיאוגרפי (אופציונלי).
- בדיקות וכוונון רלוונטיות — משקלי שדות, מילים נרדפות, מילות עצירה.
- תיעוד והדרכה — תיאור API ותצורה עבור הצוות שלך.
- הבטחת תוצאות — אנחנו מבטיחים זמן תגובה מתחת ל-50 אלפיות השנייה ודיוק חיפוש עד 95%.
כמה זמן לוקח השילוב?
| שלב | זמן |
|---|---|
| פריסה, סכמת אוסף | יום אחד |
| אינדקסר + סנכרון | יומיים |
| חיפוש עם פנים בפרונטאנד | 2–3 ימים |
| חיפוש וקטורי (אופציונלי) | יומיים נוספים |
| בדיקות, רלוונטיות | יום אחד |
שילוב סטנדרטי ללא חיפוש וקטורי לוקח 6–7 ימי עבודה. העלות מחושבת באופן אישי — צרו קשר ונעריך את הפרויקט שלכם.
רוצים לשפר את החיפוש באתר שלכם? צרו קשר — נספק אבחון חינמי ואינדוקס פיילוט. בקשו ייעוץ עכשיו.







