Elasticsearch - อนุสัญญา API
Application Programming Interface (API) ในเว็บคือกลุ่มของการเรียกใช้ฟังก์ชันหรือคำสั่งการเขียนโปรแกรมอื่น ๆ เพื่อเข้าถึงส่วนประกอบซอฟต์แวร์ในเว็บแอปพลิเคชันนั้น ๆ ตัวอย่างเช่น Facebook API ช่วยให้นักพัฒนาสร้างแอปพลิเคชันโดยเข้าถึงข้อมูลหรือฟังก์ชันอื่น ๆ จาก Facebook อาจเป็นวันเดือนปีเกิดหรืออัปเดตสถานะ
Elasticsearch จัดเตรียม REST API ซึ่งเข้าถึงโดย JSON ผ่าน HTTP Elasticsearch ใช้อนุสัญญาบางประการซึ่งเราจะพูดถึงในตอนนี้
ดัชนีหลายตัว
การดำเนินการส่วนใหญ่โดยส่วนใหญ่เป็นการค้นหาและการดำเนินการอื่น ๆ ใน API มีไว้สำหรับดัชนีหนึ่งหรือมากกว่าหนึ่งดัชนี สิ่งนี้ช่วยให้ผู้ใช้ค้นหาในหลาย ๆ ที่หรือข้อมูลที่มีอยู่ทั้งหมดโดยดำเนินการค้นหาเพียงครั้งเดียว มีการใช้สัญกรณ์ที่แตกต่างกันจำนวนมากเพื่อดำเนินการในหลายดัชนี เราจะพูดถึงบางส่วนที่นี่ในบทนี้
เครื่องหมายจุลภาคคั่น
POST /index1,index2,index3/_search
ร้องขอร่างกาย
{
"query":{
"query_string":{
"query":"any_string"
}
}
}
การตอบสนอง
ออบเจ็กต์ JSON จาก index1, index2, index3 ที่มี any_string อยู่ในนั้น
_all คำหลักสำหรับดัชนีทั้งหมด
POST /_all/_search
ร้องขอร่างกาย
{
"query":{
"query_string":{
"query":"any_string"
}
}
}
การตอบสนอง
ออบเจ็กต์ JSON จากดัชนีทั้งหมดและมี any_string อยู่ในนั้น
สัญลักษณ์แทน (*, +, -)
POST /school*/_search
ร้องขอร่างกาย
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
การตอบสนอง
ออบเจ็กต์ JSON จากดัชนีทั้งหมดซึ่งเริ่มต้นด้วยโรงเรียนที่มี CBSE อยู่
หรือคุณสามารถใช้รหัสต่อไปนี้ได้เช่นกัน -
POST /school*,-schools_gov /_search
ร้องขอร่างกาย
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
การตอบสนอง
ออบเจ็กต์ JSON จากดัชนีทั้งหมดที่ขึ้นต้นด้วย "school" แต่ไม่ใช่จาก Schools_gov และมี CBSE อยู่
นอกจากนี้ยังมีพารามิเตอร์สตริงการสืบค้น URL -
- ignore_unavailable- จะไม่มีข้อผิดพลาดเกิดขึ้นหรือจะไม่มีการหยุดการดำเนินการหากไม่มีดัชนีอย่างน้อยหนึ่งรายการใน URL ตัวอย่างเช่นมีดัชนีโรงเรียน แต่ไม่มีร้านหนังสือ
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 จากดัชนีทั้งหมดซึ่งเริ่มต้นด้วยโรงเรียนที่มี CBSE อยู่
allow_no_indices
trueค่าของพารามิเตอร์นี้จะป้องกันข้อผิดพลาดหาก URL ที่มีสัญลักษณ์แทนส่งผลให้ไม่มีดัชนี ตัวอย่างเช่นไม่มีดัชนีที่ขึ้นต้นด้วย 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":[]}
}
expand_wildcards
พารามิเตอร์นี้ตัดสินว่าจำเป็นต้องขยายสัญลักษณ์แทนเป็นดัชนีเปิดหรือดัชนีปิดหรือดำเนินการทั้งสองอย่าง ค่าของพารามิเตอร์นี้สามารถเปิดและปิดหรือไม่มีและทั้งหมด
ตัวอย่างเช่นปิดโรงเรียนดัชนี -
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- {ตอนนี้ {YYYY.MM}}> | accountdetail-2015.12.2018 |
ตอนนี้เราจะเห็นตัวเลือกทั่วไปบางตัวที่มีอยู่ใน 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 ดังนั้น distance_kilometer = 20KM และถ้า human = false แล้ว distance_meter = 20000 เมื่อต้องใช้การตอบสนองโดยโปรแกรมคอมพิวเตอร์อื่น
การกรองการตอบสนอง
เราสามารถกรองการตอบสนองให้น้อยลงโดยเพิ่มในพารามิเตอร์ field_path ตัวอย่างเช่น,
POST /schools/_search?filter_path = hits.total
ร้องขอร่างกาย
{
"query":{
"match_all":{}
}
}
การตอบสนอง
{"hits":{"total":3}}