Mencari data di Amazon OpenSearch Service - OpenSearch Layanan Amazon

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

Contoh permintaan berikut bekerja dengan OpenSearch API. 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 dalam OpenSearch dokumentasi.

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

highlightOpsi 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, lihatTitik waktu di Amazon OpenSearch Service.

fromDan 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 di dokumentasi. OpenSearch

Bahasa Kueri Dasbor

Anda dapat menggunakan Dashboards Query Language (DQL) untuk mencari data dan visualisasi di Dasbor. OpenSearch DQL menggunakan empat jenis kueri utama: istilah, Boolean, tanggal dan rentang, dan bidang bersarang.

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}