Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mencari data di Amazon OpenSearch Service
Ada beberapa metode umum untuk mencari dokumen di Amazon OpenSearch Service, termasuk pencarian URI dan pencarian isi permintaan. OpenSearch Layanan menawarkan fungsionalitas tambahan yang meningkatkan pengalaman pencarian, seperti paket khusus, dukungan SQL, dan pencarian asinkron. Untuk referensi API OpenSearch penelusuran yang komprehensif, lihat OpenSearch dokumentasinya
catatan
Permintaan sampel berikut bekerja dengan OpenSearch APIs. Beberapa permintaan mungkin tidak berfungsi dengan versi Elasticsearch yang lebih lama.
Pencarian URI
Pencarian Universal Resource Identifier (URI) adalah bentuk pencarian yang paling sederhana. Dalam pencarian URI, Anda menentukan kueri sebagai parameter permintaan HTTP:
GET https://search-
my-domain
.us-west-1.
es.amazonaws.com/_search?q=house
Respons sampel mungkin terlihat seperti berikut ini:
{
"took": 25,
"timed_out": false,
"_shards": {
"total": 10,
"successful": 10,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 85,
"relation": "eq",
},
"max_score": 6.6137657,
"hits": [
{
"_index": "movies",
"_type": "movie",
"_id": "tt0077975",
"_score": 6.6137657,
"_source": {
"directors": [
"John Landis"
],
"release_date": "1978-07-27T00:00:00Z",
"rating": 7.5,
"genres": [
"Comedy",
"Romance"
],
"image_url": "http://ia.media-imdb.com/images/M/MV5BMTY2OTQxNTc1OF5BMl5BanBnXkFtZTYwNjA3NjI5._V1_SX400_.jpg",
"plot": "At a 1962 College, Dean Vernon Wormer is determined to expel the entire Delta Tau Chi Fraternity, but those troublemakers have other plans for him.",
"title": "Animal House",
"rank": 527,
"running_time_secs": 6540,
"actors": [
"John Belushi",
"Karen Allen",
"Tom Hulce"
],
"year": 1978,
"id": "tt0077975"
}
},
...
]
}
}
Secara default, kueri ini mencari semua bidang dari semua indeks untuk istilah rumah. Untuk mempersempit pencarian, tentukan indeks (movies
) dan bidang dokumen (title
) di URI:
GET https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search?q=title:house
Anda dapat memasukkan parameter tambahan dalam permintaan, tetapi parameter yang didukung hanya menyediakan sebagian kecil dari opsi OpenSearch pencarian. Permintaan berikut mengembalikan 20 hasil (bukan defaultnya yang 10) dan mengurutkan menurut tahun (dibandingkan dengan _score
):
GET https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search?q=title:house&size=20&sort=year:desc
Pencarian isi permintaan
Untuk melakukan pencarian yang lebih kompleks, gunakan isi permintaan HTTP dan bahasa OpenSearch khusus domain (DSL) untuk kueri. Kueri DSL memungkinkan Anda menentukan berbagai opsi OpenSearch pencarian.
catatan
Anda tidak dapat menyertakan karakter khusus Unicode dalam nilai bidang teks, atau nilainya akan diuraikan sebagai beberapa nilai yang dipisahkan oleh karakter khusus. Penguraian yang salah ini dapat menyebabkan penyaringan dokumen yang tidak disengaja dan berpotensi membahayakan kontrol atas aksesnya. Untuk informasi selengkapnya, lihat Catatan tentang karakter khusus Unicode di bidang teks
Kueri match
berikut ini serupa dengan contoh pencarian URI final:
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "size": 20, "sort": { "year": { "order": "desc" } }, "query": { "query_string": { "default_field": "title", "query": "house" } } }
catatan
API _search
menerima HTTP GET
dan POST
untuk pencarian isi permintaan, tetapi tidak semua klien HTTP mendukung menambahkan isi permintaan ke permintaan GET
.POST
adalah pilihan yang lebih universal.
Dalam banyak kasus, Anda mungkin ingin mencari beberapa bidang, tetapi tidak semua bidang. Gunakan kueri multi_match
:
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title", "plot", "actors", "directors"] } } }
Bidang pendorong
Anda dapat meningkatkan relevansi pencarian dengan “meningkatkan” bidang tertentu. Boost adalah pengganda yang menimbang kecocokan dalam satu bidang lebih berat daripada kecocokan di bidang lain. Pada contoh berikut, kecocokan untuk john di bidang pengaruh title
_score
dua kali lebih banyak dari kecocokan di bidang plot
dan empat kali lebih banyak kecocokan di bidang actors
atau directors
. Hasilnya adalah bahwa film seperti John Wick dan John Carter berada di dekat puncak hasil pencarian, dan film yang dibintangi John Travolta berada di dekat bagian bawah.
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "john", "fields": ["title^4", "plot^2", "actors", "directors"] } } }
Penyorotan hasil pencarian
highlight
Opsi memberitahu OpenSearch untuk mengembalikan objek tambahan di dalam hits
array jika query cocok dengan satu atau beberapa bidang:
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } }, "highlight": { "fields": { "plot": {} } } }
Jika kueri cocok dengan isi bidang plot
, temuan mungkin terlihat seperti berikut ini:
{
"_index": "movies",
"_type": "movie",
"_id": "tt0091541",
"_score": 11.276199,
"_source": {
"directors": [
"Richard Benjamin"
],
"release_date": "1986-03-26T00:00:00Z",
"rating": 6,
"genres": [
"Comedy",
"Music"
],
"image_url": "http://ia.media-imdb.com/images/M/MV5BMTIzODEzODE2OF5BMl5BanBnXkFtZTcwNjQ3ODcyMQ@@._V1_SX400_.jpg",
"plot": "A young couple struggles to repair a hopelessly dilapidated house.",
"title": "The Money Pit",
"rank": 4095,
"running_time_secs": 5460,
"actors": [
"Tom Hanks",
"Shelley Long",
"Alexander Godunov"
],
"year": 1986,
"id": "tt0091541"
},
"highlight": {
"plot": [
"A young couple struggles to repair a hopelessly dilapidated <em>house</em>."
]
}
}
Secara default, OpenSearch membungkus string yang cocok dalam <em>
tag, menyediakan hingga 100 karakter konteks di sekitar pertandingan, dan memecah konten menjadi kalimat dengan mengidentifikasi tanda baca, spasi, tab, dan jeda baris. Semua pengaturan ini dapat disesuaikan:
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } }, "highlight": { "fields": { "plot": {} }, "pre_tags": "<strong>", "post_tags": "</strong>", "fragment_size": 200, "boundary_chars": ".,!? " } }
Jumlah API
Jika Anda tidak tertarik dengan isi dokumen Anda dan hanya ingin mengetahui jumlah kecocokan, Anda dapat menggunakan API _count
bukan API _search
. Permintaan berikut menggunakan kueri query_string
untuk mengidentifikasi komedi romantis:
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_count { "query": { "query_string": { "default_field": "genres", "query": "romance AND comedy" } } }
Respons sampel mungkin terlihat seperti berikut ini:
{
"count": 564,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
}
}
Pemberian nomor halaman hasil pencarian
Jika Anda perlu menampilkan sejumlah besar hasil pencarian, Anda dapat menerapkan pagination menggunakan beberapa metode berbeda.
Titik waktu
Fitur point in time (PIT) adalah jenis pencarian yang memungkinkan Anda menjalankan kueri berbeda terhadap kumpulan data yang diperbaiki tepat waktu. Ini adalah metode pagination yang disukai OpenSearch, terutama untuk penomoran halaman yang dalam. Anda dapat menggunakan PIT dengan OpenSearch Layanan versi 2.5 dan yang lebih baru. Untuk informasi lebih lanjut tentang PIT, lihatCari titik waktu di OpenSearch Layanan Amazon.
from
Dan size
parameter
Cara termudah untuk membuat halaman adalah dengan size
parameter from
dan. Permintaan berikut mengembalikan hasil 20—39 dari daftar hasil pencarian yang diindeks nol:
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "from": 20, "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } } }
Untuk informasi selengkapnya tentang pagination penelusuran, lihat hasil Paginate
Bahasa Kueri Dasbor
Anda dapat menggunakan Dashboards Query Language (DQL)
Permintaan persyaratan
Kueri istilah mengharuskan Anda menentukan istilah yang Anda cari.
Untuk melakukan kueri istilah, masukkan yang berikut ini:
host:www.example.com
Kueri Boolean
Anda dapat menggunakan operator BooleanAND
,or
, dan not
untuk menggabungkan beberapa query.
Untuk melakukan kueri Boolean, tempel berikut ini:
host.keyword:www.example.com and response.keyword:200
Kueri tanggal dan rentang
Anda dapat menggunakan kueri tanggal dan rentang untuk menemukan tanggal sebelum atau sesudah kueri Anda.
-
>
menunjukkan pencarian untuk tanggal setelah tanggal yang Anda tentukan. -
<
menunjukkan pencarian untuk tanggal sebelum tanggal yang Anda tentukan.
@timestamp > "2020-12-14T09:35:33"
Kueri bidang bersarang
Jika Anda memiliki dokumen dengan bidang bersarang, Anda harus menentukan bagian mana dari dokumen yang ingin Anda ambil. Berikut ini adalah contoh dokumen yang berisi bidang bersarang:
{"NBA players":[ {"player-name": "Lebron James", "player-position": "Power forward", "points-per-game": "30.3" }, {"player-name": "Kevin Durant", "player-position": "Power forward", "points-per-game": "27.1" }, {"player-name": "Anthony Davis", "player-position": "Power forward", "points-per-game": "23.2" }, {"player-name": "Giannis Antetokounmpo", "player-position": "Power forward", "points-per-game":"29.9" } ] }
Untuk mengambil bidang tertentu menggunakan DQL, tempel yang berikut ini:
NBA players: {player-name: Lebron James}
Untuk mengambil beberapa objek dari dokumen bersarang, tempel yang berikut ini:
NBA players: {player-name: Lebron James} and NBA players: {player-name: Giannis Antetokounmpo}
Untuk mencari dalam rentang, tempel yang berikut ini:
NBA players: {player-name: Lebron James} and NBA players: {player-name: Giannis Antetokounmpo and < 30}
Jika dokumen Anda memiliki objek bersarang dalam objek lain, Anda masih dapat mengambil data dengan menentukan semua level. Untuk melakukan ini, tempel yang berikut ini:
Top-Power-forwards.NBA players: {player-name:Lebron James}