Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



في هذا المنشور ، سنتعلم كيفية ترجمة بحث SQL إلى طلب صالح لواجهة برمجة تطبيقات بحث Elasticsearch يحتوي على لغة خاصة بمجال الاستعلام بالكامل استنادًا إلى JSON.

على الرغم من أن هذه واجهة برمجة تطبيقات صغيرة ، إلا أنها أداة مفيدة للغاية ، خاصة للمطورين القادمين من قواعد بيانات SQL. يمكنه أيضًا تقليل منحنى التعلم عن طريق ربط استعلامات SQL بسرعة باستعلامات البحث المقابلة.

يمكنك بعد ذلك استكشاف الإمكانات الكاملة لواجهة برمجة تطبيقات بحث Elasticsearch ولغات الاستعلام المدعومة.







يجب أن تضع في اعتبارك أنه على الرغم من أن Elasticsearch يدعم SQL ، إلا أنه يحتوي على قيود مختلفة.



صيغة الاستعلام

يوضح ما يلي بناء جملة API للترجمة:



الحصول على _sql / ترجمة

{

طلب_جسم

}

يمكنك أيضًا إرسال طلب نشر إلى واجهة برمجة التطبيقات للترجمة كما هو موضح في البنية التالية:





POST _sql / ترجمة

{

طلب_جسم

}

اعتمادًا على تكوين نظام المجموعة الخاص بك ، قد تتطلب واجهة برمجة التطبيقات (API) امتيازات قراءة على الفهرس الذي ترغب في الاستعلام عن بياناته. يمكنك أيضًا تحديد المورد الهدف كاسم مستعار فهرس أو دفق بيانات.

في request_body ، يمكنك تحديد جميع معلمات نص طلب واجهة برمجة تطبيقات بحث SQL. استكشف المستندات المتوفرة في المورد التالي لمعرفة المزيد:



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

كاستجابة لذلك ، يجب أن يعرض الاستعلام النتيجة المطابقة لواجهة برمجة تطبيقات البحث مع البيانات التي تم الاستعلام عنها.

مثال

لتوضيح كيفية استخدام واجهة برمجة التطبيقات هذه بشكل أفضل ، سنفترض أن لدينا فهرسًا يسمى 'netflix' يحتوي على جميع البيانات حول أفلام Netflix والبرامج التلفزيونية.

لنفترض أننا نرغب في جلب أفضل خمسة أفلام من فهرس Netflix الذي أصدرناه في عام 2020 وما فوق:

يمكن التعبير عن استعلام SQL المكافئ كما هو موضح أدناه:

حدد العنوان والمدة والتصنيف واكتب من netflix حيث النوع = 'فيلم' AND release_year> = 2020

لتنفيذ بحث SQL أعلاه في Elasticsearch ، يمكننا وضعه في واجهة برمجة تطبيقات بحث SQL كما هو موضح أدناه:

حليقة -XGET 'http://localhost:9200/_sql?format=txt' 'kbn-xsrf: إعداد التقارير' 'نوع المحتوى: application / json' '

{

'استفسار': ' حدد العنوان والمدة والتصنيف واكتب من 'netflix' حيث النوع = '
\ ' فيلم ' \ ' ' AND release_year> = 2020

'
fetch_size ': 5

} '

يجب أن يقوم الطلب السابق بالاستعلام عن الفهرس وجلب السجلات المطابقة. ناتج الإرجاع بتنسيق نصي كما هو موضح أدناه:

كما نرى ، يقوم Elasticsearch بإرجاع الناتج المتوقع.

لإرجاع الإخراج كـ JSON ، يمكننا ضبط التنسيق على JSON كما هو موضح أدناه:

حليقة -XGET 'http://localhost:9200/_sql?format=json' 'kbn-xsrf: إعداد التقارير' 'نوع المحتوى: application / json' '

{

'استفسار': ' حدد العنوان والمدة والتصنيف واكتب من 'netflix' حيث النوع = '
\ ' فيلم ' \ ' ' AND release_year> = 2020

'
fetch_size ': 5

} '

انتاج:

تحويل استعلام SQL إلى طلب البحث

لتحويل استعلام بحث SQL السابق إلى طلب Elasticsearch ، يمكننا تمريره إلى واجهة برمجة التطبيقات للترجمة كما هو موضح أدناه:

حليقة -XGET 'http://localhost:9200/_sql/translate' 'kbn-xsrf: إعداد التقارير' 'نوع المحتوى: application / json' '

{

'استفسار': ' حدد العنوان والمدة والتصنيف واكتب من 'netflix' حيث النوع = '
\ ' فيلم ' \ ' ' AND release_year> = 2020

'
fetch_size ': 5

} '

يجب على API تحليل إدخال SQL وتحويله إلى طلب بحث صالح ، كما هو موضح في الإخراج التالي:

{
'بحجم' : 5 و
'استفسار' : {
'منطقي' : {
'يجب' : [
{
'مصطلح' : {
'يكتب' : {
'القيمة' : 'فيلم'
}
}
} ،
{
'نطاق' : {
'سنة الإصدار' : {
'gte' : 2020 و
'تعزيز' : 1
}
}
}
] ،
'تعزيز' : 1
}
} ،
'_مصدر' : خاطئة،
'مجالات' : [
{
'مجال' : 'لقب'
} ،
{
'مجال' : 'المدة الزمنية'
} ،
{
'مجال' : 'تقييم'
} ،
{
'مجال' : 'يكتب'
}
] ،
'فرز' : [
{
'_doc' : {
'ترتيب' : 'تصاعدي'
}
}
]
}

يمكنك بعد ذلك استخدام تنسيق الطلب هذا للإرسال إلى Elasticsearch API كما هو موضح أدناه:

حليقة -XPOST 'http://localhost:9200/netflix/_search' 'kbn-xsrf: إعداد التقارير' 'نوع المحتوى: application / json' '
{
'حجم 5،
'استفسار': {
'منطقي': {
'يجب': [
{
'مصطلح': {
'يكتب': {
'القيمة': 'الفيلم'
}
}
} ،
{
'نطاق': {
'سنة الإصدار': {
'gte': 2020،
'دفعة': 1
}
}
}
] ،
'دفعة': 1
}
} ،
'_source': خطأ ،
'مجالات': [
{
'الحقل': 'العنوان'
} ،
{
'الحقل': 'المدة'
} ،
{
'الحقل': 'التصنيف'
} ،
{
'نوع الحقل'
}
] ،
'فرز': [
{
'_doc': {
'ترتيب': 'تصاعدي'
}
}
]
} '

وبالمثل ، يجب أن يعرض الطلب بيانات مماثلة كما هو موضح أدناه:

استنتاج

من خلال هذا المنشور ، اكتشفت كيف يمكنك استخدام استعلامات SQL لجلب البيانات من فهرس Elasticsearch موجود. لقد تعلمت أيضًا كيفية استخدام ترجمة SQL API لتحويل استعلام SQL صالح إلى طلب Elasticsearch.