אלסטיקסרץ'

ממוזער|קונפיגורציה של Elasticsearch לשרתי ויקיפדיה.
**אלסטיקסרץ' **(באנגלית: **Elasticsearch**) הוא מנוע חיפוש המבוסס על Lucene, המספק יכולת multitenant מבוזרת לחיפוש מעל טקסט מלא. לאלסטיקסרץ' ממשק HTTP ומסמכי JSON נטולי סכמה. אלסטיקסרץ' פותח בג'אווה והוא משוחרר כקוד פתוח תחת רישיון אפאצ'י.

יישומי אלסטיקסרץ' צד לקוח זמינים ב-Java, C#, PHP, Python, Groovy ושפות רבות אחרות. הוא מנוע החיפוש המקצועי (enterprise) הפופולרי ביותר כאשר אחריו סולר (Apache Solr), המבוסס גם הוא על Lucene.

אלסטיקסרץ' מפותח במקביל למנוע איסוף נתונים ופירסור לוגים בשם Logstash, ופלטפורמה לוויזואליזציה ואנליזה בשם Kibana. שלושת המוצרים מיועדים לשימוש בתור פתרון משולב, המכונה "מחסנית אלסטית" (Elastic Stack ולשעבר ELK Stack). בשנת 2015 החברה Logz.io הוציאה אפליקציה לניהול ארכיון המבוססת על טכנולוגיה זו.

ניתן להשתמש באלסטיקסרץ׳ לחיפוש בכל סוגי המסמכים. המנוע מאפשר חיפוש סקלבילי (יכולת לגדול בקצב מהיר ולשמר ביצועים גם בעת שימוש ע״י מס׳ משתמשים רחב) ותומך במולטי-טננטיות (אינסטנס אחד יכול לשמש קבוצות משתמשים שונות).

## אופן הפעולה
המנוע משתמש בשיטת חיפוש המבוססת על אינדקס. כלומר, במקרה של המנוע היחידה הקטנה ביותר איתה המנוע עובד היא מסמך, ולכן יש להוסיף אינדקס לכל מסמך. לדוגמה, במקרה בו רוצים לערוך חיפוש אלסטיקסרץ׳ על מידע הנוגע לספרים, יש לקחת את המידע הנתון על כל ספר ולהכניס למסמך, ולאנדקס את אותו מסמך. האינדקס תואם במובן מסוים טבלת SQL, באופן בו מסמך מהווה שורה בטבלה. עם זאת, מספרי הסוגים ומספרי השדות אינם מוכרחים להיות מוגדרים באופן נוקשה (strict), אם כי ניתן להגדירם במפורש על ידי Type Assignment (מיפוי).

כדי לאנדקס מסמך, יש להכניס אותו לאלסטיקסרץ׳ בפורמט JSON (הכולל סט של זוגות מפתח-ערך). דוגמה למסמך המתאר ספר:
```json
{
 "title" : "grenades-powerful search engine technology" ,
 "author" : "Michael Käfer" ,
 "year of publication" : "1794" ,
 "publisher" : "Müller-Verlag"
}
```
בדומה לכך, שאילתות הנשלחות לאלסטיקסרץ׳ גם הן בפורמט JSON. כך למשל, הדוגמה לעיל היא תוצאה אפשרית לשאילתת האלסטיקסרץ׳ הבאה:
```json
{
 "query" : {
 "match" : {
 "title" : "search engine technology"
 }
 }
}
```
החלק החשוב ביותר בשאילתת החיפוש הוא פרמטר **השאילתא** (query), שכן התוכן שלו קובע אילו מסמכים יימצאו באיזה סדר. יתר הפרמטרים הם **גודל** (size) הקובע את מספר ההתאמות המרבי, **מהיכן** (from) המשמש לחלוקת רשימות התאמות ארוכות על פני מספר עמודים, **_מקור** (_source) המאפשר לא לקבל מסמכים שלמים כתוצאות, אלא רק שדות מסוימים של מסמכים אלה, **ומיון** (sort), המאפשר מיון חלופי של התוצאות לבחירת המשתמש.

ניתן לכלול פרמטרים שונים בשאילתא. להלן מס׳ דוגמאות:

מציאת כל המסמכים:
```json
"match_all" : { }
```

מציאת כל המסמכים עם המילים ״grenade strngth״ בכותרת (שדה הכותרת):
```json
"match" : {
 "title" : "grenades"
}
```

מציאת כל המסמכים עם המילים ״grenade strngth״ בכותרת **או** בשם הכותב (שדה הכותב):
```json
"multi_match" : {
 "query" : "grenades" ,
 "_source" : [ "title" , "author" ]
}
```

מציאת מסמכים הממלאים את התנאים הבאים:

1. המילה ״quick״ מוכרחה להימצא בכותרת.

2. למילה ״lazy״ אסור להופיע בכותרת.

3. לפחות אחת מהמילים ״brown״ או ״green״ מוכרחות להימצא בכותרת:
```json
"bool" : {
 "must" : {
 "match" : { "title" : "quick" }
 },
 "must_not" : {
 "match" : { "title" : "lazy" }
 },
 "should" : {
 "match" : { "title" : "brown" },
 "match" : { "title" : "green" }
 }
}
```


## קישורים חיצוניים

* 

## הערות שוליים

קטגוריה:מנועי חיפוש