Maßgeschneiderte Pakete für Amazon OpenSearch Service - OpenSearch Amazon-Dienst

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Maßgeschneiderte Pakete für Amazon OpenSearch Service

Mit Amazon OpenSearch Service können Sie benutzerdefinierte Wörterbuchdateien wie Stoppwörter und Synonyme hochladen. Außerdem bietet Amazon Service mehrere vorgefertigte, optionale Plug-ins, die Sie mit Ihrer Domain verknüpfen können. Der Oberbegriff für diese beiden Arten von Dateien ist Pakete.

Wörterbuchdateien verbessern Ihre Suchergebnisse, indem sie OpenSearch anweisen, bestimmte häufig verwendete Wörter zu ignorieren oder Begriffe wie „gefrorener Vanillepudding“, „Gelato“ und „Eiscreme“ gleichwertig zu behandeln. Sie können außerdem die Stammverknüpfung verbessern, z. B. im Plug-In Japanese (kuromoji) Analysis.

Optionale Plugins können Ihrer Domain zusätzliche Funktionen bieten. Sie können beispielsweise das Amazon Personalize Personalize-Plugin verwenden, um personalisierte Suchergebnisse zu erhalten. Optionale Plugins verwenden den ZIP-PLUGIN Pakettyp. Weitere Hinweise zu optionalen Plugins finden Sie unterPlugins nach Engine-Version in Amazon OpenSearch Service.

Paketberechtigungen

Benutzer ohne Administratorzugriff benötigen bestimmte AWS Identity and Access Management (IAM-) Aktionen, um Pakete zu verwalten:

  • es:CreatePackage- ein Paket in einer OpenSearch Serviceregion erstellen

  • es:DeletePackage- löscht ein Paket aus einer OpenSearch Serviceregion

  • es:AssociatePackage – Zuordnen eines Pakets zu einer Domäne

  • es:DissociatePackage – Trennen eines Pakets von einer Domäne

Sie benötigen auch Berechtigungen für den Amazon-S3-Bucket-Pfad oder das Objekt, in dem sich das benutzerdefinierte Paket befindet.

Erteilen Sie alle Berechtigungen innerhalb von IAM, nicht in der Domänenzugriffsrichtlinie. Weitere Informationen finden Sie unter Identity and Access Management in Amazon OpenSearch Service.

Hochladen von Paketen nach Amazon S3

In diesem Abschnitt wird beschrieben, wie Sie benutzerdefinierte Wörterbuchpakete hochladen können, da optionale Plugin-Pakete bereits vorinstalliert sind. Bevor Sie Ihrer Domain ein benutzerdefiniertes Wörterbuch zuordnen können, müssen Sie es in einen Amazon S3 S3-Bucket hochladen. Weitere Anleitungen finden Sie unter Upload eines Objekts im Benutzerhandbuch für Amazon Simple Storage Service. Unterstützte Plugins müssen nicht hochgeladen werden.

Wenn Ihr Wörterbuch vertrauliche Informationen enthält, geben Sie beim Hochladen eine serverseitige Verschlüsselung mit von S3 verwalteten Schlüsseln an. OpenSearch Der Dienst kann nicht auf Dateien auf S3 zugreifen, die Sie mit einem Schlüssel schützen. AWS KMS

Nachdem Sie die Datei hochgeladen haben, notieren Sie deren S3-Pfad. Das Pfadformat lautet s3://bucket-name/file-path/file-name.

Sie können die folgende Synonymdatei für Testzwecke verwenden. Speichern Sie diese unter synonyms.txt.

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

Bestimmte Wörterbücher, wie Hunspell-Wörterbücher, verwenden mehrere Dateien und benötigen eigene Verzeichnisse im Dateisystem. Derzeit unterstützt OpenSearch Service nur Wörterbücher mit einer einzigen Datei.

Importieren und Zuordnen von Paketen

Die Konsole ist die einfachste Methode, ein benutzerdefiniertes Wörterbuch in Service zu importieren. OpenSearch Wenn Sie ein Wörterbuch aus Amazon S3 importieren, speichert OpenSearch Service seine eigene Kopie des Pakets und verschlüsselt diese Kopie automatisch mit AES-256 mit OpenSearch vom Service verwalteten Schlüsseln.

Optionale Plug-ins sind in OpenSearch Service bereits vorinstalliert, sodass Sie sie nicht selbst hochladen müssen. Sie müssen jedoch ein Plug-in mit einer Domain verknüpfen. Verfügbare Plug-ins sind auf dem Bildschirm Pakete in der Konsole aufgeführt.

  1. Wählen Sie in der Amazon OpenSearch Service-Konsole Pakete aus.

  2. Klicken Sie auf Packet importieren.

  3. Geben Sie dem Benutzerwörterbuch einen aussagekräftigen Namen.

  4. Geben Sie den S3-Pfad zu der Datei an und wählen Sie dann Absenden aus.

  5. Kehren Sie zum Bildschirm Packages (Pakete) zurück.

  6. Wenn der Paketstatus Available (Verfügbar) lautet, wählen Sie das Paket aus. Optionale Plugins werden automatisch verfügbar sein.

  7. Wählen Sie Einer Domain zuordnen aus.

  8. Wählen Sie eine Domäne aus und klicken Sie dann auf Associate (Zuordnen).

  9. Wählen Sie im Navigationsbereich Ihre Domäne und dann die Registerkarte Pakete aus.

  10. Wenn es sich bei dem Paket um ein benutzerdefiniertes Wörterbuch handelt, notieren Sie sich die ID, wenn das Paket verfügbar wird. Verwenden Sie analyzers/id als Dateipfad für Anfragen an OpenSearch.

Verwenden Sie alternativ die SDKs oder die AWS CLI Konfigurations-API, um Pakete zu importieren und zuzuordnen. Weitere Informationen finden Sie in der AWS CLI Befehlsreferenz und der Amazon OpenSearch Service API-Referenz.

Verwenden von Paketen mit OpenSearch

In diesem Abschnitt wird beschrieben, wie Sie beide Arten von Paketen verwenden können: benutzerdefinierte Wörterbücher und optionale Plugins.

Verwenden von benutzerdefinierten Wörterbüchern

Nachdem Sie eine Datei einer Domäne zugeordnet haben, können Sie sie beim Erstellen von Tokenizern und Tokenfiltern in Parametern wie synonyms_path, stopwords_path und user_dictionary verwenden. Der genaue Parameter ist je nach Objekt unterschiedlich. Mehrere Objekte unterstützen synonyms_path und stopwords_path, user_dictionary gilt jedoch exklusiv für das kuromoji-Plugin.

Für das IK-Analysis-Plug-In (Chinesisch) können Sie eine benutzerdefinierte Wörterbuchdatei als benutzerdefiniertes Paket hochladen und sie einer Domäne zuordnen, und das Plug-In nimmt sie automatisch auf, ohne dass ein user_dictionary-Parameter erforderlich ist. Wenn es sich bei Ihrer Datei um eine Synonymdatei handelt, verwenden Sie den synonyms_path-Parameter.

Mit dem folgenden Beispiel wird eine Synonymdatei zu einem neuen Index hinzugefügt:

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" } } } }

Diese Anforderung erstellt einen benutzerdefinierten Analysator für den Index, der den Standard-Tokenizer und einen Synonym-Tokenfilter verwendet.

  • Tokenizer teilen Zeichendatenströme auf der Grundlage einer Reihe von Regeln in Token (im Allgemeinen Wörter) auf. Das einfachste Beispiel ist der Whitespace-Tokenizer, der die vorhergehenden Zeichen jedes Mal in ein Token unterteilt, wenn er auf ein Leerzeichen trifft. Ein komplexeres Beispiel ist der Standard-Tokenizer, der unter Verwendung einer Reihe von grammatikalischen Regeln in vielen Sprachen arbeitet.

  • Tokenfilter fügen Token hinzu, ändern oder löschen Token. Ein Synonym-Tokenfilter beispielsweise fügt Token hinzu, wenn er ein Wort in der Synonymliste findet. Der Stopp-Tokenfilter entfernt Token, wenn er ein Wort in der Liste der Stoppwörter findet.

Diese Anfrage fügt dem Mapping auch ein Textfeld (description) hinzu und teilt mit, dass der neue Analyzer als Suchanalysegerät verwendet werden OpenSearch soll. Sie können sehen, dass es immer noch den Standard-Analysator als Indexanalysator verwendet.

Notieren Sie sich schließlich die Zeile "updateable": true im Token-Filter. Dieses Feld gilt nur für Suchanalysatoren, nicht für Indexanalysatoren und ist wichtig, wenn Sie den Suchanalysator später automatisch aktualisieren möchten.

Fügen Sie dem Index zu Testzwecken einige Dokumente hinzu:

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" }

Suchen Sie diese anschließend unter Verwendung eines Synonyms:

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

In diesem Fall wird die folgende Antwort OpenSearch zurückgegeben:

{ "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" } }] } }
Tipp

Wörterbuchdateien verwenden Java-Heap-Speicherplatz proportional zu ihrer Größe. Beispielsweise kann eine 2-GiB-Wörterbuchdatei 2 GiB Heap-Speicherplatz auf einem Knoten verbrauchen. Wenn Sie große Dateien verwenden, stellen Sie sicher, dass die Knoten über genügend Heap-Speicher verfügen, um sie aufzunehmen. Überwachen Sie die JVMMemoryPressure-Metrik und skalieren Sie Ihren Cluster nach Bedarf.

Verwendung optionaler Plugins

OpenSearch Mit dem Service können Sie vorinstallierte, optionale OpenSearch Plugins zur Verwendung mit Ihrer Domain verknüpfen. Ein optionales Plugin-Paket ist mit einer bestimmten OpenSearch Version kompatibel und kann nur Domains mit dieser Version zugeordnet werden. Die Liste der verfügbaren Pakete für Ihre Domain enthält alle unterstützten Plugins, die mit Ihrer Domain-Version kompatibel sind. Nachdem Sie ein Plugin mit einer Domain verknüpft haben, beginnt ein Installationsvorgang auf der Domain. Anschließend können Sie auf das Plugin verweisen und es verwenden, wenn Sie Anfragen an den OpenSearch Service stellen.

Zum Zuordnen und Trennen eines Plugins ist eine blaue/grüne Bereitstellung erforderlich. Weitere Informationen finden Sie unter Änderungen, die normalerweise eine Blau/Grün-Bereitstellung auslösen.

Zu den optionalen Plugins gehören Sprachanalyseprogramme und benutzerdefinierte Suchergebnisse. Das Amazon Personalize Search Ranking-Plugin verwendet beispielsweise maschinelles Lernen, um Suchergebnisse für Ihre Kunden zu personalisieren. Weitere Informationen zu diesem Plugin finden Sie unter Suchergebnisse personalisieren von. OpenSearch Eine Liste aller unterstützten Plugins finden Sie unterPlugins nach Engine-Version in Amazon OpenSearch Service.

Sudachi-Plugin

Wenn Sie beim Sudachi-Plugin eine Wörterbuchdatei neu zuordnen, wirkt sich das nicht sofort auf die Domain aus. Das Wörterbuch wird aktualisiert, wenn die nächste blaue/grüne Bereitstellung im Rahmen einer Konfigurationsänderung oder eines anderen Updates auf der Domain ausgeführt wird. Alternativ können Sie ein neues Paket mit den aktualisierten Daten erstellen, mit diesem neuen Paket einen neuen Index erstellen, den vorhandenen Index erneut mit dem neuen Index indizieren und dann den alten Index löschen. Wenn Sie den Ansatz der Neuindizierung bevorzugen, verwenden Sie einen Indexalias, damit Ihr Datenverkehr nicht unterbrochen wird.

Darüber hinaus unterstützt das Sudachi-Plugin nur binäre Sudachi-Wörterbücher, die Sie mit der API-Operation hochladen können. CreatePackage Informationen zum vorgefertigten Systemwörterbuch und zum Verfahren zum Kompilieren von Benutzerwörterbüchern finden Sie in der Sudachi-Dokumentation.

Das folgende Beispiel zeigt, wie System- und Benutzerwörterbücher mit dem Sudachi-Tokenizer verwendet werden. Sie müssen diese Wörterbücher als benutzerdefinierte Pakete mit Typ hochladen TXT-DICTIONARY und ihre Paket-IDs in den zusätzlichen Einstellungen angeben.

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" } } } } } }

Pakete werden aktualisiert

In diesem Abschnitt wird nur beschrieben, wie Sie ein benutzerdefiniertes Wörterbuchpaket aktualisieren, da optionale Plugin-Pakete bereits für Sie aktualisiert wurden. Durch das Hochladen einer neuen Version eines Wörterbuchs auf Amazon S3 wird das Paket auf Amazon OpenSearch Service nicht automatisch aktualisiert. OpenSearch Service speichert eine eigene Kopie der Datei. Wenn Sie also eine neue Version auf S3 hochladen, müssen Sie sie manuell aktualisieren.

Jede Ihrer verknüpften Domänen speichert auch eine eigene Kopie der Datei. Um das Suchverhalten vorhersehbar zu halten, verwenden Domänen weiterhin ihre aktuelle Paketversion, bis Sie sie explizit aktualisieren. Um ein benutzerdefiniertes Paket zu aktualisieren, ändern Sie die Datei in Amazon S3 Control, aktualisieren Sie das Paket in OpenSearch Service und wenden Sie dann das Update an.

  1. Wählen Sie in der OpenSearch Servicekonsole Pakete aus.

  2. Wählen Sie ein Paket und Aktualisieren aus.

  3. Geben Sie den S3-Pfad zu der Datei an und wählen Sie dann Paket aktualisieren aus.

  4. Kehren Sie zum Bildschirm Packages (Pakete) zurück.

  5. Wenn der Paketstatus auf Verfügbar wechselt, wählen Sie das Paket aus. Wählen Sie dann eine oder mehrere verknüpfte Domänen aus, übernehmen Sie die Aktualisierung und bestätigen Sie. Warten Sie, bis sich der Zuordnungsstatus in Aktiv ändert.

  6. Die nächsten Schritte hängen davon ab, wie Sie Ihre Indizes konfiguriert haben:

Die Konsole ist zwar die einfachste Methode, Sie können aber auch die SDKs oder die AWS CLI Konfigurations-API verwenden, um Servicepakete zu aktualisieren OpenSearch . Weitere Informationen finden Sie in der AWS CLI Befehlsreferenz und der Amazon OpenSearch Service API-Referenz.

Anstatt ein Paket in der Konsole manuell zu aktualisieren, können Sie die SDKs verwenden, um den Update-Prozess zu automatisieren. Das folgende Python-Beispielskript lädt eine neue Paketdatei auf Amazon S3 hoch, aktualisiert das Paket in OpenSearch Service und wendet das neue Paket auf die angegebene Domain an. Nachdem bestätigt wurde, dass das Update erfolgreich war, führt es einen Beispielaufruf durch, um OpenSearch nachzuweisen, dass die neuen Synonyme angewendet wurden.

Sie müssen Werte für host, region, file_name, bucket_name, s3_key, package_id, domain_name und query angeben.

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)
Anmerkung

Wenn Sie bei der Ausführung des Skripts mit dem die Fehlermeldung „Paket nicht gefunden“ erhalten, bedeutet dies wahrscheinlich AWS CLI, dass Boto3 die in ~/.aws/config angegebene Region verwendet, die nicht die Region ist, in der sich Ihr S3-Bucket befindet. Führen Sie entweder aws configure aus und geben Sie die richtige Region an, oder fügen Sie die Region explizit zum Client hinzu:

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

Manuelle Indexaktualisierungen für Wörterbücher

Manuelle Indexaktualisierungen gelten nur für benutzerdefinierte Wörterbücher, nicht für optionale Plugins. Um ein aktualisiertes Wörterbuch zu verwenden, müssen Sie Ihre Indizes manuell aktualisieren, wenn Sie eine der folgenden Bedingungen erfüllen:

  • Ihre Domäne führt Elasticsearch 7.7 oder früher aus.

  • Sie verwenden benutzerdefinierte Pakete als Indexanalysatoren.

  • Sie verwenden benutzerdefinierte Pakete als Suchanalysatoren, schließen jedoch das aktualisierbare Feld nicht ein.

Um Analyzer mit den neuen Paketdateien zu aktualisieren, haben Sie zwei Möglichkeiten:

  • Schließen und öffnen Sie alle Indizes, die Sie aktualisieren möchten:

    POST my-index/_close POST my-index/_open
  • Indizieren Sie die Indizes neu. Erstellen Sie zunächst einen Index, der die aktualisierte Synonymdatei (oder eine völlig neue Datei) verwendet. Beachten Sie, dass nur UTF-8 unterstützt wird.

    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" } } } }

    Nehmen Sie anschließend eine Neuindizierung des alten Index in diesen neuen Index vor:

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

    Wenn Sie häufig Index-Analysen aktualisieren, verwenden Sie Indexalias um einen konsistenten Pfad zum neuesten Index beizubehalten:

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

    Wenn Sie den alten Index nicht benötigen, löschen Sie ihn:

    DELETE my-index

Trennen und Entfernen von Paketen

Wenn Sie ein Paket, unabhängig davon, ob es sich um ein benutzerdefiniertes Wörterbuch oder ein optionales Plugin handelt, von einer Domain trennen, können Sie dieses Paket nicht mehr verwenden, wenn Sie neue Indizes erstellen. Nachdem ein Paket getrennt wurde, können bestehende Indizes, die das Paket verwendet haben, es nicht mehr verwenden. Sie müssen das Paket aus einem Index entfernen, bevor Sie es trennen können. Andernfalls schlägt die Trennung fehl.

Die Konsole ist die einfachste Methode, um ein Paket von einer Domäne zu trennen und es aus dem Dienst zu entfernen. OpenSearch Wenn Sie ein Paket aus dem OpenSearch Service entfernen, wird es nicht von seinem ursprünglichen Speicherort auf Amazon S3 entfernt.

  1. Rufen Sie die Webseite https://aws.amazon.com auf und klicken Sie dann auf Sign In to the Console (Bei der Konsole anmelden).

  2. Wählen Sie unter Analytics Amazon OpenSearch Service aus.

  3. Wählen Sie im Navigationsbereich Ihre Domäne und dann die Registerkarte Packages (Pakete) aus.

  4. Wählen Sie ein Paket aus, klicken Sie dann auf die Option Aktionen und anschließend auf Trennen. Bestätigen Sie Ihre Auswahl.

  5. Warten Sie, bis das Paket nicht mehr in der Liste angezeigt wird. Möglicherweise müssen Sie Ihren Browser aktualisieren.

  6. Wenn Sie das Paket mit anderen Domänen verwenden möchten, hören Sie hier auf. Um mit dem Entfernen des Pakets fortzufahren (falls es sich um ein benutzerdefiniertes Wörterbuch handelt), wählen Sie im Navigationsbereich Pakete aus.

  7. Wählen Sie das Paket und anschließend Delete (Löschen) aus.

Verwenden Sie alternativ die SDKs oder die AWS CLI Konfigurations-API, um Pakete zu trennen und zu entfernen. Weitere Informationen finden Sie in der AWS CLI Befehlsreferenz und der Amazon OpenSearch Service API-Referenz.