Elasticsearch - Permintaan DSL
Di Elasticsearch, pencarian dilakukan dengan menggunakan query berbasis JSON. Kueri terdiri dari dua klausa -
Leaf Query Clauses - Klausul ini cocok, istilah atau rentang, yang mencari nilai tertentu di bidang tertentu.
Compound Query Clauses - Kueri ini adalah kombinasi klausa kueri daun dan kueri gabungan lainnya untuk mengekstrak informasi yang diinginkan.
Elasticsearch mendukung sejumlah besar kueri. Sebuah kueri dimulai dengan kata kunci kueri dan kemudian memiliki kondisi dan filter di dalamnya dalam bentuk objek JSON. Berbagai jenis kueri telah dijelaskan di bawah ini.
Cocokkan Semua Kueri
Ini adalah pertanyaan paling dasar; itu mengembalikan semua konten dan dengan skor 1,0 untuk setiap objek.
POST /schools/_search
{
"query":{
"match_all":{}
}
}
Saat menjalankan kode di atas, kami mendapatkan hasil sebagai berikut -
{
"took" : 7,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 1.0,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
},
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
}
}
Kueri Teks Lengkap
Kueri ini digunakan untuk menelusuri seluruh teks seperti bab atau artikel berita. Kueri ini bekerja sesuai dengan penganalisis yang terkait dengan indeks atau dokumen tersebut. Di bagian ini, kita akan membahas berbagai jenis kueri teks lengkap.
Cocokkan kueri
Kueri ini mencocokkan teks atau frasa dengan nilai dari satu atau beberapa bidang.
POST /schools*/_search
{
"query":{
"match" : {
"rating":"4.5"
}
}
}
Saat menjalankan kode di atas, kami mendapatkan respons seperti yang ditunjukkan di bawah ini -
{
"took" : 44,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.47000363,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 0.47000363,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
}
}
Query Multi Match
Kueri ini cocok dengan teks atau frasa dengan lebih dari satu bidang.
POST /schools*/_search
{
"query":{
"multi_match" : {
"query": "paprola",
"fields": [ "city", "state" ]
}
}
}
Saat menjalankan kode di atas, kami mendapatkan respons seperti yang ditunjukkan di bawah ini -
{
"took" : 12,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.9808292,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 0.9808292,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
]
}
}
Kueri String Query
Kueri ini menggunakan parser kueri dan kata kunci_string kueri.
POST /schools*/_search
{
"query":{
"query_string":{
"query":"beautiful"
}
}
}
Saat menjalankan kode di atas, kami mendapatkan respons seperti yang ditunjukkan di bawah ini -
{
"took" : 60,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
………………………………….
Kueri Tingkat Istilah
Kueri ini terutama berhubungan dengan data terstruktur seperti angka, tanggal, dan enum.
POST /schools*/_search
{
"query":{
"term":{"zip":"176115"}
}
}
Saat menjalankan kode di atas, kami mendapatkan respons seperti yang ditunjukkan di bawah ini -
……………………………..
hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 0.9808292,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
}
}
]
…………………………………………..
Kueri Rentang
Kueri ini digunakan untuk menemukan objek yang memiliki nilai di antara rentang nilai yang diberikan. Untuk ini, kita perlu menggunakan operator seperti -
- gte - lebih besar dari sama dengan
- gt - lebih besar dari
- lte - kurang dari sama dengan
- lt - kurang dari
Misalnya, perhatikan kode yang diberikan di bawah ini -
POST /schools*/_search
{
"query":{
"range":{
"rating":{
"gte":3.5
}
}
}
}
Saat menjalankan kode di atas, kami mendapatkan respons seperti yang ditunjukkan di bawah ini -
{
"took" : 24,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
}
}
Ada juga jenis kueri tingkat istilah lain seperti -
Exists query - Jika bidang tertentu memiliki nilai bukan nol.
Missing query - Ini sangat berlawanan dengan kueri yang ada, kueri ini mencari objek tanpa bidang atau bidang tertentu yang memiliki nilai null.
Wildcard or regexp query - Kueri ini menggunakan ekspresi reguler untuk menemukan pola dalam objek.
Kueri Gabungan
Kueri ini adalah kumpulan dari kueri berbeda yang digabungkan satu sama lain dengan menggunakan operator Boolean seperti dan, atau, bukan atau untuk indeks berbeda atau memiliki panggilan fungsi, dll.
POST /schools/_search
{
"query": {
"bool" : {
"must" : {
"term" : { "state" : "UP" }
},
"filter": {
"term" : { "fees" : "2200" }
},
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
Saat menjalankan kode di atas, kami mendapatkan respons seperti yang ditunjukkan di bawah ini -
{
"took" : 6,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
}
}
Kueri Geo
Kueri ini berhubungan dengan lokasi geografis dan titik geografis. Kueri ini membantu untuk mengetahui sekolah atau objek geografis lainnya yang dekat dengan lokasi mana pun. Anda perlu menggunakan tipe data geo point.
PUT /geo_example
{
"mappings": {
"properties": {
"location": {
"type": "geo_shape"
}
}
}
}
Saat menjalankan kode di atas, kami mendapatkan respons seperti yang ditunjukkan di bawah ini -
{ "acknowledged" : true,
"shards_acknowledged" : true,
"index" : "geo_example"
}
Sekarang kami memposting data dalam indeks yang dibuat di atas.
POST /geo_example/_doc?refresh
{
"name": "Chapter One, London, UK",
"location": {
"type": "point",
"coordinates": [11.660544, 57.800286]
}
}
Saat menjalankan kode di atas, kami mendapatkan respons seperti yang ditunjukkan di bawah ini -
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
"_index" : "geo_example",
"_type" : "_doc",
"_id" : "hASWZ2oBbkdGzVfiXHKD",
"_score" : 1.0,
"_source" : {
"name" : "Chapter One, London, UK",
"location" : {
"type" : "point",
"coordinates" : [
11.660544,
57.800286
]
}
}
}
}