Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



בפוסט זה, נלמד כיצד לתרגם חיפוש SQL לבקשת API חוקית של Elasticsearch שמכילה שפה ספציפית ל-Query Domain המבוססת על JSON.

למרות שזה ממשק API קטן, זה כלי מאוד מועיל, במיוחד למפתחים המגיעים מבסיסי נתונים של SQL. זה גם יכול לצמצם את עקומת הלמידה על ידי קישור מהיר של שאילתות SQL לשאילתות החיפוש המתאימות.

לאחר מכן תוכל לחקור את היכולות המלאות של ה-API לחיפוש Elasticsearch ואת שפות השאילתות הנתמכות.







יש לזכור שלמרות ש-Elasticsearch אכן תומך ב-SQL, הוא מכיל מגבלות שונות.



תחביר שאילתות

הבא מציג את התחביר של ממשק API לתרגום:



GET _sql/translate

{

request_body

}

אתה יכול גם לשלוח בקשת פרסום ל-Translate API כפי שמוצג בתחביר הבא:





POST _sql/translate

{

request_body

}

בהתאם לתצורת האשכול שלך, ה-API עשוי לדרוש הרשאות קריאה באינדקס שאת הנתונים שלו ברצונך לבצע שאילתה. ניתן גם לציין את משאב היעד ככינוי אינדקס או כזרם נתונים.

ב-request_body, אתה יכול לציין את כל פרמטרי גוף הבקשה של SQL Search API. למידע נוסף, עיין במסמכים המסופקים במשאב הבא:



https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html#sql-search-api-request-body

כתגובה, השאילתה צריכה להחזיר את התוצאה התואמת ל-API של החיפוש עם הנתונים הנשאלים.

דוגמא

כדי להמחיש בצורה הטובה ביותר כיצד להשתמש ב-API זה, נניח שיש לנו אינדקס בשם 'נטפליקס' המכיל את כל הנתונים על סרטים ותוכניות טלוויזיה של נטפליקס.

נניח שאנו רוצים להביא את חמשת הסרטים המובילים מאינדקס נטפליקס שהוצאנו בשנת 2020 ומעלה:

ניתן לבטא את שאילתת SQL המקבילה כפי שמוצג להלן:

בחר כותרת, משך זמן, דירוג, הקלד FROM netflix WHERE סוג = 'סרט' AND release_year >= 2020

כדי לבצע את חיפוש ה-SQL הנ'ל ב-Elasticsearch, נוכל להכניס אותו ל-SQL Search API כפי שמוצג להלן:

תלתל -XGET 'http://localhost:9200/_sql?format=txt' 'kbn-xsrf: דיווח' 'סוג תוכן: application/json' '

{

'שאילתא': ' \n בחר כותרת, משך זמן, דירוג, הקלד FROM 'netflix' WHERE type = '
\ '' סרט ' \' ' AND release_year >= 2020 \n ',

'
fetch_size ': 5

}'

הבקשה הקודמת צריכה לבצע שאילתה באינדקס ולהביא את הרשומות התואמות. פלט ההחזר הוא בפורמט טקסט כמפורט להלן:

כפי שאנו יכולים לראות, Elasticsearch מחזירה את הפלט הצפוי.

כדי להחזיר את הפלט כ-JSON, נוכל להגדיר את הפורמט ל-JSON כפי שמוצג להלן:

תלתל -XGET 'http://localhost:9200/_sql?format=json' 'kbn-xsrf: דיווח' 'סוג תוכן: application/json' '

{

'שאילתא': ' \n בחר כותרת, משך זמן, דירוג, הקלד FROM 'netflix' WHERE type = '
\ '' סרט ' \' ' AND release_year >= 2020 \n ',

'
fetch_size ': 5

}'

תְפוּקָה:

המרת שאילתת SQL לבקשת חיפוש

כדי להמיר את שאילתת החיפוש הקודמת של SQL לבקשת Elasticsearch, נוכל להעביר אותה ל-Translate API כפי שמוצג להלן:

תלתל -XGET 'http://localhost:9200/_sql/translate' 'kbn-xsrf: דיווח' 'סוג תוכן: application/json' '

{

'שאילתא': ' \n בחר כותרת, משך זמן, דירוג, הקלד FROM 'netflix' WHERE type = '
\ '' סרט ' \' ' AND release_year >= 2020 \n ',

'
fetch_size ': 5

}'

ה-API צריך לנתח את קלט SQL הקלט ולהמיר אותו לבקשת חיפוש חוקית, כפי שמוצג בפלט הבא:

{
'גודל' : 5 ,
'שאילתא' : {
'בול' : {
'צריך' : [
{
'טווח' : {
'סוּג' : {
'ערך' : 'סרט'
}
}
},
{
'טווח' : {
'שנת_שחרור' : {
'gte' : 2020 ,
'לְהַגבִּיר' : 1
}
}
}
],
'לְהַגבִּיר' : 1
}
},
'_מָקוֹר' : שקר,
'שדות' : [
{
'שדה' : 'כותרת'
},
{
'שדה' : 'מֶשֶׁך'
},
{
'שדה' : 'דֵרוּג'
},
{
'שדה' : 'סוּג'
}
],
'סוג' : [
{
'_doc' : {
'להזמין' : 'אסק'
}
}
]
}

לאחר מכן תוכל להשתמש בפורמט הבקשה הזה כדי לשלוח אל ה-API לחיפוש Elasticsearch כפי שמוצג להלן:

תלתל -XPOST 'http://localhost:9200/netflix/_search' 'kbn-xsrf: דיווח' 'סוג תוכן: application/json' '
{
'גודל': 5,
'שאילתא': {
'בול': {
'צריך': [
{
'טווח': {
'סוג': {
'value': 'סרט'
}
}
},
{
'טווח': {
'release_year': {
'gte': 2020,
'חיזוק': 1
}
}
}
],
'חיזוק': 1
}
},
'_source': false,
'שדות': [
{
'field': 'כותרת'
},
{
'field': 'משך זמן'
},
{
'field': 'דירוג'
},
{
'סוג שדה'
}
],
'סוג': [
{
'_doc': {
'order': 'asc'
}
}
]
}'

באופן דומה, הבקשה צריכה להחזיר נתונים דומים כפי שמוצג להלן:

סיכום

באמצעות פוסט זה, גילית כיצד תוכל להשתמש בשאילתות SQL כדי להביא נתונים מאינדקס Elasticsearch קיים. למדת גם כיצד להשתמש ב-translate SQL API כדי להמיר שאילתת SQL חוקית לבקשת Elasticsearch.