Mencari dan Memfilter dengan Klien Elastic Search NodeJs
ES: Pencarian Elastis
Prasyarat
Pencarian Elastis: Panduan LengkapDalam artikel kami sebelumnya tentang Pencarian Elastis, kami menyiapkan klien ES dan mengindeks dokumen. Sekarang, kami akan menggunakan klien itu untuk melakukan berbagai operasi seperti mencari, menyortir, memberi nomor halaman, dan memfilter pada dokumen yang diindeks. Dengan mempelajari cara menggunakan fitur ini, kami dapat lebih mengoptimalkan kemampuan pencarian dan analisis dari Elastic Search di proyek kami. Mari selami dan lihat bagaimana fungsi ini bekerja.
Metode Pencarian
Ini mengembalikan klik pencarian yang cocok dengan kueri yang ditentukan dalam permintaan.
async search({
q: { query, sort },
pageSize = 10,
offset = 0,
index,
scroll,
}: EsSearchBody) {
try {
return this.client.search({
index,
sort,
query: query,
scroll,
from: offset,
size: pageSize
});
} catch (err) {
throw err;
}
}
Setelah menjalankan kueri di atas, kami akan mendapatkan respons yang mirip dengan ini:
{
"took" : 571,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "quotes",
"_type" : "_doc",
"_id" : "PZkvy3ABKNkWakGIzsCc",
"_score" : 1.0,
"_source" : {
"author" : "Farrah Gray",
"content" : "Build your own dreams, or someone else will hire you to build theirs.",
"year" : 1984
}
},
{
"_index" : "quotes",
"_type" : "_doc",
"_id" : "QZkwy3ABKNkWakGIbMDh",
"_score" : 1.0,
"_source" : {
"author" : "Abraham Lincoln",
"content" : "It’s not the years in your life that count. It’s the life in your year.",
"year" : 1809
}
},
{
"_index" : "quotes",
"_type" : "_doc",
"_id" : "Bwb72XABdLCfAS5iYiHx",
"_score" : 1.0,
"_source" : {
"author" : "Albert Einstein",
"content" : "Strive not to be a success, but rather to be of value.",
"year" : 1881
}
}
]
}
}
_shardsproperti : ini menunjukkan berapa banyak shard yang telah dipindai untuk data kita, berapa banyak yang berhasil, dilewati, dan gagal.hitsobjek : kita dapat melihat informasi tentang sejumlah hasil, dan seberapa akurat hitungannya.max_scorenilai skor tertinggi dari hasil. Dalam kueri ini sama dengan1.0tetapi dalam kueri yang berbeda, nilai ini juga bisa berbeda.
Berikut adalah contoh bagaimana Anda dapat mengambil semua dokumen yang diindeks dalam indeks ES. Untuk ini kita harus menggunakan match_allquery.
this.client.search({
index: 'test_index',
query: {
match_all: {}
}
})
anggap saja kita hanya ingin menampilkan hasil yang berisi kata "sukses". Sekarang alih-alih match_all, kita harus menggunakan mustklausa. Permintaan terakhir akan terlihat seperti di bawah ini
this.client.search({
index: 'test_index',
query: {
match: {
content: "success"
}
}
})
Mari kita tampilkan hanya penulis kutipan sebelum tahun 1900 dan menyertakan kata sukses.
this.client.search({
index: "test_index",
query: {
bool: {
must: [
{
range: {
year: {
lte: 1900
}
}
},
{
match: {
content: "success"
}
}
]
}
},
_source: "author"
})
- Parameter
querymenunjukkan konteks kueri. - Klausa
bool,must,rangedanmatchdigunakan dalam konteks kueri, yang artinya digunakan untuk menilai seberapa baik setiap dokumen cocok dengan kueri. - Dalam
rangekueri, kami menetapkan bahwa kami mencari dokumen dari sebelum atau termasuk tahun 1900. - Dalam
matchkueri, kami menunjukkan bahwa hasil harus menyertakan kata "sukses" - Di
_sourceproperti, kami menentukan bidang mana yang harus mengembalikan kueri. Di sini, kita bisa melewatkan satu bidang sebagai string, atau larik bidang.
(...)
"hits" : [
{
"_index" : "quotes",
"_type" : "_doc",
"_id" : "Bwb72XABdLCfAS5iYiHx",
"_score" : 2.0226655,
"_source" : {
"author" : "Albert Einstein"
}
},
{
"_index" : "quotes",
"_type" : "_doc",
"_id" : "CAb72XABdLCfAS5i7SGR",
"_score" : 1.6451601,
"_source" : {
"author" : "Florence Nightingale"
}
}
]
(...)
Dalam hasil kueri di atas, Anda dapat melihat bahwa setiap hasil memiliki _scorepropertinya sendiri. Ini menentukan relevansi dokumen, seberapa baik dokumen cocok dengan kueri. Semakin tinggi nilai skor berarti semakin relevan dokumen tersebut. Setiap jenis kueri akan memiliki penghitungan skor yang berbeda berdasarkan kueri dan konteks filter.
Di sini kami mencari dokumen yang paling relevan untuk ungkapan: "tidak menjadi sukses".
this.client.search({
index: "test_index",
query: {
bool: {
must: [
{
match: {
content: "not to be a success"
}
},
]
}
},
})
Semakin tinggi skornya, semakin akurat dokumennya.
Paginasi
Ketika kita memiliki fitur apapun, dimana kita perlu menampilkan sejumlah besar data maka kita membutuhkan mekanisme pagination. Di ES cukup sederhana. Kita harus menggunakan dua properti:
from: menentukan dari record mana dalam indeks Elasticsearch harus mulai mencarisize: menentukan berapa banyak hasil yang harus dikembalikan.
this.client.search({
index: 'test_index',
query: {
match_all: {}
},
from: 0,
size: 10,
})
Namun terkadang, Kami tidak memiliki skor relevansi yang berarti atau kami ingin mengurutkan berdasarkan properti yang berbeda setelah mendapatkan hasil penelusuran yang relevan.
this.client.search({
index: 'test_index',
query: {
match_all: {}
},
sort: {
createdAt: { order: 'asc' }
}
from: 0,
size: 10,
})
Penyaringan
Di atas semua contoh, kami melihat bagaimana konteks kueri bekerja, seberapa cocok dokumen dengan klausa kueri.
Dalam konteks filter, kami mendapatkan jawaban ya/tidak untuk: "Apakah dokumen ini cocok dengan pertanyaan kueri?"
Untuk menemukan kutipan yang dibuat oleh Albert Einstein antara tahun 1800 dan 1900, kita dapat menggunakan kueri yang difilter di bawah ini:
this.client.search({
index: 'test_index',
query: {
bool: {
filter: [
{
match: { author: "Albert" }
},
{ range:
{
year: {
gte: 1800,
lte: 1900
}
}
}
]
}
},
from: 0,
size: 10,
})
"max_score" : 0.0,
"hits" : [
{
"_index" : "quotes",
"_type" : "_doc",
"_id" : "Bwb72XABdLCfAS5iYiHx",
"_score" : 0.0,
"_source" : {
"author" : "Albert Einstein",
"content" : "Strive not to be a success, but rather to be of value.",
"year" : 1881
}
}
]
Referensi
Klien JavaScript Elasticsearch [8.5] | Elastis
Referensi API | Klien JavaScript Elasticsearch [8.5] | Elastis
Contoh | Klien JavaScript Elasticsearch [8.5] | Elastis
Saya harap Anda menikmati membaca tentang Pencarian Elastis dan bagaimana itu dapat digunakan untuk mengoptimalkan pencarian dan analisis di berbagai aplikasi. Jika Anda menemukan artikel ini bermanfaat atau memiliki pertanyaan lebih lanjut, jangan ragu untuk menghubungi saya melalui komentar.
Untuk pembaruan dan wawasan lebih lanjut tentang tren teknologi terbaru, pastikan untuk mengikuti saya di Twitter atau LinkedIn . Terima kasih telah membaca, dan saya berharap dapat terhubung dengan Anda di media sosial.
Twitter :https://twitter.com/geekfarmer_
Linkedin :https://www.linkedin.com/in/geekfarmer

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































