

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.

# Volltextsuche in Amazon Neptune mit Amazon Service OpenSearch
<a name="full-text-search"></a>

Neptune ist in [Amazon OpenSearch Service (OpenSearch Service)](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/) integriert, um die Volltextsuche sowohl in Gremlin- als auch in SPARQL-Abfragen zu unterstützen.

Ab [Engine-Version 1.3.0.0](engine-releases-1.3.0.0.md) unterstützt Amazon Neptune die Verwendung von [Amazon OpenSearch Service Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless.html) für die Volltextsuche in Gremlin- und SPARQL-Abfragen.

**Anmerkung**  
Für die Integration mit Amazon OpenSearch Service benötigt Neptune Elasticsearch Version 7.1 oder höher und funktioniert mit OpenSearch 2.3, 2.5 und höher. [Neptune funktioniert auch mit OpenSearch Serverless.](full-text-search-serverless.md)

Sie können Neptune mit einem vorhandenen OpenSearch Service-Cluster verwenden, der gemäß den gefüllt wurde. [Neptun-Datenmodell für Daten OpenSearch](full-text-search-model.md) Oder Sie können mithilfe eines Stacks eine mit Neptune verknüpfte OpenSearch Service-Domain erstellen. AWS CloudFormation 

**Wichtig**  
Der hier beschriebene OpenSearch Neptun-zu-Replikationsprozess repliziert keine leeren Knoten. Dies ist eine wichtige Einschränkung, die es zu beachten gilt.  
Wenn Sie eine [differenzierte Zugriffskontrolle](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html) auf Ihrem OpenSearch Cluster aktivieren, müssen Sie außerdem die [IAM-Authentifizierung in Ihrer Neptune-Datenbank aktivieren](iam-auth-enable.md).

![\[Layout der Neptune-Open-Suchstream-Poller-Architektur.\]](http://docs.aws.amazon.com/de_de/neptune/latest/userguide/images/poller-architecture.PNG)


**Topics**
+ [Neptune-to-OpenSearchAmazon-Replikation](full-text-search-cfn-setup.md)
+ [Replikation auf OpenSearch Serverless](full-text-search-serverless.md)
+ [Abfragen von einem OpenSearch Cluster mit aktivierter Fine-Grained Access Control (FGAC)](full-text-search-fgac.md)
+ [Verwendung der Apache-Lucene-Abfragesyntax in Neptune-Volltext-Suchabfragen](full-text-search-lucene.md)
+ [Neptun-Datenmodell für Daten OpenSearch](full-text-search-model.md)
+ [Parameter für die Neptune-Volltextsuche](full-text-search-parameters.md)
+ [OpenSearch Indexierung ohne Zeichenketten in Amazon Neptune](full-text-search-non-string-indexing.md)
+ [Full-text-search Ausführung von Abfragen in Amazon Neptune](full-text-search-query-execution.md)
+ [Beispiele für SPARQL-Volltextsuchabfragen in Neptune](full-text-search-sparql-examples.md)
+ [Verwenden der Neptune-Volltextsuche in Gremlin-Abfragen](full-text-search-gremlin.md)
+ [Fehlerbehebung bei der Neptune-Volltextsuche](streams-consumer-troubleshooting.md)

# Neptune-to-OpenSearchAmazon-Replikation
<a name="full-text-search-cfn-setup"></a>

Amazon Neptune unterstützt die Volltextsuche in Gremlin- und SPARQL-Abfragen mithilfe von Amazon Service (Service). OpenSearch OpenSearch Sie können einen AWS CloudFormation Stack verwenden, um eine OpenSearch Service-Domain mit Neptune zu verknüpfen. Die CloudFormation Vorlage erstellt eine Streams-Consumer-Anwendungsinstanz, die die Replikation ermöglicht. Neptune-to-OpenSearch

Bevor Sie beginnen, benötigen Sie einen vorhandenen Neptune-DB-Cluster, auf dem Streams als Quelle aktiviert sind, und eine OpenSearch Service-Domain, die als Replikationsziel dient.

Wenn Sie in der VPC, in der sich Ihr Neptune-DB-Cluster befindet, bereits über eine bestehende OpenSearch Ziel-Servicedomäne verfügen, auf die Lambda zugreifen kann, kann die Vorlage diese verwenden. Andernfalls müssen Sie eine neue erstellen.

**Anmerkung**  
Der OpenSearch Cluster und die Lambda-Funktion, die Sie erstellen, müssen sich in derselben VPC wie Ihr Neptune-DB-Cluster befinden, und der OpenSearch Cluster muss im VPC-Modus (nicht im Internetmodus) konfiguriert sein.

Wir empfehlen, dass Sie eine neu erstellte Neptune-Instanz für die Verwendung mit OpenSearch Service verwenden. Wenn Sie eine bestehende Instanz verwenden, die bereits Daten enthält, sollten Sie vor dem Durchführen von Abfragen eine OpenSearch Service-Datensynchronisierung durchführen, da es sonst zu Dateninkonsistenzen kommen kann. Dieses GitHub Projekt bietet ein Beispiel für die Durchführung der Synchronisation: [Neptune exportieren nach OpenSearch](https://github.com/awslabs/amazon-neptune-tools/tree/master/export-neptune-to-elasticsearch) (https://github.com/awslabs/amazon-neptune-tools/tree/master/export-neptune-to-elasticsearch).

**Wichtig**  
Für die Integration mit Amazon OpenSearch Service benötigt Neptune Elasticsearch Version 7.1 oder höher und funktioniert mit OpenSearch 2.3, 2.5 und future kompatiblen Opensearch-Versionen.

**Anmerkung**  
Ab [Engine-Version 1.3.0.0](engine-releases-1.3.0.0.md) unterstützt Amazon Neptune die Verwendung von [Amazon OpenSearch Service Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless.html) für die Volltextsuche in Gremlin- und SPARQL-Abfragen.

**Topics**
+ [AWS CloudFormation Verwenden einer Neptune-to-OpenSearch Vorlage zum Starten der Replikation](full-text-search-cfn-create.md)
+ [Aktivierung der Volltextsuche in bestehenden Neptune-Datenbanken](full-text-search-cfn-enabling.md)
+ [Aktualisieren des Stream-Pollers](full-text-search-cfn-update-poller.md)
+ [Deaktivieren und erneutes Aktivieren des Stream-Poller-Prozesses](full-text-search-using-pausing-poller.md)

# AWS CloudFormation Verwenden einer Neptune-to-OpenSearch Vorlage zum Starten der Replikation
<a name="full-text-search-cfn-create"></a>

## Starten Sie einen CloudFormation Stack, der für Ihre Region spezifisch ist
<a name="full-text-search-cfn-by-region"></a>

Jede der folgenden CloudFormation Vorlagen erstellt eine Streams-Consumer-Anwendungsinstanz in einer bestimmten AWS Region. Um den entsprechenden Stack über die CloudFormation Konsole zu **starten, wählen Sie je nach AWS Region, die Sie verwenden möchten, eine der Schaltflächen „Stack starten**“ in der folgenden Tabelle.


| Region | Anzeigen | In Designer anzeigen | Starten | 
| --- | --- | --- | --- | 
| USA Ost (Nord-Virginia) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| USA Ost (Ohio) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| USA West (Nordkalifornien) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=us-west-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=us-west-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=us-west-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| USA West (Oregon) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=us-west-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Kanada (Zentral) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=us-west-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=ca-central-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=ca-central-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Südamerika (São Paulo) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=sa-east-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=sa-east-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=sa-east-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Europa (Stockholm) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-north-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-north-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=eu-north-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Europa (Irland) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-west-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-west-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=eu-west-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Europa (London) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-west-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-west-2#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=eu-west-2#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Europa (Paris) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-west-3&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-west-3#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=eu-west-3#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Europa (Spain) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-south-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-south-2#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=eu-south-2#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Europa (Frankfurt) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=eu-central-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=eu-central-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=eu-central-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Middle East (Bahrain) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=me-south-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=me-south-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=me-south-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Naher Osten (VAE) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=me-central-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=me-central-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=me-central-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Israel (Tel Aviv) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=il-central-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=il-central-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=il-central-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Afrika (Kapstadt) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=af-south-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=af-south-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=af-south-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Asien-Pazifik (Hongkong) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-east-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-east-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=ap-east-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Asien-Pazifik (Tokio) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-northeast-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Asien-Pazifik (Seoul) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-northeast-2&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-2#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-2#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Asien-Pazifik (Singapur) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-southeast-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-southeast-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=ap-southeast-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Asien-Pazifik (Jakarta) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-southeast-3&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-southeast-3#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=ap-southeast-3#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| Asien-Pazifik (Mumbai) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.aws.amazon.com/cloudformation/designer/home?region=ap-south-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.aws.amazon.com/cloudformation/home?region=ap-south-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.aws.amazon.com/cloudformation/home?region=ap-south-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| China (Peking) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.amazonaws.cn/cloudformation/designer/home?region=cn-north-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.amazonaws.cn/cloudformation/home?region=cn-north-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.amazonaws.cn/cloudformation/home?region=cn-north-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| China (Ningxia) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.amazonaws.cn/cloudformation/designer/home?region=cn-northwest-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.amazonaws.cn/cloudformation/home?region=cn-northwest-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.amazonaws.cn/cloudformation/home?region=cn-northwest-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| AWS GovCloud (US-West) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.amazonaws-us-gov.com/cloudformation/designer/home?region=us-gov-west-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.amazonaws-us-gov.com/cloudformation/home?region=us-gov-west-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.amazonaws-us-gov.com/cloudformation/home?region=us-gov-west-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 
| AWS GovCloud (US-Ost) | [Anzeigen](https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [In Designer anzeigen](https://console.amazonaws-us-gov.com/cloudformation/designer/home?region=us-gov-east-1&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json) | [https://console.amazonaws-us-gov.com/cloudformation/home?region=us-gov-east-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json](https://console.amazonaws-us-gov.com/cloudformation/home?region=us-gov-east-1#/stacks/new?stackName=NeptuneQuickStart&templateURL=https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json)  | 

Wählen Sie auf der Seite **Create Stack (Stack erstellen)** die Option **Next (Weiter)** aus.

## Fügen Sie Details zu dem neuen OpenSearch Stack hinzu, den Sie erstellen
<a name="full-text-search-cfn-stack-details"></a>

Auf der Seite **Stack-Details angeben** finden Sie Eigenschaften und Parameter für die Einrichtung der Volltextsuche.

**Stack-Name** — Der Name des neuen CloudFormation Stacks, den Sie erstellen. Sie können in der Regel den Standardwert `NeptuneStreamPoller` verwenden.

Geben Sie unter **Parameter**, Folgendes ein:

**Netzwerkkonfiguration für die VPC, auf der der Streams-Consumer ausgeführt wird**
+ **`VPC`** – Geben Sie den Namen der VPC an, in der die abfragende Lambda-Funktion ausgeführt werden wird.
+ **`List of Subnet IDs`** – die Subnetze, für die eine Netzwerkschnittstelle eingerichtet ist. Fügen Sie Subnetze hinzu, die Ihrem Neptune-Cluster entsprechen.
+ **`List of Security Group Ids`**— Geben Sie die Sicherheitsgruppen IDs an, die eingehenden Schreibzugriff auf Ihren Neptune-DB-Quellcluster gewähren.
+ **`List of Route Table Ids`** – Dies wird benötigt, um einen Amazon-DynamoDB-Endpunkt in Ihrer Neptune-VPC zu erstellen, wenn noch keiner vorhanden ist. Sie müssen eine durch Kommas getrennte Liste der IDs Routing-Tabellen angeben, die den Subnetzen zugeordnet sind.
+ **`Require to create Dynamo DB VPC Endpoint`** – Ein boolescher Wert, der standardmäßig `true` lautet. Sie müssen ihn nur zu `false` ändern, wenn Sie bereits einen DynamoDB-Endpunkt in Ihrer VPC erstellt haben.
+ **`Require to create Monitoring VPC Endpoint`** – Ein boolescher Wert, der standardmäßig `true` lautet. Sie müssen ihn nur in `false` ändern, wenn Sie bereits einen Überwachungsendpunkt in Ihrer VPC erstellt haben.

**Stream-Poller**
+ **`Application Name`** – Sie können diesen Satz in der Regel auf dem Standardwert (`NeptuneStream`) belassen. Wenn Sie einen anderen Namen verwenden, muss dieser eindeutig sein.
+ **`Memory size for Lambda Poller`** – Wird verwendet, um die Speichergröße festzulegen, die für die Lambda-Poller-Funktion verfügbar ist. Der Standardwert ist 2.048 Megabyte.
+ **`Lambda Runtime`** – Die Sprache, die in der Lambda-Funktion verwendet wird, mit der Elemente aus dem Neptune-Stream abgerufen werden. Sie können dies entweder auf `python3.9` oder auf `java8` setzen.
+ **`S3 Bucket having Lambda code artifacts`** – Lassen Sie dieses Feld leer, es sei denn, Sie verwenden eine benutzerdefinierte Lambda-Abfragefunktion, die aus einem anderen S3-Bucket geladen wird.
+ **`S3 Key corresponding to Lambda Code artifacts`** – Lassen Sie dieses Feld leer, es sei denn, Sie verwenden eine benutzerdefinierte Lambda-Abfragefunktion.
+ **`StartingCheckpoint`** – Der Start-Prüfpunkt für den Stream-Poller. Die Standardeinstellung ist `0:0`, was bedeutet, dass mit dem Anfang des Neptune-Streams begonnen wird.
+ **`StreamPollerInitialState`** – Der anfängliche Zustand des Pollers. Die Standardeinstellung ist `ENABLED`, was bedeutet, dass die Stream-Replikation beginnt, sobald die gesamte Stack-Erstellung abgeschlossen ist.
+ **`Logging level for Lambda`** – Belassen Sie diesen Satz generell auf dem Standardwert, `INFO`
+ **`Managed Policies for Lambda Execution`** – Lassen Sie dieses Feld im Allgemeinen leer, es sei denn, Sie verwenden eine benutzerdefinierte Lambda-Abfragefunktion.
+ **`Stream Records Handler`** – Lassen Sie dieses Feld im Allgemeinen leer, es sei denn, Sie verwenden einen benutzerdefinierten Handler für die Datensätze in Neptune-Streams.
+ **`Maximum records Fetched from Stream`** – Mit diesem Parameter können Sie die Leistung optimieren. Der Standardwert (`100`) ist ein guter Anfangspunkt. Der maximal zulässige Wert ist 10.000. Je höher die Zahl ist, desto weniger Netzwerkaufrufe werden benötigt, um Datensätze aus dem Stream zu lesen. Allerdings ist umso mehr Speicher ist erforderlich, um die Datensätze zu verarbeiten.
+ **`Max wait time between two Polls (in Seconds)`** – Legt fest, wie häufig der Lambda-Poller aufgerufen wird, um die Neptune-Streams abzufragen. Legen Sie diesen Wert für kontinuierliche Abfragen auf „0“ fest. Die Höchstwert beträgt 3.600 Sekunden (1 Stunde). Der Standardwert (60 Sekunden) ist ein guter Ausgangspunkt, je nachdem, wie schnell sich Ihre Graphdaten ändern.
+ **`Maximum Continuous polling period (in Seconds)`** – Wird verwendet, um ein Timeout für die Lambda-Abfragefunktion festzulegen. Es sollte zwischen 5 und 900 Sekunden liegen. Der Standardwert (600 Sekunden) ist ein guter Ausgangspunkt.
+ **`Step Function Fallback Period`**— Die Anzahl der step-function-fallback-period Einheiten, die auf den Poller gewartet werden sollen. Danach wird die Step-Funktion über Amazon CloudWatch Events aufgerufen, um sich nach einem Ausfall zu erholen. Der Standardwert (5 Minuten) ist ein guter Anfangspunkt.
+ **`Step Function Fallback Period Unit`** – Die Zeiteinheiten (Minuten, Stunden, Tage), die zum Messen der vorhergehenden `Step Function Fallback Period` verwendet werden. Der Standardwert (Minuten) ist im Allgemeinen ausreichend.
+ **`Enable/disable creation of Elastic Search Mappings by Lambda`**— Markierung für die enable/disable automatische Verwaltung von Elastic Search-Mappings durch den Stream-Poller. Elastic Search-Mappings sind entscheidend für die Konvertierung zwischen Neptune- und Elastic Search-Datentypen. Dies sollte nur von erfahrenen Benutzern deaktiviert werden, die die direkte, manuelle Kontrolle über alle Mappings in ihrem Elastic Search-Index übernehmen möchten. Der Standardwert ist `true`.
+ **`Data replication scope`**— Legt fest, ob sowohl Knoten als auch Kanten repliziert werden sollen oder nur Knoten zu OpenSearch (dies gilt nur für Gremlin-Engine-Daten). Der Standardwert (All (Alle)) ist in der Regel ein guter Anfangspunkt.
+ **`Ignore OpenSearch missing document error`**— Markierung, um zu bestimmen, ob ein Fehler in einem fehlenden Dokument ignoriert OpenSearch werden kann. „Fehlendes Dokument“-Fehler können vereinzelt vorkommen, erfordern jedoch ein manuelles Eingreifen, wenn sie nicht ignoriert werden. Der Standardwert (`True`) ist in der Regel ein guter Ausgangspunkt.
+ **`Enable Non-String Indexing`** – Flag zum Aktivieren oder Deaktivieren der Indizierung von Feldern, die keinen Zeichenfolgeninhalt haben. Wenn dieses Kennzeichen auf gesetzt ist, werden Felder`true`, die keine Zeichenfolgen sind, indexiert OpenSearch, oder wenn`false`, werden nur Zeichenkettenfelder indexiert. Der Standardwert ist `true`.
+ **`Properties to exclude from being inserted into OpenSearch`**— Eine durch Kommas getrennte Liste von Eigenschafts- oder Prädikatschlüsseln, die von der Indizierung ausgeschlossen werden sollen. OpenSearch Wenn dieser CFN-Parameterwert leer gelassen wird, werden alle Eigenschaftsschlüssel indexiert.
+ **`Datatypes to exclude from being inserted into OpenSearch`**— Eine kommagetrennte Liste von Eigenschaften- oder Prädikat-Datentypen, die von der Indizierung ausgeschlossen werden sollen. OpenSearch Wenn dieser CFN-Parameterwert leer gelassen wird, werden alle Eigenschaftswerte, die sicher in Datentypen konvertiert werden können, indexiert. OpenSearch 

**Neptune-Stream**
+ **`Endpoint of source Neptune Stream`** – (*Erforderlich*) Dies kann eine von zwei Formen haben:
  + **`https://your DB cluster:port/propertygraph/stream`** (oder dessen Alias, `https://your DB cluster:port/pg/stream`).
  + `https://your DB cluster:port/sparql/stream`
+ **`Neptune Query Engine`** – Wählen Sie Gremlin oder SPARQL.
+ **`Is IAM Auth Enabled?`** – Wenn Ihr Neptune-DB-Cluster die IAM-Authentifizierung verwendet, setzen Sie diesen Parameter auf `true`.
+ **`Neptune Cluster Resource Id`** – Wenn Ihr Neptune-DB-Cluster die IAM-Authentifizierung verwendet, setzen Sie diesen Parameter auf die Cluster-Ressourcen-ID. Die Ressourcen-ID ist nicht mit der Cluster-ID identisch. Stattdessen hat sie das folgende Format: `cluster-` gefolgt von 28 alphanumerischen Zeichen. Sie finden sie unter **Cluster-Details** in der Neptune-Konsole.

**Zielcluster OpenSearch**
+ **`Endpoint for OpenSearch service`**— (Erforderlich) Geben Sie den Endpunkt für den OpenSearch Service in Ihrer VPC an.
+ **`Number of Shards for OpenSearch Index`** – Der Standardwert (5) ist in der Regel ein guter Ausgangspunkt.
+ **`Number of Replicas for OpenSearch Index`** – Der Standardwert (1) ist in der Regel ein guter Ausgangspunkt.
+ **`Geo Location Fields for Mapping`** – Wenn Sie Geolocation-Felder verwenden, führen Sie hier die Eigenschaftsschlüssel auf.

**Alarm**
+ **`Require to create Cloud watch Alarm`**— Stellen Sie diesen Wert ein, `true` wenn Sie einen CloudWatch Alarm für den neuen Stack erstellen möchten.
+ **`SNS Topic ARN for Cloudwatch Alarm Notifications`**— Das SNS-Thema ARN, an das CloudWatch Alarmbenachrichtigungen gesendet werden sollen (nur erforderlich, wenn Alarme aktiviert sind).
+ **`Email for Alarm Notifications`** – Die E-Mail-Adresse, an die Alarmbenachrichtigungen gesendet werden sollen (nur erforderlich, wenn Alarme aktiviert sind).

Als Ziel der Alarmbenachrichtigung können Sie nur SNS, nur E-Mail oder sowohl SNS als auch E-Mail hinzufügen.

## Führen Sie die Vorlage aus CloudFormation
<a name="full-text-search-cfn-complete"></a>

Jetzt können Sie den Prozess für die Bereitstellung einer Neptune-Streams-Consumer-Anwendungs-Instance wie folgt abschließen:

1. Wählen Sie auf der Seite „**Stack-Details angeben**“ die Option **Weiter** aus. CloudFormation

1. Wählen Sie auf der Seite **Optionen** **Weiter** aus.

1. Aktivieren Sie auf der Seite **Überprüfen** das erste Kontrollkästchen, um zu bestätigen, dass CloudFormation IAM-Ressourcen erstellt. Aktivieren Sie das zweite Kontrollkästchen, um `CAPABILITY_AUTO_EXPAND` für den neuen Stack zu bestätigen. 
**Anmerkung**  
`CAPABILITY_AUTO_EXPAND` bestätigt explizit, dass Makros ohne vorherige Überprüfung beim Erstellen des Stacks erweitert werden. Benutzer erstellen häufig einen Änderungssatz aus einer verarbeiteten Vorlage, sodass die von Makros durchgeführten Änderungen überprüft werden können, ehe der Stack tatsächlich erstellt wird. Weitere Informationen finden Sie in der CloudFormation [CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html)*API-Referenz unter AWS CloudFormation API-Vorgang*.

   Wählen Sie die Option **Erstellen** aus.

# Aktivierung der Volltextsuche in bestehenden Neptune-Datenbanken
<a name="full-text-search-cfn-enabling"></a>

 Dies sind die etablierten Ansätze, um die Volltextsuche in bestehenden Amazon Neptune Neptune-Datenbanken zu ermöglichen. Je nachdem, ob Sie Ihre Schreib-Workloads pausieren können oder nicht, können die Schritte leicht variieren. In diesem Handbuch werden die empfohlenen Schritte für beide Szenarien beschrieben — wann Sie Schreibvorgänge unterbrechen können und wann nicht. Es behandelt das Aktivieren von Neptune-Streams, das Erstellen eines Datenbankklons, das Synchronisieren von Daten mit einer OpenSearch Domain und das Einrichten kontinuierlicher Updates. Die Anleitung nutzt AWS Dienste und Open-Source-Tools, um den Prozess zu rationalisieren und Ausfallzeiten zu minimieren. 

## Wenn Sie Ihre Schreib-Workloads unterbrechen können
<a name="full-text-search-cfn-enabling-with-pause"></a>

Der beste Weg, die Volltextsuche in einer vorhandenen Neptune-Datenbank zu aktivieren, ist im Allgemeinen der folgende, vorausgesetzt, Sie können Ihre Schreib-Workloads unterbrechen. Dazu müssen Sie einen Klon erstellen, die Streams mithilfe eines Cluster-Parameters aktivieren und alle Instances neu starten. Das Erstellen eines Klons ist ein relativ schneller Vorgang, so dass die damit verbundenen Ausfallzeiten nur begrenzt sind.

Die erforderlichen Schritte sind:

1. Halten Sie alle Schreib-Workloads in der Datenbank an.

1. Aktivieren Sie Streams in der Datenbank (siehe [Aktivieren von Neptune-Streams](streams-using-enabling.md)).

1. Erstellen Sie einen Klon der Datenbank (siehe [Klonen von Datenbanken in Neptune](manage-console-cloning.md)).

1. Setzen Sie die Schreib-Workloads fort.

1. Verwenden Sie das [export-neptune-to-elasticsearch](https://github.com/awslabs/amazon-neptune-tools/tree/master/export-neptune-to-elasticsearch)Tool auf Github, um eine einmalige Synchronisation von der geklonten Datenbank zur Domain durchzuführen. OpenSearch

1. Verwenden Sie die [CloudFormation -Vorlage für Ihre Region](https://docs.aws.amazon.com/neptune/latest/userguide/full-text-search-cfn-create.html#full-text-search-cfn-by-region), um die Synchronisation von Ihrer ursprünglichen Datenbank aus mit kontinuierlicher Aktualisierung zu starten (es sind keine Konfigurationsänderungen in der Vorlage erforderlich).

1. Löschen Sie die geklonte Datenbank und den für das CloudFormation `export-neptune-to-elasticsearch` Tool erstellten Stack.

**Anmerkung**  
Bei Verwendung [export-neptune-to-elasticsearch](https://github.com/awslabs/amazon-neptune-tools/tree/master/export-neptune-to-elasticsearch)mit Opensearch Serverless muss der von [export-neptune-to-elasticsearch](https://github.com/awslabs/amazon-neptune-tools/tree/master/export-neptune-to-elasticsearch)Cloudformation `LambdaExecutionRole` erstellte Stack zur [Opensearch-Datenzugriffsrichtlinie hinzugefügt werden, um die Daten erfolgreich replizieren](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html) zu können.

## Wenn Sie Ihre Schreib-Workloads nicht unterbrechen können
<a name="full-text-search-cfn-enabling-without-pause"></a>

Wenn Sie es sich nicht leisten können, Schreib-Workloads in Ihrer Datenbank auszusetzen, finden Sie hier einen Ansatz, der noch weniger Ausfallzeiten beinhaltet als der oben empfohlene Ansatz, der jedoch vorsichtig durchgeführt werden muss:

1. Aktivieren Sie Streams in der Datenbank (siehe [Aktivieren von Neptune-Streams](streams-using-enabling.md)).

1. Erstellen Sie einen Klon der Datenbank (siehe [Klonen von Datenbanken in Neptune](manage-console-cloning.md)).

1. Holen Sie sich die neueste `eventID` zu den Streams in der geklonten Datenbank, indem Sie einen Befehl dieser Art für den Streams-API-Endpunkt ausführen (weitere Informationen finden Sie unter [Aufrufen der Neptune-Streams-REST-API](streams-using-api-call.md)):

   ```
   curl "https://(your neptune endpoint):(port)/(propertygraph or sparql)/stream?iteratorType=LATEST"
   ```

   Notieren Sie sich die Werte in den Feldern `commitNum` und `opNum` im `lastEventId`-Objekt in der Antwort.

1. Verwenden Sie das [export-neptune-to-elasticsearch](https://github.com/awslabs/amazon-neptune-tools/tree/master/export-neptune-to-elasticsearch)Tool auf Github, um eine einmalige Synchronisation von der geklonten Datenbank zur Domain durchzuführen. OpenSearch

1. Verwenden Sie die [CloudFormation -Vorlage für Ihre Region](https://docs.aws.amazon.com/neptune/latest/userguide/full-text-search-cfn-create.html#full-text-search-cfn-by-region), um die Synchronisation von Ihrer ursprünglichen Datenbank aus mit kontinuierlicher Aktualisierung zu starten.

   Nehmen Sie beim Erstellen des Stacks die folgende Änderung vor: Setzen Sie auf der Seite mit den Stack-Details im Abschnitt **Parameter** den Wert des `StartingCheckpoint` Felds auf**commitNum**: und **opnum** verwenden Sie dabei die `opNum` Werte `commitNum` und, die Sie oben aufgezeichnet haben.

1. Löschen Sie die geklonte Datenbank und den für das `export-neptune-to-elasticsearch` Tool erstellten CloudFormation Stack.

# Aktualisieren des Stream-Pollers
<a name="full-text-search-cfn-update-poller"></a>

 Die folgenden Informationen beschreiben die Schritte, die erforderlich sind, um den Stream-Poller mithilfe der AWS Managementkonsole mit den neuesten Lambda-Artefakten zu aktualisieren. 

## So aktualisieren Sie den Stream-Poller mit den neuesten Lambda-Artefakten
<a name="full-text-search-cfn-update-poller-lambda"></a>

Sie können den Stream-Poller wie folgt mit den neuesten Lambda-Artefakten aktualisieren:

1. Navigieren Sie im AWS-Managementkonsole zum übergeordneten CloudFormation CloudFormation Hauptstapel und wählen Sie ihn aus.

1. Wählen Sie die Option **Aktualisieren** für den Stack aus.

1. Wählen Sie **Aktuelle Vorlage ersetzen** aus.

1. Wählen Sie als Vorlagenquelle **Amazon-S3-URL** aus und geben Sie die folgende S3-URL ein:

   ```
   https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json
   ```

1. Wählen Sie **Weiter** aus, ohne die CloudFormation Parameter zu ändern.

1. Wählen Sie **Stack aktualisieren** aus.

Der Stack aktualisiert jetzt die Lambda-Artefakte mit den neuesten Artefakten.

## Erweitern des Stream-Pollers zur Unterstützung benutzerdefinierter Felder
<a name="full-text-search-using-custom-fields"></a>

Der aktuelle Stream-Poller kann einfach erweitert werden, um benutzerdefinierten Code für den Umgang mit benutzerdefinierten Feldern zu schreiben, wie in diesem Blogbeitrag ausführlich erläutert wird: [Erfassen von Graphänderungen mit Neptune Streams](https://aws.amazon.com/blogs/database/capture-graph-changes-using-neptune-streams/).

**Anmerkung**  
Achten Sie beim Hinzufügen eines benutzerdefinierten Felds darauf OpenSearch, das neue Feld als inneres Objekt eines Prädikats hinzuzufügen (siehe[Neptune-Datenmodell für die Volltextsuche](full-text-search-model.md)).

# Deaktivieren und erneutes Aktivieren des Stream-Poller-Prozesses
<a name="full-text-search-using-pausing-poller"></a>

**Warnung**  
Seien Sie vorsichtig, wenn Sie den Stream-Poller-Prozess deaktivieren\$1 Es können Datenverluste auftreten, wenn der Prozess länger als das Ablaufzeitfenster für den Stream angehalten wird. Das Standardzeitfenster beträgt 7 Tage, aber ab Engine-Version [1.2.0.0](engine-releases-1.2.0.0.md) können Sie ein benutzerdefiniertes Stream-Ablaufzeitfenster von maximal 90 Tagen festlegen.

# Deaktivieren (Unterbrechen) des Stream-Poller-Prozesses
<a name="full-text-search-pause-poller"></a>

1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die EventBridge Amazon-Konsole unter [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/).

1. Wählen Sie im Navigationsbereich **Regeln** aus.

1. Wählen Sie die Regel aus, deren Name den Namen enthält, den Sie in der CloudFormation Vorlage, mit der Sie den Stream-Poller eingerichtet haben, als **Anwendungsname** angegeben haben.

1. Wählen Sie **Disable ** (deaktivieren) aus.

1. Öffnen Sie die Step Functions Functions-Konsole unter [https://console.aws.amazon.com/states/](https://console.aws.amazon.com/states/).

1. Wählen Sie die laufende Step-Funktion aus, die dem Stream-Poller-Prozess entspricht. Auch hier enthält der Name dieser Step-Funktion den Namen, den Sie in der CloudFormation Vorlage, mit der Sie den Stream-Poller eingerichtet haben, als **Anwendungsname** angegeben haben. Sie können nach dem Ausführungsstatus der Funktion filtern, um nur **laufende** Funktionen anzuzeigen.

1. Wählen Sie **Beenden** aus.

# Erneutes Aktivieren des Stream-Poller-Prozesses
<a name="full-text-search-re-enable-poller"></a>

1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die EventBridge Amazon-Konsole unter [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/).

1. Wählen Sie im Navigationsbereich **Regeln** aus.

1. Wählen Sie die Regel aus, deren Name den Namen enthält, den Sie in der CloudFormation Vorlage, mit der Sie den Stream-Poller eingerichtet haben, als **Anwendungsname** angegeben haben.

1. Wählen Sie **Enable (Aktivieren)** aus. Die auf dem angegebenen geplanten Intervall basierende Ereignisregel löst jetzt eine neue Ausführung der Step-Funktion aus.

# Replikation auf OpenSearch Serverless
<a name="full-text-search-serverless"></a>

Ab [Engine-Version 1.3.0.0](engine-releases-1.3.0.0.md) unterstützt Amazon Neptune die Verwendung von [Amazon OpenSearch Service Serverless](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/serverless.html) für die Volltextsuche in Gremlin- und SPARQL-Abfragen. Wenn Sie OpenSearch Serverless verwenden, müssen Sie die [IAM-Authentifizierung auf Ihrem Neptune-Datenbank-Cluster aktivieren](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). Neptune-Datenbankcluster mit deaktivierter IAM-Authentifizierung werden von Serverless nicht unterstützt. OpenSearch 

## Für die AWS Lambda-Funktion des Pollers sind Änderungen erforderlich
<a name="full-text-changes-required"></a>

Wenn Sie auf OpenSearch Serverless replizieren, fügen Sie die Ausführungsrolle Lambda Stream Poller zur Datenzugriffsrichtlinie für die Serverless-Sammlung hinzu. OpenSearch Der ARN für die Lambda-Stream-Poller-Ausführungsrolle hat das folgende Format:

```
arn:aws:iam::(account ID):role/stack-name-NeptuneOSReplication-NeptuneStreamPollerExecu-(uuid)
```

## Für das Massenimport-Hilfsprogramm sind Änderungen erforderlich
<a name="full-text-changes-bulk-import"></a>

 Wenn Sie die Synchronisierung vorhandener Daten mit OpenSearch Serverless verwenden [ export-neptune-to-elasticsearch](https://github.com/awslabs/amazon-neptune-tools/tree/master/export-neptune-to-elasticsearch), fügen Sie das `LambdaExecutionRole` From the CloudFormation Stack zur Datenzugriffsrichtlinie für die OpenSearch Serverless-Sammlung hinzu. Der ARN für `LambdaExecutionRole` hat dieses Format: 

```
arn:aws:iam::012345678901:role/stack-name-LambdaExecutionRole-(id)
```

Weitere Informationen finden Sie unter [Datenzugriffskontrolle für Amazon OpenSearch Serverless](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/serverless-data-access.html).

## Erforderliche Änderungen an der IAM-Rolle, die für die Abfrage von Neptune verwendet wird
<a name="full-text-IAM"></a>

Die IAM-Entität (Benutzer oder Rolle), die für die Verbindung mit der Neptune-Datenbank verwendet wird, sollte über Berechtigungen sowohl für Neptune als auch für die Serverless-Sammlung verfügen. OpenSearch Das bedeutet, dass Ihrem Benutzer oder Ihrer Rolle eine serverlose Richtlinie wie die folgende beigefügt sein muss: OpenSearch 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowOpenSearchServerlessAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "aoss:APIAccessAll",
      "Resource": "arn:aws:aoss:us-east-1:111122223333:collection/collection-id"
    }
  ]
}
```

------

Weitere Informationen finden Sie unter [Erstellen benutzerdefinierter IAM-Richtlinienerklärungen für den Zugriff auf Daten in Amazon Neptune](iam-data-access-policies.md).

# Abfragen von einem OpenSearch Cluster mit aktivierter Fine-Grained Access Control (FGAC)
<a name="full-text-search-fgac"></a>

Wenn Sie eine [differenzierte Zugriffskontrolle](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html) auf Ihrem OpenSearch Cluster aktiviert haben, müssen Sie die [IAM-Authentifizierung auch in Ihrer Neptune-Datenbank aktivieren](iam-auth-enable.md).

Die IAM-Entität (Benutzer oder Rolle), die für die Verbindung mit der Neptune-Datenbank verwendet wird, sollte über Berechtigungen sowohl für Neptune als auch für den Cluster verfügen. OpenSearch Das bedeutet, dass Ihrem Benutzer oder Ihrer Rolle eine OpenSearch Servicerichtlinie wie die folgende beigefügt sein muss:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowFullTextSearchAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/domain-name/*"
    }
  ]
}
```

------

Weitere Informationen finden Sie unter [Erstellen benutzerdefinierter IAM-Richtlinienerklärungen für den Zugriff auf Daten in Amazon Neptune](iam-data-access-policies.md).

# Verwendung der Apache-Lucene-Abfragesyntax in Neptune-Volltext-Suchabfragen
<a name="full-text-search-lucene"></a>

OpenSearch unterstützt die Verwendung der [Apache Lucene-Syntax](https://lucene.apache.org/core/8_9_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package.description) für query\$1string-Abfragen. Dies ist besonders nützlich, um mehrere Filter in einer Abfrage zu übergeben.

Neptune verwendet eine verschachtelte Struktur zum Speichern von Eigenschaften in einem OpenSearch Dokument (siehe). [Neptune-Datenmodell für die Volltextsuche](full-text-search-model.md) Wenn Sie die Lucene-Syntax verwenden, müssen Sie die vollständigen Pfade zu den Eigenschaften in diesem verschachtelten Modell verwenden.

Hier ist ein Gremlin-Beispiel:

```
g.withSideEffect("Neptune#fts.endpoint", "es_endpoint")
 .withSideEffect("Neptune#fts.queryType", "query_string")
 .V()
 .has("*", "Neptune#fts predicates.name.value:\"Jane Austin\" AND entity_type:Book")
```

Hier ist ein SPARQL-Beispiel:

```
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
  neptune-fts:config neptune-fts:endpoint 'http://localhost:9200 (http://localhost:9200/)' .
  neptune-fts:config neptune-fts:queryType 'query_string' .
  neptune-fts:config neptune-fts:query "predicates.\\*foaf\\*name.value:Ronak AND predicates.\\*foaf\\*surname.value:Sh*" .
  neptune-fts:config neptune-fts:field '*' .
  neptune-fts:config neptune-fts:return ?res .
}
```

# Neptun-Datenmodell für Daten OpenSearch
<a name="full-text-search-model"></a>

Amazon Neptune verwendet eine einheitliche JSON-Dokumentstruktur zum Speichern von SPARQL- und Gremlin-Daten im Service. OpenSearch Jedes Dokument in OpenSearch entspricht einer Entität und speichert alle relevanten Informationen für diese Entität. Bei Gremlin werden Scheitelpunkte und Kanten als Entitäten betrachtet, sodass die entsprechenden OpenSearch Dokumente Informationen über Scheitelpunkte, Beschriftungen und Eigenschaften enthalten. Bei SPARQL können Subjekte als Entitäten betrachtet werden, sodass entsprechende OpenSearch Dokumente Informationen über alle Prädikat-Objekt-Paare in einem Dokument enthalten.

**Anmerkung**  
Die Neptune-to-OpenSearch Replikationsimplementierung speichert nur Zeichenkettendaten. Sie können sie jedoch so ändern, dass andere Datentypen gespeichert werden.

Die einheitliche JSON-Dokumentstruktur sieht folgendermaßen aus:

```
{
  "entity_id": "Vertex Id/Edge Id/Subject URI",
  "entity_type": [List of Labels/rdf:type object value],
  "document_type": "vertex/edge/rdf-resource"
  "predicates": {
    "Property name or predicate URI": [
      {
        "value": "Property Value or Object Value",
        "graph": "(Only for Sparql) Named Graph Quad is present"
        "language": "(Only for Sparql) rdf:langString"
      },
      {
        "value": "Property Value 2/ Object Value 2",
      }
    ]
  }
}
```

****
+ `entity_id` – Eindeutige Entitäts-ID, die das Dokument repräsentiert.
  + Bei SPARQL ist dies der Subjekt-URI.
  + Für Gremlin ist dies die `Vertex_ID` oder `Edge_ID`.
+ `entity_type` – Stellt eine oder mehrere Bezeichnungen für einen Vertex oder einen Edge bzw. keine oder mehrere `rdf:type`-Prädikatwerte für ein Subjekt dar.
+ `document_type` – Gibt an, ob das aktuelle Dokument einen Vertex, einen Edge oder eine RDF-Ressource darstellt.
+ `predicates` – Bei Gremlin werden Eigenschaften und Werte für einen Vertex oder einen Edge gespeichert. Bei SPARQL werden Prädikatobjektpaare gespeichert.

  Der Eigenschaftsname hat die Form `properties.name.value` in OpenSearch. Um ihn abfragen zu können, müssen Sie ihn in dieser Form benennen.
+ `value ` – Ein Eigenschaftswert für Gremlin oder ein Objektwert für SPARQL.
+ `graph` – Ein benannter Graph für SPARQL.
+ `language` – Ein Sprach-Tag für ein `rdf:langString`-Literal in SPARQL.

## Beispiel für ein SPARQL-Dokument OpenSearch
<a name="full-text-search-model-sparql-example"></a>

**Daten**

```
@prefix dt:   <http://example.org/datatype#> .
@prefix ex:   <http://example.org/> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

ex:simone   rdf:type     ex:Person                    ex:g1
ex:michael  rdf:type     ex:Person                    ex:g1
ex:simone   ex:likes     "spaghetti"                  ex:g1

ex:simone   ex:knows     ex:michael                   ex:g2   # Not stored in ES
ex:simone   ex:likes     "spaghetti"                  ex:g2
ex:simone   ex:status    "La vita è un sogno"@it      ex:g2

ex:simone   ex:age       "40"^^xsd:int                DG      # Not stored in ES
ex:simone   ex:dummy     "testData"^^dt:newDataType   DG      # Not stored in ES
ex:simone   ex:hates     _:bnode                              # Not stored in ES
_:bnode     ex:means     "coding"                     DG      # Not stored in ES
```

**Dokumente**

```
{
  "entity_id": "http://example.org/simone",
  "entity_type": ["http://example.org/Person"],
  "document_type": "rdf-resource"
  "predicates": {
    "http://example.org/likes": [
      {
        "value": "spaghetti",
        "graph": "http://example.org/g1"
      },
      {
        "value": "spaghetti",
        "graph": "http://example.org/g2"
      }
    ]
    "http://example.org/status": [
      {
        "value": "La vita è un sogno",
        "language": "it"       // Only present for rdf:langString
      }
    ]
  }
}
```

```
{
  "entity_id" : "http://example.org/michael",
  "entity_type" : ["http://example.org/Person"],
  "document_type": "rdf-resource"
}
```

## Beispiel für ein Gremlin-Dokument OpenSearch
<a name="full-text-search-model-gremlin-example"></a>

**Daten**

```
# Vertex 1
simone   label    Person       <== Label
simone   likes    "spaghetti"  <== Property
simone   likes    "rice"       <== Property
simone   age      40           <== Property

# Vertex 2
michael  label    Person       <== Label

# Edge 1
simone  knows     michael      <== Edge
e1      updated  "2019-07-03"  <== Edge Property
e1      through  "company"     <== Edge Property
e1      since     10           <== Edge Property
```

**Dokumente**

```
{
  "entity_id": "simone",
  "entity_type": ["Person"],
  "document_type": "vertex",
  "predicates": {
    "likes": [
      {
        "value": "spaghetti"
      },
      {
        "value": "rice"
      }
    ]
  }
}
```

```
{
  "entity_id" : "michael",
  "entity_type" : ["Person"],
  "document_type": "vertex"
}
```

```
{
  "entity_id": "e1",
  "entity_type": ["knows"],
  "document_type": "edge"
  "predicates": {
    "through": [
      {
        "value": "company"
      }
    ]
  }
}
```

# Parameter für die Neptune-Volltextsuche
<a name="full-text-search-parameters"></a>

Amazon Neptune verwendet die folgenden Parameter für die Angabe von OpenSearch Volltextabfragen in Gremlin und SPARQL:
+ **`queryType`**— (*Erforderlich*) Der Abfragetyp. OpenSearch (Eine Liste der Abfragetypen finden Sie in der [OpenSearch Dokumentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-queries.html)). Neptune unterstützt die folgenden OpenSearch Abfragetypen:
  + [simple\$1query\$1string](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html) – Gibt Dokumente zurück, die auf einer bereitgestellten Abfragezeichenfolge basieren, wobei ein Parser mit einer eingeschränkten, aber fehlertoleranten Lucene-Syntax verwendet wird. Dies ist der Standardabfragetyp.

    Diese Abfrage verwendet eine einfache Syntax, mit der die bereitgestellte Abfragezeichenfolge auf Grundlage spezieller Operatoren analysiert und in Begriffe aufgeteilt wird. Die Abfrage analysiert dann jeden Begriff unabhängig von einander, bevor übereinstimmende Dokumente zurückgegeben werden.

    Obwohl die Syntax eingeschränkter ist als die `query_string`-Abfrage, gibt die `simple_query_string`-Abfrage keine Fehler für ungültige Syntax zurück. Stattdessen werden alle ungültigen Teile der Abfragezeichenfolge ignoriert.
  + [match](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html) – die `match`-Abfrage ist die Standardabfrage für das Durchführen einer Volltextsuche, einschließlich Optionen für Fuzzyübereinstimmungen.
  + [prefix](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html) – Gibt Dokumente zurück, die ein bestimmtes Präfix in einem angegebenen Feld enthalten.
  + [fuzzy](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html) – Gibt Dokumente zurück, die dem Suchbegriff ähnelnde Begriffe enthalten, wie sie anhand einer Levenshtein-Bearbeitungsdistanz gemessen werden.

    Eine Bearbeitungsdistanz ist die erforderliche Anzahl der Änderungen einzelner Zeichen, damit ein Begriff in einen anderen umgewandelt werden kann. Diese Änderungen können Folgendes umfassen:
    + Ändern eines Zeichens (Maus zu Haus).
    + Entfernen eines Zeichens (Reis zu Eis).
    + Einfügen eines Zeichens (Bauch zu Brauch).
    + Transponieren von zwei benachbarten Zeichen (Beine zu Biene).

    Für die Suche nach ähnlichen Begriffen erstellt die Fuzzyabfrage einen Satz aller möglichen Variationen und Erweiterungen des Suchbegriffs innerhalb einer angegebenen Bearbeitungsdistanz und gibt dann exakte Übereinstimmungen für jede dieser Varianten zurück.
  + [term](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html) – Gibt Dokumente zurück, die eine exakte Übereinstimmung eines bestimmten Begriffs in einem der angegebenen Felder enthalten.

    Mit der `term`-Abfrage können Sie nach Dokumenten suchen, die auf einem genauen Wert basieren, z, B. einem Preis, einer Produkt-ID oder einem Benutzernamen.
**Warnung**  
Vermeiden Sie die Verwendung der Begriffsabfrage für Textfelder. OpenSearch Ändert standardmäßig die Werte von Textfeldern im Rahmen seiner Analyse, was es schwierig machen kann, exakte Übereinstimmungen für Textfeldwerte zu finden.  
Verwenden Sie stattdessen die Übereinstimmungsabfrage, um nach Textfeldwerten zu suchen.
  + [query\$1string](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html) – Gibt Dokumente zurück, die auf einer angegebenen Abfragezeichenfolge basieren, wobei ein Parser mit einer strengen Syntax (Lucene-Syntax) verwendet wird.

    Diese Abfrage verwendet eine Syntax, um die bereitgestellte Abfragezeichenfolge basierend auf Operatoren wie AND oder NOT zu analysieren und zu trennen. Die Abfrage analysiert dann jeden getrennten Text unabhängig voneinander, bevor übereinstimmende Dokumente zurückgegeben werden.

    Mit der `query_string`-Abfrage können Sie eine komplexe Suche erstellen, die Platzhalterzeichen, Suchen in mehreren Feldern usw. enthält. Obwohl diese Abfrage vielseitig ist, ist Sie strikt und gibt bei einer ungültigen Syntax in der Abfragezeichenfolge einen Fehler.
**Warnung**  
Da bei einer ungültigen Syntax ein Fehler zurückgegeben wird, empfiehlt es sich nicht, die `query_string`-Abfrage für Suchfelder zu verwenden.  
Wenn Sie keine Abfragesyntax unterstützen müssen, sollten Sie die `match`-Abfrage verwenden. Wenn Sie die Funktionen einer Abfragesyntax benötigen, verwenden Sie die `simple_query_string`-Abfrage. Diese ist weniger strikt.
+ **`field`**— Das Feld, OpenSearch in dem die Suche ausgeführt werden soll. Dies kann nur weggelassen werden, wenn es `queryType` gestattet (wie z. B. bei `simple_query_string` und `query_string`). In diesem Fall wird die Suche für alle Felder durchgeführt. In Gremlin ist dies implizit.

  Es können mehrere Felder können angegeben werden, sofern die Abfrage dies zulässt, wie z. B. `simple_query_string` und `query_string`.
+ **`query`**— (*Erforderlich*) Die Abfrage, gegen die ausgeführt werden soll OpenSearch. Der Inhalt dieses Feldes kann je nach queryType unterschiedlich sein. Verschiedene queryTypes akzeptieren unterschiedliche Syntaxregeln, wie zum Beispiel `Regexp`. In Gremlin ist `query` implizit.
+ **`maxResults`** – Die maximale Anzahl der zurückzugebenden Ergebnisse. Die Standardeinstellung ist die `index.max_result_window` OpenSearch Einstellung, die selbst standardmäßig 10.000 ist. Der `maxResults`-Parameter kann eine beliebige Zahl angeben, die niedriger ist.
**Wichtig**  
Wenn Sie einen höheren Wert als den OpenSearch `index.max_result_window` Wert festlegen `maxResults` und versuchen, mehr als `index.max_result_window` Ergebnisse abzurufen, OpenSearch schlägt dies mit einem `Result window is too large` Fehler fehl. Allerdings geht Neptune damit vorsichtig um, ohne den Fehler zu propagieren. Beachten Sie dies, wenn Sie versuchen, mehr als `index.max_result_window` Ergebnisse abzurufen.
+ **`minScore`** – Der Mindestwert, den ein Suchergebnis für die Rückgabe haben muss. Eine Erläuterung der Ergebnisbewertung finden Sie in der [Dokumentation zur OpenSearch Relevanz](https://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.html).
+ **`batchSize`** – Neptune ruft immer Daten in Stapeln ab (die Standardstapelgröße ist 100). Sie können mit diesem Parameter die Leistung optimieren. Die Batchgröße darf die `index.max_result_window` OpenSearch Einstellung nicht überschreiten, die standardmäßig auf 10.000 eingestellt ist.
+ **`sortBy`**— Ein optionaler Parameter, mit dem Sie die zurückgegebenen OpenSearch Ergebnisse nach einer der folgenden Kriterien sortieren können:
  + *Ein bestimmtes Zeichenfolgenfeld im Dokument* –  

    In einer SPARQL-Abfrage können Sie beispielsweise Folgendes angeben:

    ```
        neptune-fts:config neptune-fts:sortBy foaf:name .
    ```

    In einer ähnlichen Gremlin-Abfrage können Sie Folgendes angeben:

    ```
        .withSideEffect('Neptune#fts.sortBy', 'name')
    ```
  + *Ein bestimmtes Nicht-Zeichenfolgenfeld (`long`, `double` usw.)* –  

    Beachten Sie, dass Sie beim Sortieren nach einem Nicht-Zeichenfolgenfeld `.value` an den Feldnamen anhängen müssen, um es von einem Zeichenfolgenfeld zu unterscheiden.

    In einer SPARQL-Abfrage können Sie beispielsweise Folgendes angeben:

    ```
        neptune-fts:config neptune-fts:sortBy foaf:name.value .
    ```

    In einer ähnlichen Gremlin-Abfrage können Sie Folgendes angeben:

    ```
        .withSideEffect('Neptune#fts.sortBy', 'name.value')
    ```
  + `score` – Sortieren nach Übereinstimmungsergebnis (Standardeinstellung).

    Wenn der Parameter `sortOrder`, aber nicht `sortBy` vorhanden ist, werden die Ergebnisse in der durch `sortOrder` angegebenen Reihenfolge nach `score` sortiert.
  + `id` – Sortieren nach ID, d. h. SPARQL-Subject-URI oder Gremlin-Vertex oder Edge-ID.

    In einer SPARQL-Abfrage können Sie beispielsweise Folgendes angeben:

    ```
        neptune-fts:config neptune-fts:sortBy 'Neptune#fts.entity_id' .
    ```

    In einer ähnlichen Gremlin-Abfrage können Sie Folgendes angeben:

    ```
        .withSideEffect('Neptune#fts.sortBy', 'Neptune#fts.entity_id')
    ```
  + `label` – Sortieren nach Etikett.

    In einer SPARQL-Abfrage können Sie beispielsweise Folgendes angeben:

    ```
        neptune-fts:config neptune-fts:sortBy 'Neptune#fts.entity_type' .
    ```

    In einer ähnlichen Gremlin-Abfrage können Sie Folgendes angeben:

    ```
        .withSideEffect('Neptune#fts.sortBy', 'Neptune#fts.entity_type')
    ```
  + `doc_type` – Sortieren nach Dokumenttyp (SPARQL oder Gremlin).

    In einer SPARQL-Abfrage können Sie beispielsweise Folgendes angeben:

    ```
        neptune-fts:config neptune-fts:sortBy 'Neptune#fts.document_type' .
    ```

    In einer ähnlichen Gremlin-Abfrage können Sie Folgendes angeben:

    ```
        .withSideEffect('Neptune#fts.sortBy', 'Neptune#fts.document_type')
    ```

  Standardmäßig sind die OpenSearch Ergebnisse nicht sortiert und ihre Reihenfolge ist nicht deterministisch, was bedeutet, dass dieselbe Abfrage bei jeder Ausführung Elemente in einer anderen Reihenfolge zurückgeben kann. Wenn die Ergebnismenge größer als `max_result_window` ist, kann daher jedes Mal eine ganz andere Teilmenge der Gesamtergebnisse zurückgegeben werden, wenn eine Abfrage ausgeführt wird. Durch die Sortierung können Sie jedoch die Ergebnisse verschiedener Durchläufe direkt vergleichbar machen.

  Wenn `sortOrder` von keinem `sortBy`-Parameter begleitet wird, wird die absteigende (`DESC`) Reihenfolge vom größten zum geringsten verwendet.
+ **`sortOrder`**— Ein optionaler Parameter, mit dem Sie angeben können, ob die OpenSearch Ergebnisse vom kleinsten zum größten oder vom größten zum kleinsten sortiert werden (Standardeinstellung):

****
  + `ASC` – Aufsteigende Reihenfolge, vom geringsten zum größten.
  + `DESC` – Absteigende Reihenfolge, vom größten zum geringsten.

    Dies ist der Standardwert, der verwendet wird, wenn der Parameter `sortBy` vorhanden ist, aber keine `sortOrder` angegeben wird.

  Wenn `sortBy` weder noch vorhanden `sortOrder` ist, werden die OpenSearch Ergebnisse standardmäßig nicht sortiert.

# OpenSearch Indexierung ohne Zeichenketten in Amazon Neptune
<a name="full-text-search-non-string-indexing"></a>

Die OpenSearch Nicht-String-Indizierung in Amazon Neptune ermöglicht die Replikation von Nicht-String-Werten für Prädikate mithilfe des Stream-Pollers. OpenSearch Alle Prädikatwerte, die sicher in ein entsprechendes Mapping oder einen entsprechenden Datentyp konvertiert werden können, werden anschließend repliziert. OpenSearch OpenSearch

Damit die Indexierung ohne Zeichenketten für einen neuen Stack aktiviert werden kann, muss das `Enable Non-String Indexing` Flag in der CloudFormation Vorlage auf gesetzt sein. `true` Dies ist die Standardeinstellung. Um einen vorhandenen Stack so zu aktualisieren, dass er die Nicht-Zeichenfolgen-Indizierung unterstützt, siehe unten unter [Aktualisieren eines vorhandenen Stacks](full-text-search-non-string-indexing-update.md).

**Anmerkung**  
Es ist empfehlenswert, die Nicht-Zeichenfolgen-Indizierung nicht für Engine-Versionen zu aktivieren, die älter sind als **`1.0.4.2`**.
OpenSearch Abfragen, die reguläre Ausdrücke für Feldnamen verwenden, die mehreren Feldern entsprechen, von denen einige Zeichenkettenwerte und andere Nichtzeichenfolgenwerte enthalten, schlagen mit einem Fehler fehl. Dies passiert auch, wenn Volltext-Suchanfragen in Neptune diesen Typ haben.
Wenn Sie nach einem Nicht-Zeichenfolgenfeld sortieren, hängen Sie „.value“ an den Feldnamen an, um das Feld von einem Zeichenfolgenfeld zu unterscheiden.

**Contents**
+ [Aktualisieren eines vorhandenen Neptune-Volltextsuchstacks zur Unterstützung der Nicht-Zeichenfolgen-Indizierung](full-text-search-non-string-indexing-update.md)
+ [Filtern, welche Felder in der Neptune-Volltextsuche indiziert werden](full-text-search-non-string-indexing-filters.md)
  + [Filtern nach Eigenschaften- oder Prädikatnamen](full-text-search-non-string-indexing-filters.md#full-text-search-non-string-indexing-filters-name)
  + [Filtern nach Eigenschaften- oder Prädikatstyp](full-text-search-non-string-indexing-filters.md#full-text-search-non-string-indexing-filters-datatype)
+ [Zuordnung von SPARQL- und Gremlin-Datentypen zu OpenSearch](full-text-search-non-string-indexing-mapping.md)
+ [Validierung von Datenzuordnungen](full-text-search-data-validation.md)
+ [OpenSearch Beispielabfragen ohne Zeichenfolge in Neptune](full-text-search-non-string-examples.md)
  + [Abrufen alle Scheitelpunkte, deren Alter über 30 liegt und deren Name mit „Si“ beginnt](full-text-search-non-string-examples.md#full-text-search-non-string-example-1)
  + [Abrufen aller Knoten mit einem Alter zwischen 10 und 50 und einem Namen, der unscharf mit „Ronka“ übereinstimmt](full-text-search-non-string-examples.md#full-text-search-non-string-example-2)
  + [Abrufen aller Knoten mit einem Zeitstempel, der in die letzten 25 Tage fällt](full-text-search-non-string-examples.md#full-text-search-non-string-example-3)
  + [Abrufen aller Knoten mit einem Zeitstempel, der in ein bestimmtes Jahr und einen bestimmten Monat fällt](full-text-search-non-string-examples.md#full-text-search-non-string-example-4)

# Aktualisieren eines vorhandenen Neptune-Volltextsuchstacks zur Unterstützung der Nicht-Zeichenfolgen-Indizierung
<a name="full-text-search-non-string-indexing-update"></a>

Wenn Sie die Neptune-Volltextsuche bereits verwenden, müssen Sie die folgenden Schritte ausführen, um die Nicht-Zeichenfolgen-Indizierung zu unterstützen:

1. **Halten Sie die Lambda-Funktion des Stream-Pollers an.** Dadurch wird sichergestellt, dass beim Export keine neuen Updates kopiert werden. Deaktivieren Sie dazu die Cloud-Ereignisregel, die die Lambda-Funktion aufruft:
   + Navigieren Sie im AWS-Managementkonsole zu CloudWatch.
   + Wählen Sie **Regeln** aus.
   + Wählen Sie die Regel mit dem Namen des Lambda-Stream-Pollers aus.
   + Wählen Sie **Deaktivieren** aus, um die Regel vorübergehend zu deaktivieren.

1. **Löscht den aktuellen Neptun-Index in. OpenSearch** Verwenden Sie die folgende `curl` Abfrage, um den `amazon_neptune` Index aus Ihrem OpenSearch Cluster zu löschen:

   ```
   curl -X DELETE "your OpenSearch endpoint/amazon_neptune"
   ```

1. **Starten Sie einen einmaligen Export von Neptune nach. OpenSearch** Es empfiehlt sich, an dieser Stelle einen neuen OpenSearch Stack einzurichten, sodass neue Artefakte für den Poller, der den Export durchführt, aufgenommen werden.

   Folgen Sie den [hier aufgeführten Schritten GitHub, um den einmaligen Export Ihrer Neptun-Daten in]( https://github.com/awslabs/amazon-neptune-tools/blob/master/export-neptune-to-elasticsearch/readme.md) zu starten. OpenSearch

1. **Aktualisieren Sie die Lambda-Artefakte für den vorhandenen Stream-Poller.** Nachdem der Export der Neptun-Daten nach erfolgreich abgeschlossen OpenSearch wurde, führen Sie die folgenden Schritte aus:
   + Navigieren Sie im AWS-Managementkonsole zu. CloudFormation
   + Wählen Sie den übergeordneten CloudFormation Hauptstapel aus.
   + Wählen Sie die Option **Aktualisieren** für diesen Stack aus.
   + Wählen Sie **Aktuelle Vorlage aus den Optionen ersetzen**.
   + Wählen Sie unter „Vorlagenquelle“ die Option **Amazon S3 URL** aus.
   + Geben Sie für die Amazon-S3-URL Folgendes ein:

     ```
     https://aws-neptune-customer-samples.s3.amazonaws.com/neptune-stream/neptune_to_elastic_search.json
     ```
   + Wählen Sie **Weiter**, ohne einen der CloudFormation Parameter zu ändern.
   + Wählen Sie **Stack aktualisieren** aus. CloudFormation ersetzt die Lambda-Code-Artefakte für den Stream-Poller durch die neuesten Artefakte.

1. **Starten Sie den Stream-Poller erneut.** Aktivieren Sie dazu die entsprechende CloudWatch Regel:
   + Navigieren Sie im AWS-Managementkonsole zu CloudWatch.
   + Wählen Sie **Regeln** aus.
   + Wählen Sie die Regel mit dem Namen des Lambda-Stream-Pollers aus.
   + Wählen Sie **Aktivieren**.

# Filtern, welche Felder in der Neptune-Volltextsuche indiziert werden
<a name="full-text-search-non-string-indexing-filters"></a>

In den CloudFormation Vorlagendetails gibt es zwei Felder, in denen Sie Eigenschafts- oder Prädikatschlüssel oder Datentypen angeben können, die von der Indizierung ausgeschlossen werden sollen: OpenSearch 

## Filtern nach Eigenschaften- oder Prädikatnamen
<a name="full-text-search-non-string-indexing-filters-name"></a>

Sie können den optionalen CloudFormation Vorlagenparameter named verwenden, `Properties to exclude from being inserted into Elastic Search Index` um eine durch Kommas getrennte Liste von Eigenschafts- oder Prädikatschlüsseln bereitzustellen, die von der Indizierung ausgeschlossen werden sollen. OpenSearch 

Angenommen, Sie haben diesen Parameter auf `bob` festgelegt:

```
"Properties to exclude from being inserted into Elastic Search Index" : bob
```

In diesem Fall würde der Stream-Datensatz der folgenden Gremlin-Aktualisierungsabfrage gelöscht, anstatt in den Index aufgenommen zu werden:

```
g.V("1").property("bob", "test")
```

In ähnlicher Weise könnten Sie den Parameter auf `http://my/example#bob` setzen:

```
"Properties to exclude from being inserted into Elastic Search Index" : http://my/example#bob
```

In diesem Fall würde der Stream-Datensatz der folgenden SPARQL-Aktualisierungsabfrage gelöscht, anstatt in den Index aufgenommen zu werden:

```
PREFIX ex: <http://my/example#>
INSERT DATA { ex:s1 ex:bob "test"}.
```

Wenn Sie in diesen CloudFormation Vorlagenparameter nichts eingeben, werden alle Eigenschaftsschlüssel, die nicht anderweitig ausgeschlossen wurden, indexiert.

## Filtern nach Eigenschaften- oder Prädikatstyp
<a name="full-text-search-non-string-indexing-filters-datatype"></a>

Sie können den optionalen CloudFormation Vorlagenparameter named verwenden, `Datatypes to exclude from being inserted into Elastic Search Index` um eine durch Kommas getrennte Liste von Eigenschaften- oder Prädikatwert-Datentypen bereitzustellen, die von der Indizierung ausgeschlossen werden sollen. OpenSearch 

Für SPARQL müssen Sie nicht den vollständigen URI vom Typ XSD auflisten, Sie können einfach das Datentyp-Token auflisten. Gültige Datentyp-Token, die Sie auflisten können, sind:
+ `string`
+ `boolean`
+ `float`
+ `double`
+ `dateTime`
+ `date`
+ `time`
+ `byte`
+ `short`
+ `int`
+ `long`
+ `decimal`
+ `integer`
+ `nonNegativeInteger`
+ `nonPositiveInteger`
+ `negativeInteger`
+ `unsignedByte`
+ `unsignedShort`
+ `unsignedInt`
+ `unsignedLong`

Für Gremlin sind folgende Datentypen zum Auflisten gültig:
+ `string`
+ `date`
+ `bool`
+ `byte`
+ `short`
+ `int`
+ `long`
+ `float`
+ `double`

Angenommen, Sie haben diesen Parameter auf `string` festgelegt:

```
"Datatypes to exclude from being inserted into Elastic Search Index" : string
```

In diesem Fall würde der Stream-Datensatz der folgenden Gremlin-Aktualisierungsabfrage gelöscht, anstatt in den Index aufgenommen zu werden:

```
g.V("1").property("myStringval", "testvalue")
```

In ähnlicher Weise könnten Sie den Parameter auf `int` setzen:

```
"Datatypes to exclude from being inserted into Elastic Search Index" : int
```

In diesem Fall würde der Stream-Datensatz der folgenden SPARQL-Aktualisierungsabfrage gelöscht, anstatt in den Index aufgenommen zu werden:

```
PREFIX ex: <http://my/example#>
PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>
INSERT DATA { ex:s1 ex:bob "11"^^xsd:int }.
```

Wenn Sie in diesen CloudFormation Vorlagenparameter nichts eingeben, werden alle Eigenschaften indexiert, deren Werte sicher in Äquivalente konvertiert werden können. OpenSearch Aufgelistete Typen, die von der Abfragesprache nicht unterstützt werden, werden ignoriert.

# Zuordnung von SPARQL- und Gremlin-Datentypen zu OpenSearch
<a name="full-text-search-non-string-indexing-mapping"></a>

Neue Datentypzuordnungen in OpenSearch werden auf der Grundlage des Datentyps erstellt, der in der Eigenschaft oder dem Objekt verwendet wird. Da einige Felder Werte unterschiedlichen Typs enthalten, kann es sein, dass bei der ersten Zuordnung einige Werte des Felds ausgeschlossen werden.

Neptun-Datentypen werden Datentypen wie folgt zugeordnet OpenSearch :


| SPARQL-Typen | Gremlin-Typen | OpenSearch Typen | 
| --- | --- | --- | 
|  `XSD:int` `XSD:unsignedInt` `XSD:integer` `XSD:byte` `XSD:unsignedByte` `XSD:short` `XSD:unsignedShort` `XSD:long` `XSD:unsignedLong`  |  `byte` `short` `int` `long`  | `long` | 
|  `XSD:float` `XSD:double` `XSD:decimal`  |  `float` `double`  | `double` | 
| `XSD:boolean` | `bool` | `boolean` | 
|  `XSD:datetime` `XSD:date`  | `date` | `date` | 
|  `XSD:string` `XSD:time`  | `string` | `text` | 
| *Benutzerdefinierter Datentyp* | *N/A* | `text` | 
| *Jeder andere Datentyp* | *N/A* | `text` | 

Die folgende Gremlin-Aktualisierungsabfrage bewirkt beispielsweise, dass ein neues Mapping für „NewField“ hinzugefügt wird, und zwar: OpenSearch `{ "type" : "double" }`

```
g.V("1").property("newField" 10.5)
```

In ähnlicher Weise bewirkt die folgende SPARQL-Aktualisierungsabfrage, dass ein neues Mapping für „ex:byte“ hinzugefügt wird, und zwar: OpenSearch `{ "type" : "long" }`

```
PREFIX ex: <http://my/example#>
PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>

INSERT DATA { ex:test ex:byte "123"^^xsd:byte }.
```

**Anmerkung**  
Wie Sie sehen können, OpenSearch kann ein Objekt, das von Neptune auf zugeordnet wurde, am Ende einen anderen Datentyp haben OpenSearch als in Neptune. Es gibt jedoch ein explizites Textfeld in „datatype“ OpenSearch, das den Datentyp aufzeichnet, den das Element in Neptune hat.

# Validierung von Datenzuordnungen
<a name="full-text-search-data-validation"></a>



Daten werden mit diesem Verfahren OpenSearch von Neptune aus repliziert:
+ Wenn eine Zuordnung für das fragliche Feld bereits vorhanden ist in: OpenSearch
  + Wenn die Daten mithilfe von Datenvalidierungsregeln sicher in die vorhandene Zuordnung konvertiert werden können, speichern Sie das Feld in OpenSearch.
  + Andernfalls löschen Sie den entsprechenden Stream-Update-Datensatz.
+ Wenn für das fragliche Feld keine Zuordnung vorhanden ist, suchen Sie einen OpenSearch Datentyp, der dem Datentyp des Felds in Neptune entspricht.
  + Wenn die Felddaten mithilfe von Datenvalidierungsregeln sicher in den OpenSearch Datentyp konvertiert werden können, speichern Sie die neue Zuordnung und die Felddaten in. OpenSearch
  + Andernfalls löschen Sie den entsprechenden Stream-Update-Datensatz.

Die Werte werden anhand äquivalenter OpenSearch Typen oder vorhandener OpenSearch Zuordnungen und nicht anhand der Neptuntypen validiert. Beispielsweise erfolgt die Validierung des Werts `"123"` in `"123"^^xsd:int` anhand des `long`-Typs und nicht anhand des `int`-Typs.

Obwohl Neptune versucht, alle Daten zu replizieren OpenSearch, gibt es Fälle, in denen sich die Datentypen in völlig von denen in Neptune unterscheiden, und in solchen Fällen OpenSearch werden Datensätze übersprungen, anstatt indexiert zu werden. OpenSearch

In Neptune kann eine Eigenschaft beispielsweise mehrere Werte unterschiedlichen Typs haben, wohingegen in OpenSearch einem Feld im gesamten Index denselben Typ haben muss.

Wenn Sie Debug-Logs aktivieren, können Sie sehen, welche Datensätze beim Export von Neptune nach gelöscht wurden. OpenSearch Ein Beispiel für einen Debug-Protokolleintrag ist:

```
Dropping Record : Data type not a valid Gremlin type 
<Record>
```

Datentypen werden wie folgt validiert:
+ **`text`**— Alle Werte in Neptune können sicher dem Text in zugeordnet werden. OpenSearch
+ **`long`**— Die folgenden Regeln für Neptun-Datentypen gelten, wenn der OpenSearch Mapping-Typ lang ist (in den folgenden Beispielen wird davon ausgegangen, dass er einen `long` Mapping-Typ `"testLong"` hat):
  + `boolean` – Ungültig, kann nicht konvertiert werden und der entsprechende Datensatz zum Stream-Update wird gelöscht.

    Ungültige Gremlin-Beispiele sind:

    ```
      "testLong" : true.
      "testLong" : false.
    ```

    Ungültige SPARQL-Beispiele sind:

    ```
      ":testLong" : "true"^^xsd:boolean
      ":testLong" : "false"^^xsd:boolean
    ```
  + `datetime` – Ungültig, kann nicht konvertiert werden und der entsprechende Datensatz zum Stream-Update wird gelöscht.

    Ein ungültiges Gremlin-Beispiel ist:

    ```
      ":testLong" :  datetime('2018-11-04T00:00:00').
    ```

    Ein ungültiges SPARQL-Beispiel ist:

    ```
      ":testLong" : "2016-01-01"^^xsd:date
    ```
  + `float`,`double`, oder `decimal` — Wenn der Wert in Neptune eine Ganzzahl ist, die in 64 Bit passen kann, ist er gültig und wird als Long gespeichert, aber wenn er einen Bruchteil hat oder a oder an ist oder größer OpenSearch als 9.223.372.036.854.775.807 oder kleiner als -9.223.372.036.854.775.808 ist`INF`, dann ist er nicht gültig und der entsprechende Stream Der Aktualisierungsdatensatz wurde gelöscht. `NaN`

    Gültige Gremlin-Beispiele sind:

    ```
      "testLong" :  145.0.
      ":testLong" :  123
      ":testLong" :  -9223372036854775807
    ```

    Gültige SPARQL-Beispiele sind:

    ```
      ":testLong" : "145.0"^^xsd:float
      ":testLong" :  145.0
      ":testLong" : "145.0"^^xsd:double
      ":testLong" : "145.0"^^xsd:decimal
      ":testLong" : "-9223372036854775807"
    ```

    Ungültige Gremlin-Beispiele sind:

    ```
      "testLong" :  123.45
      ":testLong" :  9223372036854775900
    ```

    Ungültige SPARQL-Beispiele sind:

    ```
      ":testLong" :  123.45
      ":testLong" :  9223372036854775900
      ":testLong" : "123.45"^^xsd:float
      ":testLong" : "123.45"^^xsd:double
      ":testLong" : "123.45"^^xsd:decimal
    ```
  + `string`— Wenn der Wert in Neptune eine Zeichenkettendarstellung einer Ganzzahl ist, die in einer 64-Bit-Ganzzahl enthalten sein kann, dann ist er gültig und wird in ein `long` In umgewandelt. OpenSearch Jeder andere Zeichenfolgenwert ist für eine Elasticsearch-`long`-Zuordnung ungültig und der entsprechende Stream-Update-Datensatz wird gelöscht.

    Gültige Gremlin-Beispiele sind:

    ```
      "testLong" :  "123".
      ":testLong" :  "145.0"
      ":testLong" :  "-9223372036854775807"
    ```

    Gültige SPARQL-Beispiele sind:

    ```
      ":testLong" : "145.0"^^xsd:string
      ":testLong" : "-9223372036854775807"^^xsd:string
    ```

    Ungültige Gremlin-Beispiele sind:

    ```
      "testLong" :  "123.45"
      ":testLong" :  "9223372036854775900"
      ":testLong" :  "abc"
    ```

    Ungültige SPARQL-Beispiele sind:

    ```
      ":testLong" : "123.45"^^xsd:string
      ":testLong" : "abc"
      ":testLong" : "9223372036854775900"^^xsd:string
    ```
+ **`double`**— Wenn der OpenSearch Mapping-Typ ist`double`, gelten die folgenden Regeln (hier wird davon ausgegangen, dass das Feld „TestDouble“ ein `double` Mapping enthält): OpenSearch
  + `boolean` – Ungültig, kann nicht konvertiert werden und der entsprechende Datensatz zum Stream-Update wird gelöscht.

    Ungültige Gremlin-Beispiele sind:

    ```
      "testDouble" : true.
      "testDouble" : false.
    ```

    Ungültige SPARQL-Beispiele sind:

    ```
      ":testDouble" : "true"^^xsd:boolean
      ":testDouble" : "false"^^xsd:boolean
    ```
  + `datetime` – Ungültig, kann nicht konvertiert werden und der entsprechende Datensatz zum Stream-Update wird gelöscht.

    Ein ungültiges Gremlin-Beispiel ist:

    ```
      ":testDouble" :  datetime('2018-11-04T00:00:00').
    ```

    Ein ungültiges SPARQL-Beispiel ist:

    ```
      ":testDouble" : "2016-01-01"^^xsd:date
    ```
  + Gleitkomma-`NaN` oder -`INF` – Wenn der Wert in SPARQL ein Gleitkomma-`NaN` oder -`INF` ist, dann ist er nicht gültig und der entsprechende Stream-Update-Datensatz wird gelöscht.

    Ungültige SPARQL-Beispiele sind:

    ```
    "  :testDouble" : "NaN"^^xsd:float
      ":testDouble" : "NaN"^^double
      ":testDouble" : "INF"^^double
      ":testDouble" : "-INF"^^double
    ```
  + Zahl oder numerische Zeichenfolge — Wenn der Wert in Neptune eine andere Zahl oder numerische Zeichenkettendarstellung einer Zahl ist, die sicher als a ausgedrückt werden kann`double`, dann ist er gültig und wird in ein In umgewandelt. `double` OpenSearch Jeder andere Zeichenkettenwert ist für eine OpenSearch `double` Zuordnung ungültig und der entsprechende Datensatz zur Stream-Aktualisierung wird gelöscht.

    Gültige Gremlin-Beispiele sind:

    ```
      "testDouble" :  123
      ":testDouble" :  "123"
      ":testDouble" :  145.67
      ":testDouble" :  "145.67"
    ```

    Gültige SPARQL-Beispiele sind:

    ```
      ":testDouble" :  123.45
      ":testDouble" :  145.0
      ":testDouble" : "123.45"^^xsd:float
      ":testDouble" : "123.45"^^xsd:double
      ":testDouble" : "123.45"^^xsd:decimal
      ":testDouble" : "123.45"^^xsd:string
    ```

    Ein ungültiges Gremlin-Beispiel ist:

    ```
      ":testDouble" :  "abc"
    ```

    Ein ungültiges SPARQL-Beispiel ist:

    ```
      ":testDouble" : "abc"
    ```
+ **`date`**— Wenn der OpenSearch Mapping-Typ ist`date`, sind Neptune `date` und der `dateTime` Wert gültig, ebenso wie jeder Zeichenkettenwert, der erfolgreich in ein Format geparst werden kann. `dateTime`

  Gültige Beispiele in Gremlin oder SPARQL sind:

  ```
    Date(2016-01-01)
    "2016-01-01" "
    2003-09-25T10:49:41"
    "2003-09-25T10:49"
    "2003-09-25T10"
    "20030925T104941-0300"
    "20030925T104941"
    "2003-Sep-25" "
    Sep-25-2003"
    "2003.Sep.25"
    "2003/09/25"
    "2003 Sep 25" "
    Wed, July 10, '96"
    "Tuesday, April 12, 1952 AD 3:30:42pm PST"
    "123"
    "-123"
    "0"
    "-0"
    "123.00"
    "-123.00"
  ```

  Ungültige Beispiele sind:

  ```
    123.45
    True
    "abc"
  ```

# OpenSearch Beispielabfragen ohne Zeichenfolge in Neptune
<a name="full-text-search-non-string-examples"></a>

Neptune unterstützt derzeit keine direkten OpenSearch Bereichsabfragen. Sie können jedoch den gleichen Effekt mit der Lucene-Syntax und query-type="query\$1string“ erzielen, wie Sie in den folgenden Beispielabfragen sehen können.

## Abrufen alle Scheitelpunkte, deren Alter über 30 liegt und deren Name mit „Si“ beginnt
<a name="full-text-search-non-string-example-1"></a>

In Gremlin:

```
g.withSideEffect('Neptune#fts.endpoint', 'http://your-es-endpoint')
 .withSideEffect("Neptune#fts.queryType", "query_string")
 .V().has('*', 'Neptune#fts predicates.age.value:>30 && predicates.name.value:Si*');
```

In SPARQL:

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://localhost:9200' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query "predicates.\\*foaf\\*age.value:>30 AND predicates.\\*foaf\\*name.value:Si*" .
    neptune-fts:config neptune-fts:field '*' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

Hier wird der Kürze halber `"\\*foaf\\*age` anstelle des vollständigen URI verwendet. Dieser reguläre Ausdruck ruft alle Felder ab, die `foaf` und `age` im URI enthalten.

## Abrufen aller Knoten mit einem Alter zwischen 10 und 50 und einem Namen, der unscharf mit „Ronka“ übereinstimmt
<a name="full-text-search-non-string-example-2"></a>

In Gremlin:

```
g.withSideEffect('Neptune#fts.endpoint', 'http://your-es-endpoint')
 .withSideEffect("Neptune#fts.queryType", "query_string")
 .V().has('*', 'Neptune#fts predicates.age.value:[10 TO 50] AND predicates.name.value:Ronka~');
```

In SPARQL:

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://localhost:9200' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query "predicates.\\*foaf\\*age.value:[10 TO 50] AND predicates.\\*foaf\\*name.value:Ronka~" .
    neptune-fts:config neptune-fts:field '*' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Abrufen aller Knoten mit einem Zeitstempel, der in die letzten 25 Tage fällt
<a name="full-text-search-non-string-example-3"></a>

In Gremlin:

```
g.withSideEffect('Neptune#fts.endpoint', 'http://your-es-endpoint')
 .withSideEffect("Neptune#fts.queryType", "query_string")
 .V().has('*', 'Neptune#fts predicates.timestamp.value:>now-25d');
```

In SPARQL:

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://localhost:9200' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query "predicates.\\*foaf\\*timestamp.value:>now-25d~" .
    neptune-fts:config neptune-fts:field '*' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Abrufen aller Knoten mit einem Zeitstempel, der in ein bestimmtes Jahr und einen bestimmten Monat fällt
<a name="full-text-search-non-string-example-4"></a>

In Gremlin unter Verwendung von [mathematischen Datumsausdrücken](https://www.elastic.co/guide/en/elasticsearch/reference/7.x/common-options.html#date-math) in der Lucene-Syntax für Dezember 2020:

```
g.withSideEffect('Neptune#fts.endpoint', 'http://your-es-endpoint')
 .withSideEffect("Neptune#fts.queryType", "query_string")
 .V().has('*', 'Neptune#fts predicates.timestamp.value:>2020-12');
```

Eine Gremlin-Alternative:

```
g.withSideEffect('Neptune#fts.endpoint', 'http://your-es-endpoint')
 .withSideEffect("Neptune#fts.queryType", "query_string")
 .V().has('*', 'Neptune#fts predicates.timestamp.value:[2020-12 TO 2021-01]');
```

# Full-text-search Ausführung von Abfragen in Amazon Neptune
<a name="full-text-search-query-execution"></a>

In einer Abfrage, die Folgendes beinhaltet full-text-search, versucht Neptune, die full-text-search Aufrufe an die erste Stelle zu setzen, bevor andere Teile der Abfrage ausgeführt werden. Dadurch wird die Anzahl der Aufrufe reduziert OpenSearch und in den meisten Fällen die Leistung erheblich verbessert. Dies ist jedoch keineswegs eine hard-and-fast Regel. Es gibt Situationen, in denen beispielsweise ein `PatternNode` oder `UnionNode` einem Volltextsuchaufruf vorausgehen kann.

Sehen Sie sich beispielsweise die folgende Gremlin-Datenbankabfrage an eine Datenbank an, die 100 000 Instances von `Person` enthält:

```
g.withSideEffect('Neptune#fts.endpoint', 'your-es-endpoint-URL')
 .hasLabel('Person')
 .has('name', 'Neptune#fts marcello~');
```

Wenn diese Abfrage in der Reihenfolge ausgeführt würde, in der die Schritte erscheinen, würden 100.000 Lösungen zusammenfließen OpenSearch, was zu Hunderten von OpenSearch Aufrufen führen würde. Tatsächlich ruft Neptune OpenSearch zuerst an und verbindet dann die Ergebnisse mit den Neptun-Ergebnissen. In den meisten Fällen erfolgt dies viel schneller als die Ausführung der Abfrage in der ursprünglichen Reihenfolge.

Sie können diese Neuordnung der Abfrageschrittausführung mit dem [Abfragehinweis „noReordering“](gremlin-query-hints-noReordering.md) verhindern:

```
g.withSideEffect('Neptune#fts.endpoint', 'your-es-endpoint-URL')
 .withSideEffect('Neptune#noReordering', true)
 .hasLabel('Person')
 .has('name', 'Neptune#fts marcello~');
```

In diesem zweiten Fall wird zuerst der Schritt `.hasLabel` und anschließend der Schritt `.has('name', 'Neptune#fts marcello~')` ausgeführt.

Ein weiteres Beispiel ist eine SPARQL-Abfrage für gleiche Art von Daten:

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT ?person WHERE {
  ?person rdf:type foaf:Person .
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:query 'mike' .
    neptune-fts:config neptune-fts:return ?person .
  }
}
```

Neptune führt hier erneut zuerst den `SERVICE`-Teil der Abfrage aus und führt dann die Ergebnisse mit den `Person`-Daten zusammen. Sie können dieses Verhalten mit dem [Abfragehinweis „joinOrder“](sparql-query-hints-joinOrder.md) unterdrücken:

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
SELECT ?person WHERE {
  hint:Query hint:joinOrder "Ordered" .
  ?person rdf:type foaf:Person .
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:query 'mike' .
    neptune-fts:config neptune-fts:return ?person .
  }
}
```

Auch in der zweiten Abfrage werden die Teile in der Reihenfolge ausgeführt, in der sie in der Abfrage erscheinen.

**Anmerkung**  
 Wenn Sie einen Opensearch-Alias über einen Index abfragen, anstatt direkt einen Opensearch-Index abzufragen, kann dies zu falschen Ergebnissen führen. Sie sollten den Opensearch-Index direkt abfragen und nicht den Alias. 

# Beispiele für SPARQL-Volltextsuchabfragen in Neptune
<a name="full-text-search-sparql-examples"></a>

Im Folgenden finden Sie einige Beispiele für SPARQL-Volltextsuchabfragen in Amazon Neptune.

## Beispiel für eine SPARQL-Übereinstimmungsabfrage
<a name="full-text-search-sparql-match"></a>

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' .
    neptune-fts:config neptune-fts:queryType 'match' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:query 'michael' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für eine SPARQL-Präfix-Abfrage
<a name="full-text-search-sparql-prefix"></a>

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' .
    neptune-fts:config neptune-fts:queryType 'prefix' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:query 'mich' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für eine SPARQL-Fuzzy-Abfrage
<a name="full-text-search-sparql-fuzzy"></a>

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' .
    neptune-fts:config neptune-fts:queryType 'fuzzy' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:query 'mikael' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für eine SPARQL-Begriffsabfrage
<a name="full-text-search-sparql-term"></a>

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' .
    neptune-fts:config neptune-fts:queryType 'term' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:query 'Dr. Kunal' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für eine SPARQL-query\$1string-Abfrage
<a name="full-text-search-sparql-query_string"></a>

Diese Abfrage gibt mehrere Felder an.

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query 'mikael~ OR rondelli' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:field foaf:surname .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für eine SPARQL-simple\$1query\$1string-Abfrage
<a name="full-text-search-sparql-simple"></a>

Die folgende Abfrage gibt Felder mit dem Platzhalterzeichen („\$1“) an.

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' .
    neptune-fts:config neptune-fts:queryType 'simple_query_string' .
    neptune-fts:config neptune-fts:query 'mikael~ | rondelli' .
    neptune-fts:config neptune-fts:field '*' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für eine SPARQL-Abfrage mit Sortierung nach Zeichenfolgenfeld
<a name="full-text-search-sparql-sort-by-field"></a>

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query 'mikael~ | rondelli' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:sortOrder 'asc' .
    neptune-fts:config neptune-fts:sortBy foaf:name .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für eine SPARQL-Abfrage mit Sortierung nach Nicht-Zeichenfolgenfeld
<a name="full-text-search-sparql-sort-by-field"></a>

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query 'mikael~ | rondelli' .
    neptune-fts:config neptune-fts:field foaf:name.value .
    neptune-fts:config neptune-fts:sortOrder 'asc' .
    neptune-fts:config neptune-fts:sortBy dc:date.value .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für eine SPARQL-Abfrage mit Sortierung nach ID
<a name="full-text-search-sparql-sort-by-id"></a>

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query 'mikael~ | rondelli' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:sortOrder 'asc' .
    neptune-fts:config neptune-fts:sortBy 'Neptune#fts.entity_id' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für eine SPARQL-Abfrage mit Sortierung nach Etikett
<a name="full-text-search-sparql-sort-by-label"></a>

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query 'mikael~ | rondelli' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:sortOrder 'asc' .
    neptune-fts:config neptune-fts:sortBy 'Neptune#fts.entity_type' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für eine SPARQL-Abfrage mit Sortierung nach doc\$1type
<a name="full-text-search-sparql-sort-by-doc-type"></a>

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query 'mikael~ | rondelli' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:sortOrder 'asc' .
    neptune-fts:config neptune-fts:sortBy 'Neptune#fts.document_type' .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

## Beispiel für die Verwendung der Lucene-Syntax in SPARQL
<a name="full-text-search-sparql-lucene-syntax"></a>

Die Lucene-Syntax wird nur für `query_string` Abfragen in OpenSearch unterstützt.

```
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query 'predicates.\\foaf\\name.value:micheal AND predicates.\\foaf\\surname.value:sh' .
    neptune-fts:config neptune-fts:field ‘’ .
    neptune-fts:config neptune-fts:return ?res .
  }
}
```

# Verwenden der Neptune-Volltextsuche in Gremlin-Abfragen
<a name="full-text-search-gremlin"></a>

`NeptuneSearchStep` aktiviert Volltextsuchabfragen für den Teil eines Gremlin-Traversals, der nicht in Neptune-Schritte konvertiert wird. Sehen Sie sich zum Beispiel folgende Abfrage an:

```
g.withSideEffect("Neptune#fts.endpoint", "your-es-endpoint-URL")
  .V()
      .tail(100)
      .has("name", "Neptune#fts mark*")            <== # Limit the search on name
```

Diese Abfrage wird in die folgende optimierte Traversale in Neptune konvertiert:

```
Neptune steps:
[
    NeptuneGraphQueryStep(Vertex) {
        JoinGroupNode {
            PatternNode[(?1, <~label>, ?2, <~>) . project distinct ?1 .], {estimatedCardinality=INFINITY}
        }, annotations={path=[Vertex(?1):GraphStep], maxVarId=4}
    },
    NeptuneTraverserConverterStep
]
+ not converted into Neptune steps: [NeptuneTailGlobalStep(100), NeptuneTinkerpopTraverserConverterStep, NeptuneSearchStep {
    JoinGroupNode {
        SearchNode[(idVar=?3, query=mark*, field=name) . project ask .], {endpoint=your-OpenSearch-endpoint-URL}
    }
    JoinGroupNode {
        SearchNode[(idVar=?3, query=mark*, field=name) . project ask .], {endpoint=your-OpenSearch-endpoint-URL}
    }
}]
```

Die folgenden Beispiele sind Gremlin-Abfragen anhand von Flugstreckendaten:

## Grundlegende Gremlin-`match`-Übereinstimmungsabfrage mit Groß- und Kleinschreibung
<a name="full-text-search-gremlin-basic-match"></a>

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .withSideEffect('Neptune#fts.queryType', 'match')
  .V().has("city","Neptune#fts dallas")

==>v[186]
==>v[8]
```

## Gremlin-`match`-Abfrage
<a name="full-text-search-gremlin-match"></a>

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .withSideEffect('Neptune#fts.queryType', 'match')
  .V().has("city","Neptune#fts southampton")
     .local(values('code','city').fold())
     .limit(5)

==>[SOU, Southampton]
```

## Gremlin-`fuzzy`-Abfrage
<a name="full-text-search-gremlin-fuzzy"></a>

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .V().has("city","Neptune#fts allas~").values('city').limit(5)

==>Dallas
==>Dallas
==>Walla Walla
==>Velas
==>Altai
```

## Gremlin-`query_string`-Fuzzy-Abfrage
<a name="full-text-search-gremlin-query_string-fuzzy"></a>

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .withSideEffect('Neptune#fts.queryType', 'query_string')
  .V().has("city","Neptune#fts allas~").values('city').limit(5)

==>Dallas
==>Dallas
```

## Gremlin-`query_string`-Abfrage mit regulären Ausdrücken
<a name="full-text-search-gremlin-query_string-regex"></a>

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .withSideEffect('Neptune#fts.queryType', 'query_string')
  .V().has("city","Neptune#fts /[dp]allas/").values('city').limit(5)

==>Dallas
==>Dallas
```

## Gremlin-Hybridabfrage
<a name="full-text-search-gremlin-hybrid"></a>

Diese Abfrage verwendet einen internen Neptun-Index und den OpenSearch Index in derselben Abfrage.

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .V().has("region","GB-ENG")
      .has('city','Neptune#fts L*')
      .values('city')
      .dedup()
      .limit(10)

==>London
==>Leeds
==>Liverpool
==>Land's End
```

## Einfaches Beispiel für eine Gremlin-Volltextsuche
<a name="full-text-search-gremlin-example"></a>

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .V().has('desc','Neptune#fts regional municipal')
      .local(values('code','desc').fold())
      .limit(100)

==>[HYA, Barnstable Municipal Boardman Polando Field]
==>[SPS, Sheppard Air Force Base-Wichita Falls Municipal Airport]
==>[ABR, Aberdeen Regional Airport]
==>[SLK, Adirondack Regional Airport]
==>[BFD, Bradford Regional Airport]
==>[EAR, Kearney Regional Airport]
==>[ROT, Rotorua Regional Airport]
==>[YHD, Dryden Regional Airport]
==>[TEX, Telluride Regional Airport]
==>[WOL, Illawarra Regional Airport]
==>[TUP, Tupelo Regional Airport]
==>[COU, Columbia Regional Airport]
==>[MHK, Manhattan Regional Airport]
==>[BJI, Bemidji Regional Airport]
==>[HAS, Hail Regional Airport]
==>[ALO, Waterloo Regional Airport]
==>[SHV, Shreveport Regional Airport]
==>[ABI, Abilene Regional Airport]
==>[GIZ, Jizan Regional Airport]
==>[USA, Concord Regional Airport]
==>[JMS, Jamestown Regional Airport]
==>[COS, City of Colorado Springs Municipal Airport]
==>[PKB, Mid Ohio Valley Regional Airport]
```

## Gremlin-Abfrage mit `query_string` mit den Operatoren „\$1“ und „-“
<a name="full-text-search-gremlin-query_string-plus-minus"></a>

Obwohl der `query_string`-Abfragetyp viel weniger strenger ist als der standardmäßige `simple_query_string`-Typ, ermöglicht er genauere Abfragen. Bei der ersten der folgenden Abfragen wird `query_string` verwendet. Bei der zweiten der standardmäßige `simple_query_string`:

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .withSideEffect('Neptune#fts.queryType', 'query_string')
 . V().has('desc','Neptune#fts +London -(Stansted|Gatwick)')
      .local(values('code','desc').fold())
      .limit(10)

==>[LHR, London Heathrow]
==>[YXU, London Airport]
==>[LTN, London Luton Airport]
==>[SEN, London Southend Airport]
==>[LCY, London City Airport]
```

Beachten Sie, wie `simple_query_string` in den folgenden Beispielen die Operatoren „\$1“ und „-“ unbemerkt ignoriert:

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .V().has('desc','Neptune#fts +London -(Stansted|Gatwick)')
      .local(values('code','desc').fold())
      .limit(10)

==>[LHR, London Heathrow]
==>[YXU, London Airport]
==>[LGW, London Gatwick]
==>[STN, London Stansted Airport]
==>[LTN, London Luton Airport]
==>[SEN, London Southend Airport]
==>[LCY, London City Airport]
==>[SKG, Thessaloniki Macedonia International Airport]
==>[ADB, Adnan Menderes International Airport]
==>[BTV, Burlington International Airport]
```

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .withSideEffect('Neptune#fts.queryType', 'query_string')
  .V().has('desc','Neptune#fts +(regional|municipal) -(international|bradford)')
      .local(values('code','desc').fold())
      .limit(10)

==>[CZH, Corozal Municipal Airport]
==>[MMU, Morristown Municipal Airport]
==>[YBR, Brandon Municipal Airport]
==>[RDD, Redding Municipal Airport]
==>[VIS, Visalia Municipal Airport]
==>[AIA, Alliance Municipal Airport]
==>[CDR, Chadron Municipal Airport]
==>[CVN, Clovis Municipal Airport]
==>[SDY, Sidney Richland Municipal Airport]
==>[SGU, St George Municipal Airport]
```

## Gremlin-`query_string`-Abfrage mit den Operatoren `AND` und `OR`
<a name="full-text-search-gremlin-query_string-AND-OR"></a>

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .withSideEffect('Neptune#fts.queryType', 'query_string')
  .V().has('desc','Neptune#fts (St AND George) OR (St AND Augustin)')
      .local(values('code','desc').fold())
      .limit(10)

==>[YIF, St Augustin Airport]
==>[STG, St George Airport]
==>[SGO, St George Airport]
==>[SGU, St George Municipal Airport]
```

## Gremlin-`term`-Abfrage
<a name="full-text-search-gremlin-term"></a>

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .withSideEffect('Neptune#fts.queryType', 'term')
  .V().has("SKU","Neptune#fts ABC123DEF9")
      .local(values('code','city').fold())
      .limit(5)

==>[AUS, Austin]
```

## Gremlin-`prefix`-Abfrage
<a name="full-text-search-gremlin-prefix"></a>

```
g.withSideEffect("Neptune#fts.endpoint",
                 "your-OpenSearch-endpoint-URL")
  .withSideEffect('Neptune#fts.queryType', 'prefix')
  .V().has("icao","Neptune#fts ka")
      .local(values('code','icao','city').fold())
      .limit(5)

==>[AZO, KAZO, Kalamazoo]
==>[APN, KAPN, Alpena]
==>[ACK, KACK, Nantucket]
==>[ALO, KALO, Waterloo]
==>[ABI, KABI, Abilene]
```

## Verwenden der Lucene-Syntax in Neptune Gremlin
<a name="full-text-search-gremlin-lucene"></a>

In Neptune Gremlin können Sie auch sehr leistungsstarke Abfragen mit der Lucene-Abfragesyntax schreiben. Beachten Sie, dass die Lucene-Syntax nur für `query_string` Abfragen in unterstützt wird. OpenSearch

Setzen Sie die folgenden Daten voraus:

```
g.addV("person")
        .property(T.id, "p1")
        .property("name", "simone")
        .property("surname", "rondelli")

g.addV("person")
        .property(T.id, "p2")
        .property("name", "simone")
        .property("surname", "sengupta")

g.addV("developer")
        .property(T.id, "p3")
        .property("name", "simone")
        .property("surname", "rondelli")
```

Mit der Lucene-Syntax, die aufgerufen wird, wenn der `queryType` auf `query_string` eingestellt ist, können Sie diese Daten wie folgt nach Vor- und Nachnamen durchsuchen:

```
g.withSideEffect("Neptune#fts.endpoint", "es_endpoint")
    .withSideEffect("Neptune#fts.queryType", "query_string")
    .V()
    .has("*", "Neptune#fts predicates.name.value:simone AND predicates.surname.value:rondelli")

==> v[p1], v[p3]
```

Beachten Sie, dass im obigen Schritt `has()` das Feld durch `"*"` ersetzt wird). Tatsächlich wird jeder dort platzierte Wert von den Feldern außer Kraft gesetzt, auf die Sie innerhalb der Abfrage zugreifen. Sie greifen mit `predicates.name.value,` auf das Namensfeld zu, da das Datenmodell so strukturiert ist.

Sie können wie folgt nach Name, Nachname und Bezeichnung suchen:

```
g.withSideEffect("Neptune#fts.endpoint", getEsEndpoint())
    .withSideEffect("Neptune#fts.queryType", "query_string")
    .V()
    .has("*", "Neptune#fts predicates.name.value:simone AND predicates.surname.value:rondelli AND entity_type:person")

==> v[p1]
```

Auf die Bezeichnung wird mit `entity_type` zugegriffen, da das Datenmodell so strukturiert ist.

Sie können auch Verschachtelungsbedingungen einschließen:

```
g.withSideEffect("Neptune#fts.endpoint", getEsEndpoint())
    .withSideEffect("Neptune#fts.queryType", "query_string")
    .V()
    .has("*", "Neptune#fts (predicates.name.value:simone AND predicates.surname.value:rondelli AND entity_type:person) OR predicates.surname.value:sengupta")

==> v[p1], v[p2]
```

## Einfügen eines modernen Graphen TinkerPop
<a name="full-text-search-gremlin-modern-tinkerpop-graph"></a>

```
g.addV('person').property(T.id, '1').property('name', 'marko').property('age', 29)
 .addV('personr').property(T.id, '2').property('name', 'vadas').property('age', 27)
 .addV('software').property(T.id, '3').property('name', 'lop').property('lang', 'java')
 .addV('person').property(T.id, '4').property('name', 'josh').property('age', 32)
 .addV('software').property(T.id, '5').property('name', 'ripple').property('lang', 'java')
 .addV('person').property(T.id, '6').property('name', 'peter').property('age', 35)

g.V('1').as('a').V('2').as('b').addE('knows').from('a').to('b').property('weight', 0.5f).property(T.id, '7')
 .V('1').as('a').V('3').as('b').addE('created').from('a').to('b').property('weight', 0.4f).property(T.id, '9')
 .V('4').as('a').V('3').as('b').addE('created').from('a').to('b').property('weight', 0.4f).property(T.id, '11')
 .V('4').as('a').V('5').as('b').addE('created').from('a').to('b').property('weight', 1.0f).property(T.id, '10')
 .V('6').as('a').V('3').as('b').addE('created').from('a').to('b').property('weight', 0.2f).property(T.id, '12')
 .V('1').as('a').V('4').as('b').addE('knows').from('a').to('b').property('weight', 1.0f).property(T.id, '8')
```

## Beispiel für eine Sortierung nach einem Zeichenfolgen-Feldwert
<a name="full-text-search-gremlin-sort-by-string"></a>

```
g.withSideEffect("Neptune#fts.endpoint", "your-OpenSearch-endpoint-URL")
 .withSideEffect('Neptune#fts.queryType', 'query_string')
 .withSideEffect('Neptune#fts.sortOrder', 'asc')
 .withSideEffect('Neptune#fts.sortBy', 'name')
 .V().has('name', 'Neptune#fts marko OR vadas OR ripple')
```

## Beispiel für eine Sortierung nach einem Nicht-Zeichenfolgen-Feldwert
<a name="full-text-search-gremlin-sort-by-non-string"></a>

```
g.withSideEffect("Neptune#fts.endpoint", "your-OpenSearch-endpoint-URL")
 .withSideEffect('Neptune#fts.queryType', 'query_string')
 .withSideEffect('Neptune#fts.sortOrder', 'asc')
 .withSideEffect('Neptune#fts.sortBy', 'age.value')
 .V().has('name', 'Neptune#fts marko OR vadas OR ripple')
```

## Beispiel für eine Sortierung nach einem ID-Feldwert
<a name="full-text-search-gremlin-sort-by-id"></a>

```
g.withSideEffect("Neptune#fts.endpoint", "your-OpenSearch-endpoint-URL")
.withSideEffect('Neptune#fts.queryType', 'query_string')
.withSideEffect('Neptune#fts.sortOrder', 'asc')
.withSideEffect('Neptune#fts.sortBy', 'Neptune#fts.entity_id')
.V().has('name', 'Neptune#fts marko OR vadas OR ripple')
```

## Beispiel für eine Sortierung nach einem Etikett-Feldwert
<a name="full-text-search-gremlin-sort-by-label"></a>

```
g.withSideEffect("Neptune#fts.endpoint", "your-OpenSearch-endpoint-URL")
 .withSideEffect('Neptune#fts.queryType', 'query_string')
 .withSideEffect('Neptune#fts.sortOrder', 'asc')
 .withSideEffect('Neptune#fts.sortBy', 'Neptune#fts.entity_type')
 .V().has('name', 'Neptune#fts marko OR vadas OR ripple')
```

## Beispiel für eine Sortierung nach einem `document_type`-Feldwert
<a name="full-text-search-gremlin-sort-by-document_type"></a>

```
g.withSideEffect("Neptune#fts.endpoint", "your-OpenSearch-endpoint-URL")
 .withSideEffect('Neptune#fts.queryType', 'query_string')
 .withSideEffect('Neptune#fts.sortOrder', 'asc')
 .withSideEffect('Neptune#fts.sortBy', 'Neptune#fts.document_type')
 .V().has('name', 'Neptune#fts marko OR vadas OR ripple')
```

# Fehlerbehebung bei der Neptune-Volltextsuche
<a name="streams-consumer-troubleshooting"></a>

**Anmerkung**  
Wenn Sie eine [differenzierte Zugriffskontrolle](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html) auf Ihrem OpenSearch Cluster aktiviert haben, müssen Sie die [IAM-Authentifizierung auch in Ihrer Neptune-Datenbank aktivieren](iam-auth-enable.md).

Informationen zur Diagnose von Problemen mit der Replikation von Neptune nach OpenSearch finden Sie in den CloudWatch Protokollen für Ihre Poller-Lambda-Funktion. Diese Protokolle enthalten Details zur Anzahl der aus dem Stream gelesenen Datensätze und zur Anzahl der Datensätze, in die erfolgreich repliziert wurden. OpenSearch

Sie können auch die LOGGING-Ebene für Ihre Lambda-Funktion ändern, indem Sie die Umgebungsvariable `LoggingLevel` ändern.

**Anmerkung**  
Wenn diese `LoggingLevel` Option auf gesetzt ist`DEBUG`, können Sie zusätzliche Details anzeigen, z. B. gelöschte Stream-Datensätze und den Grund, warum jeder gelöscht wurde, während Sie Daten StreamPoller von Neptune nach replizieren. OpenSearch Dies kann nützlich sein, wenn Sie feststellen, dass Ihnen Datensätze fehlen.

Die Neptune Streams-Verbraucheranwendung veröffentlicht zwei Metriken CloudWatch , die Ihnen auch bei der Diagnose von Problemen helfen können:
+ `StreamRecordsProcessed` – Die Anzahl der Datensätze, die von der Anwendung pro Zeiteinheit verarbeitet werden. Dies ist bei der Verfolgung der Anwendungsausführungsrate hilfreich.
+ `StreamLagTime` – Die Zeitdifferenz in Millisekunden zwischen der aktuellen Zeit und der Commit-Zeit eines Streamdatensatzes, der verarbeitet wird. Diese Metrik zeigt an, wie stark die Consumer-Anwendung verzögert wird.

Darüber hinaus werden alle Metriken im Zusammenhang mit dem Replikationsprozess in einem Dashboard CloudWatch unter demselben Namen angezeigt, den Sie bei der Instanziierung der Anwendung mithilfe der Vorlage `ApplicationName` angegeben haben. CloudWatch 

Sie können sich auch dafür entscheiden, einen CloudWatch Alarm zu erstellen, der ausgelöst wird, wenn die Abfrage mehr als zweimal hintereinander fehlschlägt. Dies erreichen Sie, indem Sie das `CreateCloudWatchAlarm`-Feld bei Anwendungsinstanziierung auf `true` festlegen. Geben Sie dann die E-Mail-Adressen an, die beim Auslösen des Alarms benachrichtigt werden sollen.

## Problembehandlung eines Prozesses, der beim Lesen von Datensätzen aus dem Stream fehlschlägt
<a name="streams-consumer-troubleshooting-reads"></a>

Wenn ein Prozess beim Lesen von Datensätzen aus dem Stream fehlschlägt, stellen Sie sicher, dass Folgendes vorhanden ist:
+ Der Stream ist auf dem Cluster aktiviert.
+ Der Neptune-Stream-Endpunkt hat das korrekteFormat:
  + Für Gremlin oder OpenCypher: `https://your cluster endpoint:your cluster port/propertygraph/stream` oder dessen Alias `https://your cluster endpoint:your cluster port/pg/stream`
  + Für SPARQL: `https://your cluster endpoint:your cluster port/sparql/stream`

  
+ Der DynamoDB-Endpunkt ist für Ihre VPC konfiguriert.
+ Der Überwachungsendpunkt ist für Ihre VPC-Subnetze konfiguriert.

## Problembehandlung bei einem Prozess, der beim Schreiben von Daten fehlschlägt OpenSearch
<a name="streams-consumer-troubleshooting-writes"></a>

Wenn ein Prozess beim Schreiben von Datensätzen fehlschlägt OpenSearch, stellen Sie sicher, dass Sie über Folgendes verfügen:
+ Ihre Elasticsearch-Version ist 7.1 oder höher oder Opensearch 2.3 und höher.
+ OpenSearch kann über die Poller Lambda-Funktion in Ihrer VPC aufgerufen werden.
+ Die beigefügte Sicherheitsrichtlinie OpenSearch erlaubt eingehende Anfragen. HTTP/HTTPS 

## Behebung von out-of-sync Problemen zwischen Neptune und einem bestehenden OpenSearch Replikations-Setup
<a name="streams-consumer-troubleshooting-sync-issues"></a>

Sie können die folgenden Schritte ausführen, um eine Neptune-Datenbank und OpenSearch -Domain wieder mit den neuesten Daten zu synchronisieren, falls out-of-sync Probleme zwischen ihnen aufgrund einer `ExpiredStreamException` oder Datenbeschädigung auftreten.

Beachten Sie, dass dieser Ansatz alle Daten in der OpenSearch Domain löscht und sie mit dem aktuellen Status der Neptune-Datenbank erneut synchronisiert, sodass keine Daten in die Neptune-Datenbank neu geladen werden müssen.

1. Deaktivieren Sie den Replikationsprozess, wie unter [Deaktivieren (Unterbrechen) des Stream-Poller-Prozesses](full-text-search-pause-poller.md) beschrieben.

1. Löschen Sie den Neptun-Index auf der OpenSearch Domain mit dem folgenden Befehl:

   ```
   curl -X DELETE "(your OpenSearch endpoint)/amazon_neptune"
   ```

1. Erstellen Sie einen Klon der Datenbank (siehe [Klonen von Datenbanken in Neptune](manage-console-cloning.md)).

1. Holen Sie sich die neueste `eventID` zu den Streams in der geklonten Datenbank, indem Sie einen Befehl dieser Art für den Streams-API-Endpunkt ausführen (weitere Informationen finden Sie unter [Aufrufen der Neptune-Streams-REST-API](streams-using-api-call.md)):

   ```
   curl "https://(your neptune endpoint):(port)/(propertygraph or sparql)/stream?iteratorType=LATEST"
   ```

   Notieren Sie sich die Werte in den Feldern `commitNum` und `opNum` im `lastEventId`-Objekt in der Antwort.

1. Verwenden Sie das [export-neptune-to-elasticsearch](https://github.com/awslabs/amazon-neptune-tools/tree/master/export-neptune-to-elasticsearch)Tool auf Github, um eine einmalige Synchronisation von der geklonten Datenbank zur Domain durchzuführen. OpenSearch

1. Gehen Sie zur DynamoDB-Tabelle für den Replikationsstack. Der Name der Tabelle ist der **Anwendungsname**, den Sie in der CloudFormation Vorlage angegeben haben (die Standardeinstellung ist`NeptuneStream`) mit einem `-LeaseTable` Suffix. Mit anderen Worten: Der Standardtabellenname ist `NeptuneStream-LeaseTable`.

   Sie können Tabellenzeilen durch Scannen untersuchen, da die Tabelle nur eine Zeile enthalten sollte. Nehmen Sie mit den Werten `commitNum` und `opNum`, die Sie oben aufgezeichnet haben, die folgenden Änderungen vor:
   + Ändern Sie den Wert für das `checkpoint`-Feld in der Tabelle auf den Wert, den Sie für `commitNum` notiert haben.
   + Ändern Sie den Wert für das `checkpointSubSequenceNumber`-Feld in der Tabelle auf den Wert, den Sie für `opNum` notiert haben.

1. Aktivieren Sie den Replikationsprozess erneut, wie unter [Erneutes Aktivieren des Stream-Poller-Prozesses](full-text-search-re-enable-poller.md) beschrieben.

1. Löschen Sie die geklonte Datenbank und den für das CloudFormation `export-neptune-to-elasticsearch` Tool erstellten Stack.