English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
واجهة برمجة التطبيقات (API) في الويب هي مجموعة من الاستدعاءات أو الأوامر البرمجية، تستخدم للاستفادة من مكونات البرمجيات الخاصة بتلك التطبيق على الويب. على سبيل المثال، تساعد واجهة برمجة API لـ Facebook المطورين في إنشاء التطبيقات عبر الوصول إلى البيانات أو الوظائف من Facebook؛ يمكن أن تكون تاريخ الميلاد أو تحديث الحالة.
يقدم Elasticsearch واجهة API REST، يمكن الوصول إلى هذه الواجهة عبر HTTP. يستخدم Elasticsearch بعض المبادئ التوجيهية، وسنناقشها الآن.
Most operations in the API, mainly searches and other operations, are for one or more indices. This helps users to search in multiple locations or all available data with just one query. Many different symbols are used to perform operations in multiple indices. We will discuss some of them in this chapter.
POST /index1,index2,index3/_search
{ "query":{ "query_string":{ "query":"any_string" } } }
JSON objects from index1, index2, index3 that contain "any_string".
POST /_all/_search
{ "query":{ "query_string":{ "query":"any_string" } } }
JSON objects from all indices that contain "any_string".
POST /school*/_search
{ "query":{ "query_string":{ "query":"CBSE" } } }
JSON objects from all indices that start with schools that contain CBSE.
بالإضافة إلى ذلك، يمكنك أيضًا استخدام الشيفرة التالية-
POST /school*,-schools_gov /_search
{ "query":{ "query_string":{ "query":"CBSE" } } }
JSON objects from all indices that start with "school" but not from "school_gov" and contain CBSE.
هناك بعض معاملات سلسلة URL-
ignore_unavailable−إذا لم يكن هناك فهرس أو أكثر في URL لـ index(es)، لن يحدث خطأ أو سيتوقف أي عملية. على سبيل المثال، يوجد فهرس school، لكن book_shops لا يوجد.
POST /school*,book_shops/_search
{ "query":{ "query_string":{ "query":"CBSE" } } }
{ "error":{ "root_cause":[{ "type":"index_not_found_exception", "reason":"no such index", "resource.type":"index_or_alias", "resource.id":"book_shops", "index":"book_shops" }], "type":"index_not_found_exception", "reason":"no such index", "resource.type":"index_or_alias", "resource.id":"book_shops", "index":"book_shops" },"status":404 }
اعلم ببعض الكود التالي-
POST /school*,book_shops/_search?ignore_unavailable = true
{ "query":{ "query_string":{ "query":"CBSE" } } }
JSON objects from all indices that start with schools that contain CBSE.
trueإذا لم يكن لديه فهرس URL يحتوي على Wildcard، فإن قيمة هذا المعامل ستمنع الخطأ. على سبيل المثال، لا يوجد فهرس يبدأ بـ schools_pri-
POST /schools_pri*/_search?allow_no_indices = true
{ "query":{ "match_all":{} } }
{ "took":1,"timed_out": false, "_shards":{"total":0, "successful":0, "failed":0}, "hits":{"total":0, "max_score":0.0, "hits":[]} }
يحدد هذا المعامل ما إذا كان يجب توسيع العلامة المزدوجة أو الفاصلة العريضة إلى فترات زمنية مفتوحة أو مغلقة أو تنفيذ كلاهما في نفس الوقت. يمكن أن يكون هذا المعامل قائمًا أو مغلقًا أو لا يوجد له قيمة.
على سبيل المثال، إغلاق فترات الزمنية المدرسية-
POST /schools/_close
{"acknowledged":true}
اعلم ببعض الكود التالي-
POST /school*/_search?expand_wildcards = closed
{ "query":{ "match_all":{} } }
{ "error":{ "root_cause":[{ "type":"index_closed_exception", "reason":"closed", "index":"schools" }], "type":"index_closed_exception", "reason":"closed", "index":"schools" }, "status":403 }
يقدم Elasticsearch وظيفة البحث في الفترات الزمنية بناءً على التاريخ والوقت. يجب تحديد التاريخ والوقت بتنسيق معين. على سبيل المثال، إذا كان اسم الفترات الزمنية هو accountdetail-2015.12.30، فإن الفترات الزمنية ستخزن تفاصيل حساب البنك في 30 ديسمبر 2015. يمكن تنفيذ العمليات الرياضية للحصول على تفاصيل التاريخ أو فترة التاريخ والوقت المحددة.
تنسيق اسم الفترات الزمنية الرياضية
<static_name{date_math_expr{date_format|time_zone}}> /<accountdetail-{now-2d{YYYY.MM.dd|utc}}>/_search
static_name هو جزء من التعبير، ويبقى ثابتًا في كل مكانة رياضية للفترة الزمنية (مثل تفاصيل العملاء) في كل تاريخ. يحتوي date_math_expr على تعبير رياضي، ويحدد التاريخ والوقت بشكل ديناميكي مثل now-2d. يحتوي date_format على تنسيق للكتابة في الفترات الزمنية مثل YYYY.MM.dd في الفترات الزمنية. إذا كان اليوم هو 30 ديسمبر 2015، فإن <accountdetail- {now-2d {YYYY.MM.dd}}> سيقوم بإرجاع accountdetail-2015.12.28.
تعبير | تحويل إلى |
---|---|
<accountdetail-{now-d}> | accountdetail-2015.12.29 |
<accountdetail-{now-M}> | accountdetail-2015.11.30 |
<accountdetail-{now{YYYY.MM}}> | accountdetail-2015.12 |
الآن، سنرى بعض الخيارات الشائعة التي يقدمها Elasticsearch التي يمكن استخدامها للحصول على إجابات بتنسيق معين.
يمكننا الحصول على استجابة بتنسيق جيد من JSON عبر إضافة معامل استعلام URL (أي pretty = true).
POST /schools/_search?pretty = true
{ "query":{ "match_all":{} } }
…………………….. { "_index": "schools","_type": "school","_id": "1","_score": 1.0, "_source":{ "name":"Central School","description":"CBSE Affiliation", "street":"Nagan","city":"paprola","state":"HP","zip":"176115", "location": [31.8955385, 76.8380405],"fees":2000, "tags":["Senior Secondary","beautiful campus"],"rating":"3.5" } } ………………….
هذا الخيار يمكنه تحويل إجابات الإحصاء إلى شكل يمكن قراءته من قبل البشر (إذا كان human = true) أو شكل يمكن قراءته من قبل الحاسوب (إذا كان human = false). على سبيل المثال، إذا كان human = true، فإن distance_kilometer = 20KM؛ وإذا كان human = false، فإن distance_meter = 20000، وفي هذه الحالة يجب على برنامج الحاسوب الآلي استخدام الإجابة.
من خلال إضافة إحداهما إلى معامل field_path، يمكننا تصفية الاستجابات لعدد قليل من الحقول. على سبيل المثال،
POST /schools/_search?filter_path = hits.total
{ "query":{ "match_all":{} } }
{"hits":{"total":3}}