Paket kustom untuk 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.

Paket kustom untuk Amazon OpenSearch Service

OpenSearch Layanan Amazon memungkinkan Anda mengunggah file kamus khusus, seperti kata berhenti dan sinonim, dan juga menyediakan beberapa plugin opsional pra-paket yang dapat Anda kaitkan dengan domain Anda. Istilah umum untuk kedua jenis file ini adalah paket.

File kamus meningkatkan hasil pencarian Anda dengan mengatakan OpenSearch untuk mengabaikan kata-kata frekuensi tinggi tertentu atau untuk memperlakukan istilah seperti “puding beku,” “gelato,” dan “es krim” sebagai setara. Mereka juga dapat meningkatkan stemming, seperti di plugin Analisis Jepang (kuromoji).

Plugin opsional dapat memberikan fungsionalitas tambahan ke domain Anda. Misalnya, Anda dapat menggunakan plugin Amazon Personalize untuk memberi Anda hasil pencarian yang dipersonalisasi. Plugin opsional menggunakan jenis ZIP-PLUGIN paket. Untuk informasi selengkapnya tentang plugin opsional, lihatPlugin berdasarkan versi mesin di Amazon Service OpenSearch .

Persyaratan izin paket

Pengguna tanpa akses administrator memerlukan tindakan AWS Identity and Access Management (IAM) tertentu untuk mengelola paket:

  • es:CreatePackage- buat paket di Wilayah OpenSearch Layanan

  • es:DeletePackage- menghapus paket dari Wilayah OpenSearch Layanan

  • es:AssociatePackage - mengaitkan paket ke domain

  • es:DissociatePackage - memisahkan paket dari domain

Anda juga perlu izin pada jalur bucket Amazon S3 atau objek di mana paket kustom berada.

Memberikan semua izin dalam IAM, tidak dalam kebijakan akses domain. Untuk informasi selengkapnya, lihat Identity and Access Management di Amazon OpenSearch Service.

Mengunggah paket ke Amazon S3

Bagian ini mencakup cara mengunggah paket kamus khusus, karena paket plugin opsional sudah diinstal sebelumnya. Sebelum Anda dapat mengaitkan kamus kustom dengan domain Anda, Anda harus mengunggahnya ke bucket Amazon S3. Untuk petunjuk, lihat Mengunggah objek di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon. Plugin yang didukung tidak perlu diunggah.

Jika kamus berisi informasi sensitif, tentukan enkripsi sisi server dengan kunci yang dikelola S3 saat Anda mengunggahnya. OpenSearch Layanan tidak dapat mengakses file di S3 yang Anda lindungi menggunakan AWS KMS kunci.

Setelah Anda mengunggah file, catat jalur S3-nya. Formatnya jalurnya adalah s3://bucket-name/file-path/file-name.

Anda dapat menggunakan file sinonim berikut untuk tujuan pengujian. Simpan sebagai synonyms.txt.

danish, croissant, pastry ice cream, gelato, frozen custard sneaker, tennis shoe, running shoe basketball shoe, hightop

Kamus tertentu, seperti kamus Hunspell, menggunakan banyak file dan memerlukan direktori mereka sendiri di sistem file. Pada saat ini, OpenSearch Layanan hanya mendukung kamus file tunggal.

Mengimpor dan mengaitkan paket

Konsol adalah cara paling sederhana untuk mengimpor kamus khusus ke OpenSearch Layanan. Saat Anda mengimpor kamus dari Amazon S3, OpenSearch Layanan menyimpan salinan paketnya sendiri dan secara otomatis mengenkripsi salinan itu menggunakan AES-256 dengan kunci yang dikelola Layanan. OpenSearch

Plugin opsional sudah diinstal sebelumnya di OpenSearch Layanan sehingga Anda tidak perlu mengunggahnya sendiri, tetapi Anda perlu mengaitkan plugin dengan domain. Plugin yang tersedia tercantum di layar Paket di konsol.

  1. Di konsol OpenSearch Layanan Amazon, pilih Paket.

  2. Pilih paket Impor.

  3. Berikan kamus kustom nama deskriptif.

  4. Berikan jalur S3 ke file, lalu pilih Kirim.

  5. Kembali ke layar Paket.

  6. Ketika status paket sudah Tersedia, pilih paket tersebut. Plugin opsional akan tersedia secara otomatis.

  7. Pilih Kaitkan ke domain.

  8. Pilih domain, lalu pilih Associate.

  9. Di panel navigasi, pilih domain Anda dan buka tab Paket.

  10. Jika paketnya adalah kamus khusus, perhatikan ID saat paket menjadi Tersedia. Gunakan analyzers/id sebagai jalur file dalam permintaan ke OpenSearch.

Sebagai alternatif, gunakan, SDK AWS CLI, atau API konfigurasi untuk mengimpor dan mengaitkan paket. Untuk informasi selengkapnya, lihat Referensi AWS CLI Perintah dan Referensi API Amazon OpenSearch Service.

Menggunakan paket dengan OpenSearch

Bagian ini mencakup cara menggunakan kedua jenis paket: kamus khusus dan plugin opsional.

Menggunakan kamus kustom

Setelah mengaitkan file dengan domain, Anda dapat menggunakannya dalam parameter seperti synonyms_path, stopwords_path, dan user_dictionary saat Anda membuat tokenizers dan filter token. Parameter yang tepat bervariasi menurut objek. Beberapa objek mendukung synonyms_path dan stopwords_path, namun user_dictionary eksklusif untuk plugin kuromoji.

Untuk plugin Analisis IK (Mandarin), Anda dapat mengunggah file kamus khusus sebagai paket khusus dan mengaitkannya ke domain, dan plugin secara otomatis mengambilnya tanpa memerlukan user_dictionary parameter. Jika file Anda adalah file sinonim, gunakan synonyms_path parameter.

Contoh berikut menambahkan file sinonim ke indeks baru:

PUT my-index { "settings": { "index": { "analysis": { "analyzer": { "my_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["my_filter"] } }, "filter": { "my_filter": { "type": "synonym", "synonyms_path": "analyzers/F111111111", "updateable": true } } } } }, "mappings": { "properties": { "description": { "type": "text", "analyzer": "standard", "search_analyzer": "my_analyzer" } } } }

Permintaan ini membuat penganalisis kustom untuk indeks yang menggunakan tokenizer standar dan filter token sinonim.

  • Tokenizer memecah aliran karakter menjadi token (biasanya kata-kata) berdasarkan beberapa aturan. Contoh paling sederhana adalah tokenizer spasi, yang memecah karakter sebelumnya menjadi token setiap kali bertemu dengan karakter spasi. Contoh yang lebih kompleks adalah tokenizer standar, yang menggunakan seperangkat aturan berbasis tata bahasa untuk bekerja di banyak bahasa.

  • Filter Token menambahkan, memodifikasi, atau menghapus token. Misalnya, filter token sinonim menambahkan token ketika menemukan kata dalam daftar sinonim. Filter token berhenti menghapus token ketika menemukan kata dalam daftar kata berhenti.

Permintaan ini juga menambahkan bidang teks (description) ke pemetaan dan memberitahu OpenSearch untuk menggunakan penganalisis baru sebagai penganalisis pencariannya. Anda dapat melihat bahwa ia masih menggunakan penganalisis standar sebagai penganalisis indeksnya.

Akhirnya, perhatikan baris "updateable": true di filter token. Bidang ini hanya berlaku untuk penganalisis pencarian, bukan penganalisis indeks, dan sangat penting jika nanti Anda ingin memperbarui penganalisis pencarian secara otomatis.

Untuk tujuan pengujian, tambahkan beberapa dokumen ke indeks:

POST _bulk { "index": { "_index": "my-index", "_id": "1" } } { "description": "ice cream" } { "index": { "_index": "my-index", "_id": "2" } } { "description": "croissant" } { "index": { "_index": "my-index", "_id": "3" } } { "description": "tennis shoe" } { "index": { "_index": "my-index", "_id": "4" } } { "description": "hightop" }

Kemudian cari mereka menggunakan sinonim:

GET my-index/_search { "query": { "match": { "description": "gelato" } } }

Dalam hal ini, OpenSearch mengembalikan respons berikut:

{ "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 0.99463606, "hits": [{ "_index": "my-index", "_type": "_doc", "_id": "1", "_score": 0.99463606, "_source": { "description": "ice cream" } }] } }
Tip

File kamus menggunakan ruang timbunan Java sebanding dengan ukurannya. Sebagai contoh, file kamus 2 GiB mungkin mengonsumsi 2 GiB ruang tumpukan pada sebuah simpul. Jika Anda menggunakan file besar, pastikan bahwa simpul Anda memiliki cukup ruang tumpukan untuk mengakomodasinya. Pantau JVMMemoryPressuremetrik, dan skalakan klaster Anda seperlunya.

Menggunakan plugin opsional

OpenSearch Layanan memungkinkan Anda mengaitkan OpenSearch plugin opsional yang sudah diinstal sebelumnya untuk digunakan dengan domain Anda. Paket plugin opsional kompatibel dengan OpenSearch versi tertentu, dan hanya dapat dikaitkan dengan domain dengan versi itu. Daftar paket yang tersedia untuk domain Anda mencakup semua plugin yang didukung yang kompatibel dengan versi domain Anda. Setelah Anda mengaitkan plugin ke domain, proses instalasi pada domain dimulai. Kemudian, Anda dapat mereferensikan dan menggunakan plugin saat Anda membuat permintaan ke OpenSearch Layanan.

Mengaitkan dan memisahkan plugin membutuhkan penerapan biru/hijau. Untuk informasi selengkapnya, lihat Perubahan yang biasanya menyebabkan penerapan biru/hijau.

Plugin opsional termasuk penganalisis bahasa dan hasil pencarian yang disesuaikan. Misalnya, plugin Amazon Personalize Search Ranking menggunakan pembelajaran mesin untuk mempersonalisasi hasil penelusuran bagi pelanggan Anda. Untuk informasi selengkapnya tentang plugin ini, lihat Personalisasi hasil penelusuran dari OpenSearch. Untuk daftar semua plugin yang didukung, lihatPlugin berdasarkan versi mesin di Amazon Service OpenSearch .

Plugin Sudachi

Untuk plugin Sudachi, ketika Anda mengasosiasikan kembali file kamus, itu tidak langsung mencerminkan domain. Kamus menyegarkan ketika penerapan biru/hijau berikutnya berjalan pada domain sebagai bagian dari perubahan konfigurasi atau pembaruan lainnya. Atau, Anda dapat membuat paket baru dengan data yang diperbarui, membuat indeks baru menggunakan paket baru ini, mengindeks ulang indeks yang ada ke indeks baru, dan kemudian menghapus indeks lama. Jika Anda lebih suka menggunakan pendekatan pengindeksan ulang, gunakan alias indeks sehingga tidak ada gangguan pada lalu lintas Anda.

Selain itu, plugin Sudachi hanya mendukung kamus Sudachi biner, yang dapat Anda unggah dengan operasi API. CreatePackage Untuk informasi tentang kamus sistem yang telah dibuat sebelumnya dan proses untuk menyusun kamus pengguna, lihat dokumentasi Sudachi.

Contoh berikut menunjukkan bagaimana menggunakan sistem dan kamus pengguna dengan tokenizer Sudachi. Anda harus mengunggah kamus ini sebagai paket khusus dengan tipe TXT-DICTIONARY dan memberikan ID paket mereka di pengaturan tambahan.

PUT sudachi_sample { "settings": { "index": { "analysis": { "tokenizer": { "sudachi_tokenizer": { "type": "sudachi_tokenizer", "additional_settings": "{\"systemDict\": \"<system-dictionary-package-id>\",\"userDict\": [\"<user-dictionary-package-id>\"]}" } }, "analyzer": { "sudachi_analyzer": { "filter": ["my_searchfilter"], "tokenizer": "sudachi_tokenizer", "type": "custom" } }, "filter":{ "my_searchfilter": { "type": "sudachi_split", "mode": "search" } } } } } }

Memperbarui paket

Bagian ini hanya mencakup cara memperbarui paket kamus khusus, karena paket plugin opsional sudah diperbarui untuk Anda. Mengunggah versi baru kamus ke Amazon S3 tidak secara otomatis memperbarui paket di Layanan Amazon OpenSearch . OpenSearch Layanan menyimpan salinan file sendiri, jadi jika Anda mengunggah versi baru ke S3, Anda harus memperbaruinya secara manual.

Setiap domain yang terkait menyimpan salinan filenya sendiri. Agar perilaku pencarian dapat diprediksi, domain terus menggunakan versi paketnya saat ini hingga Anda memperbaruinya secara eksplisit. Untuk memperbarui paket kustom, ubah file Amazon S3 Control, perbarui paket di OpenSearch Layanan, lalu terapkan pembaruan.

  1. Di konsol OpenSearch Layanan, pilih Paket.

  2. Pilih paket dan Perbarui.

  3. Sediakan jalur S3 ke file, dan kemudian pilih Perbarui paket.

  4. Kembali ke layar Paket.

  5. Ketika status paket berubah ke Tersedia, pilih paket tersebut. Kemudian pilih satu atau lebih domain terkait, Terapkan pembaruan, dan konfirmasi. Tunggu sampai status asosiasi berubah menjadi Aktif.

  6. Langkah selanjutnya bervariasi tergantung pada bagaimana Anda mengonfigurasi indeks Anda:

    • Jika domain Anda berjalan OpenSearch atau Elasticsearch 7.8 atau yang lebih baru, dan hanya menggunakan penganalisis penelusuran dengan bidang yang dapat diperbarui disetel ke true, Anda tidak perlu mengambil tindakan lebih lanjut. OpenSearch Layanan secara otomatis memperbarui indeks Anda menggunakan _plugins/_refresh_search_analyzers API.

    • Jika domain Anda menjalankan Elasticsearch 7.7 atau yang lebih lama, menggunakan penganalisis indeks, atau tidak menggunakan bidang, lihat. updateable Pembaruan indeks manual untuk kamus

Meskipun konsol adalah metode yang paling sederhana, Anda juga dapat menggunakan AWS CLI, SDK, atau API konfigurasi untuk memperbarui paket OpenSearch Layanan. Untuk informasi selengkapnya, lihat Referensi AWS CLI Perintah dan Referensi API Amazon OpenSearch Service.

Alih-alih secara manual memperbarui paket di konsol, Anda dapat menggunakan SDK untuk mengotomatisasi proses pembaruan. Contoh skrip Python berikut mengunggah file paket baru ke Amazon S3, memperbarui paket di OpenSearch Layanan, dan menerapkan paket baru ke domain yang ditentukan. Setelah mengonfirmasi pembaruan berhasil, itu membuat panggilan sampel untuk OpenSearch menunjukkan sinonim baru telah diterapkan.

Anda harus memberikan nilai untuk host, region, file_name, bucket_name, s3_key, package_id, domain_name, dan query.

from requests_aws4auth import AWS4Auth import boto3 import requests import time import json import sys host = '' # The OpenSearch domain endpoint with https:// and a trailing slash. For example, https://my-test-domain.us-east-1.es.amazonaws.com/ region = '' # For example, us-east-1 file_name = '' # The path to the file to upload bucket_name = '' # The name of the S3 bucket to upload to s3_key = '' # The name of the S3 key (file name) to upload to package_id = '' # The unique identifier of the OpenSearch package to update domain_name = '' # The domain to associate the package with query = '' # A test query to confirm the package has been successfully updated service = 'es' credentials = boto3.Session().get_credentials() client = boto3.client('opensearch') awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) def upload_to_s3(file_name, bucket_name, s3_key): """Uploads file to S3""" s3 = boto3.client('s3') try: s3.upload_file(file_name, bucket_name, s3_key) print('Upload successful') return True except FileNotFoundError: sys.exit('File not found. Make sure you specified the correct file path.') def update_package(package_id, bucket_name, s3_key): """Updates the package in OpenSearch Service""" print(package_id, bucket_name, s3_key) response = client.update_package( PackageID=package_id, PackageSource={ 'S3BucketName': bucket_name, 'S3Key': s3_key } ) print(response) def associate_package(package_id, domain_name): """Associates the package to the domain""" response = client.associate_package( PackageID=package_id, DomainName=domain_name) print(response) print('Associating...') def wait_for_update(domain_name, package_id): """Waits for the package to be updated""" response = client.list_packages_for_domain(DomainName=domain_name) package_details = response['DomainPackageDetailsList'] for package in package_details: if package['PackageID'] == package_id: status = package['DomainPackageStatus'] if status == 'ACTIVE': print('Association successful.') return elif status == 'ASSOCIATION_FAILED': sys.exit('Association failed. Please try again.') else: time.sleep(10) # Wait 10 seconds before rechecking the status wait_for_update(domain_name, package_id) def sample_search(query): """Makes a sample search call to OpenSearch""" path = '_search' params = {'q': query} url = host + path response = requests.get(url, params=params, auth=awsauth) print('Searching for ' + '"' + query + '"') print(response.text)
catatan

Jika Anda menerima kesalahan “paket tidak ditemukan” saat Anda menjalankan skrip menggunakan AWS CLI, kemungkinan besar Boto3 menggunakan Wilayah mana pun yang ditentukan dalam ~/.aws/config, yang bukan Wilayah bucket S3 tempat Anda berada. Jalankan aws configure dan tentukan Wilayah yang benar, atau tambahkan Region secara eksplisit ke klien:

client = boto3.client('opensearch', region_name='us-east-1')

Pembaruan indeks manual untuk kamus

Pembaruan indeks manual hanya berlaku untuk kamus khusus, bukan plugin opsional. Untuk menggunakan kamus yang diperbarui, Anda harus memperbarui indeks secara manual jika memenuhi salah satu ketentuan berikut:

  • Domain Anda menjalankan Elasticsearch 7.7 atau yang lebih lama.

  • Anda menggunakan paket kustom sebagai indeks penganalisis.

  • Anda menggunakan paket khusus sebagai penganalisis pencarian, tetapi tidak menyertakan bidang yang dapat diperbarui.

Untuk memperbarui penganalisis dengan file paket baru, Anda memiliki dua pilihan:

  • Tutup dan buka indeks apa pun yang ingin Anda perbarui:

    POST my-index/_close POST my-index/_open
  • Mengindeks ulang indeks. Pertama, buat indeks yang menggunakan file sinonim yang diperbarui (atau file yang sama sekali baru). Perhatikan bahwa hanya UTF-8 yang didukung.

    PUT my-new-index { "settings": { "index": { "analysis": { "analyzer": { "synonym_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["synonym_filter"] } }, "filter": { "synonym_filter": { "type": "synonym", "synonyms_path": "analyzers/F222222222" } } } } }, "mappings": { "properties": { "description": { "type": "text", "analyzer": "synonym_analyzer" } } } }

    Kemudian indeks ulang indeks lama ke indeks baru itu:

    POST _reindex { "source": { "index": "my-index" }, "dest": { "index": "my-new-index" } }

    Jika Anda sering memperbarui penganalisis indeks, gunakan alias indeks untuk mempertahankan jalur yang konsisten ke indeks terbaru:

    POST _aliases { "actions": [ { "remove": { "index": "my-index", "alias": "latest-index" } }, { "add": { "index": "my-new-index", "alias": "latest-index" } } ] }

    Jika Anda tidak memerlukan indeks lama, hapus indeks tersebut:

    DELETE my-index

Memisahkan dan menghapus paket

Memisahkan paket, apakah itu kamus khusus atau plugin opsional, dari domain berarti Anda tidak dapat lagi menggunakan paket itu saat membuat indeks baru. Setelah paket dipisahkan, indeks yang ada yang menggunakan paket tidak dapat lagi menggunakannya. Anda harus menghapus paket dari indeks apa pun sebelum Anda dapat memisahkannya, jika tidak disosiasi gagal.

Konsol adalah cara paling sederhana untuk memisahkan paket dari domain dan menghapusnya dari OpenSearch Layanan. Menghapus paket dari OpenSearch Layanan tidak menghapusnya dari lokasi aslinya di Amazon S3.

  1. Masuk ke https://aws.amazon.com, dan kemudian pilih Masuk ke Konsol.

  2. Di bawah Analytics, pilih OpenSearch Layanan Amazon.

  3. Di panel navigasi, pilih domain Anda, lalu pilih tab Paket.

  4. Pilih paket, Tindakan, dan kemudian pilih Dissociate. Konfirmasikan pilihan Anda.

  5. Tunggu paket menghilang dari daftar. Anda mungkin harus me-refresh browser.

  6. Jika Anda ingin menggunakan paket dengan domain lain, berhenti di sini. Untuk melanjutkan dengan menghapus paket (jika itu kamus kustom), pilih Paket di panel navigasi.

  7. Pilih paket dan pilih Hapus.

Sebagai alternatif, gunakan, SDK AWS CLI, atau API konfigurasi untuk memisahkan dan menghapus paket. Untuk informasi selengkapnya, lihat Referensi AWS CLI Perintah dan Referensi API Amazon OpenSearch Service.