
Anda dapat melakukan kueri bersarang di Elasticsearch dengan menggunakan parameter bersarang. Kueri bersarang akan mencari objek bidang bersarang dan mengembalikan induk akar dokumen jika ada objek yang cocok.
Cara Menggunakan Kueri Bersarang
Untuk menjalankan kueri bertingkat, Anda harus memiliki indeks yang menyertakan pemetaan bertingkat.
Kueri berikut membuat indeks dengan pemetaan bidang bersarang.
PUT nested-index
{
"mappings": {
"properties": {
"customers": {
"type": "nested"
}
}
}
}
Selanjutnya, buat dokumen yang berisi tipe bidang bersarang dan beberapa data seperti yang ditunjukkan dalam contoh kueri di bawah ini:
PUT nested-index/_doc/1
{
"category": "electronic_purchases",
"customers": [
{
"first_name": "Barbra",
"last_name": "Walker"
},
{
"first_name": "Michael",
"last_name": "Jean"
},
{
"first_name": "Hannah",
"last_name": "Newsome"
}
]
}
Untuk menjalankan kueri bersarang, kita dapat menjalankan contoh seperti yang ditunjukkan di bawah ini:
GET nested-index/_search
{
"query": {
"nested": {
"path": "customers",
"query": {
"bool": {
"must": [
{"match": {
"customers.first_name": "Hannah"
}
}
]
}
},
"inner_hits": {"highlight": {"fields": {"customers.first_name": {}}}}
}
}
}
Contoh respons dari kueri di atas adalah di bawah ini:
Kueri bersarang menggunakan parameter sebagai:
- Path– Parameter jalur menentukan jalur ke objek bersarang untuk melakukan kueri penelusuran. Parameter ini diperlukan.
- Query– Parameter ini menentukan kueri penelusuran untuk dijalankan pada jalur bersarang yang disediakan. Mirip dengan parameter jalur, parameter kueri tidak opsional.
- Bool– Kueri Boolean memastikan bahwa dokumen cocok dengan kondisi yang ditentukan. Saat Anda memiliki kueri Boolean yang disetel ke must, klausa set harus dalam rekaman yang cocok. Pertimbangkan dokumentasi pada kueri Boolean untuk mempelajari lebih lanjut.
- Inner_hits – ini mengembalikan per klik pencarian sebagai respons dari respons bersarang. Ini menerima opsi seperti sorotan diikuti oleh bidang untuk disorot.
Kueri Bersarang Multi-Level
Anda juga dapat memiliki kueri bertingkat multi-level seperti yang ditunjukkan dalam indeks contoh:
PUT /users
{
"mappings": {
"properties": {
"username": {
"type": "nested",
"properties": {
"first_name": {
"type": "text"
},
"email": {
"type": "nested",
"properties": {
"provider": {
"type": "text"
},
"prefix": {
"type": "text"
}
}
}
}
}
}
}
}
Tambahkan beberapa dokumen dengan data sebagai:
PUT /users/_doc/1
{
"username":{
"first_name": "David",
"email": [
{
"provider": "gmail.com",
"prefix": "[email protected]"
},
{
"provider": "hotmail.com",
"prefix": "[email protected]"
}
]
}
}
PUT /users/_doc/2
{
"username":{
"first_name": "Lucy",
"email": [
{
& nbsp; "provider": "outlook.com",
"prefix": "[email protected]"
},
{
"provider": "protonmail.com",
"prefix": "[email protected]"
}
]
}
}
Untuk melakukan kueri bertingkat multi-level, jalankan permintaan sebagai:
GET /users/_search
{
"query": {
"nested": {
"path": "username",
"query": {
"nested": {
"path": "username.email",
"query": {
"bool": {
"must": [
{"match": {
"username.email.provider": "gmail.com"
}}
]
}
}
}
}
}
}
}
Contoh respons dari kueri yang dihasilkan di bawah ini:
Sebagai penutup
Panduan ini membahas cara menjalankan kueri bertingkat dan kueri bertingkat di Elasticsearch.