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.
k-Nearest Neighbor (k-NN) -Suche in Amazon Service OpenSearch
k-NN für Amazon OpenSearch Service ist die Abkürzung für den zugehörigen k-Nearest Neighbors-Algorithmus und ermöglicht es Ihnen, nach Punkten in einem Vektorraum zu suchen und die „nächsten Nachbarn“ für diese Punkte anhand der euklidischen Entfernung oder der Kosinusähnlichkeit zu finden. Anwendungsfälle umfassen Empfehlungen (z. B. eine Funktion „andere Songs, die Ihnen vielleicht gefallen“ in einer Musikanwendung), Bilderkennung und Betrugserkennung.
Anmerkung
Diese Dokumentation beschreibt die Versionskompatibilität zwischen OpenSearch Service und verschiedenen Versionen des k-NN-Plug-ins sowie Einschränkungen bei der Verwendung des Plug-ins mit Managed Service. OpenSearch Eine umfassende Dokumentation des k-NN-Plug-ins, einschließlich einfacher und komplexer Beispiele, Parameterreferenzen und der vollständigen API-Referenz für das Plugin, finden Sie in der OpenSearch Open-Source-Dokumentation.
Verwenden Sie die folgenden Tabellen, um die Version des k-NN-Plug-ins zu finden, das auf Ihrer Amazon OpenSearch Service-Domain läuft. Jede k-NN-Plug-in-Version entspricht einer OpenSearch
OpenSearch Version | k-NN-Plug-In-Version | Nennenswerte Funktionen |
---|---|---|
2.13 | 2.13.0.0 | |
2.11 | 2.11.0.0 |
Unterstützung für |
2.9 | 2.9.0.0 | Implementierung von k-NN-Byte-Vektoren und effizientem Filtern mit der Faiss-Engine |
2.7 | 2.7.0.0 | |
2.5 | 2.5.0.0 | Erweitert SystemIndexPlugin für den k-NN-Modellsystemindex, Lucene-spezifische Dateierweiterungen zum Kern von HybridFS hinzugefügt |
2.3 | 2.3.0.0 | |
1.3 | 1.3.0.0 | |
1.2 | 1.2.0.0 | Unterstützung für Faiss |
1.1 | 1.1.0.0 | |
1,0 |
1.0.0.0 |
Umbenannte REST-APIs bei gleichzeitiger Unterstützung der Abwärtskompatibilität, umbenannter Namespace von opendistro in opensearch |
Elasticsearch-Version | k-NN-Plug-In-Version | Nennenswerte Funktionen |
---|---|---|
7.1 |
1.3.0.0 |
Euklidische Entfernung |
7.4 |
1.4.0.0 |
|
7.7 |
1.8.0.0 |
Kosinusähnlichkeit |
7.8 |
1.9.0.0 |
|
7.9 |
1.11.0.0 |
Aufwärm-API, benutzerdefinierte Bewertung |
7.10 |
1.13.0.0 |
Hamming-Distanz, L1-Norm-Distanz und Painless-Scripting |
Erste Schritte mit k-NN
Um k-NN zu verwenden, müssen Sie einen Index mit der index.knn
-Einstellung erstellen und mindestens ein Feld des knn_vector
-Datentyps hinzufügen.
PUT my-index { "settings": { "index.knn": true }, "mappings": { "properties": { "
my_vector1
": { "type": "knn_vector", "dimension": 2 }, "my_vector2
": { "type": "knn_vector", "dimension": 4 } } } }
Der knn_vector
-Datentyp unterstützt eine einzelne Liste von bis zu 10.000 Gleitkommazahlen, wobei die Anzahl der Gleitkommazahlen durch den erforderlichen dimension
-Parameter definiert wird. Nachdem Sie den Index erstellt haben, fügen Sie ihm einige Daten hinzu.
POST _bulk { "index": { "_index": "my-index", "_id": "1" } } { "my_vector1": [1.5, 2.5], "price": 12.2 } { "index": { "_index": "my-index", "_id": "2" } } { "my_vector1": [2.5, 3.5], "price": 7.1 } { "index": { "_index": "my-index", "_id": "3" } } { "my_vector1": [3.5, 4.5], "price": 12.9 } { "index": { "_index": "my-index", "_id": "4" } } { "my_vector1": [5.5, 6.5], "price": 1.2 } { "index": { "_index": "my-index", "_id": "5" } } { "my_vector1": [4.5, 5.5], "price": 3.7 } { "index": { "_index": "my-index", "_id": "6" } } { "my_vector2": [1.5, 5.5, 4.5, 6.4], "price": 10.3 } { "index": { "_index": "my-index", "_id": "7" } } { "my_vector2": [2.5, 3.5, 5.6, 6.7], "price": 5.5 } { "index": { "_index": "my-index", "_id": "8" } } { "my_vector2": [4.5, 5.5, 6.7, 3.7], "price": 4.4 } { "index": { "_index": "my-index", "_id": "9" } } { "my_vector2": [1.5, 5.5, 4.5, 6.4], "price": 8.9 }
Dann können Sie die Daten mit dem knn
-Abfragetyp durchsuchen.
GET my-index/_search { "size": 2, "query": { "knn": { "
my_vector2
": { "vector": [2, 3, 5, 6], "k": 2 } } } }
In diesem Fall ist k
die Anzahl der Nachbarn, die die Abfrage zurückgeben soll, aber Sie müssen auch die size
-Option einschließen. Andernfalls erhalten Sie k
-Ergebnisse für jeden Shard (und jedes Segment) anstatt k
-Ergebnisse für die gesamte Abfrage. k-NN unterstützt einen maximalen k
-Wert von 10 000.
Wenn Sie die knn
-Abfrage mit anderen Klauseln mischen, erhalten Sie möglicherweise weniger als k
-Ergebnisse. In diesem Beispiel reduziert die post_filter
-Klausel die Anzahl der Ergebnisse von 2 auf 1.
GET my-index/_search { "size": 2, "query": { "knn": { "
my_vector2
": { "vector": [2, 3, 5, 6], "k": 2 } } }, "post_filter": { "range": { "price
": { "gte": 6, "lte": 10 } } } }
Wenn Sie eine große Anzahl von Abfragen bearbeiten und gleichzeitig eine optimale Leistung beibehalten müssen, können Sie die _msearch
GET _msearch { "index": "my-index"} { "query": { "knn": {"my_vector2":{"vector": [2, 3, 5, 6],"k":2 }} } } { "index": "my-index", "search_type": "dfs_query_then_fetch"} { "query": { "knn": {"my_vector1":{"vector": [2, 3],"k":2 }} } }
Das folgende Video zeigt, wie Sie Bulk-Vektorsuchen für K-NN-Abfragen einrichten.
k-NN-Unterschiede, -Optimierung und -Einschränkungen
OpenSearch ermöglicht es Ihnen, alle k-NN-Einstellungen_cluster/settings
API zu ändern. Bei OpenSearch Service können Sie alle Einstellungen außer knn.memory.circuit_breaker.enabled
und ändernknn.circuit_breaker.triggered
. k-NN-Statistiken sind als CloudWatch Amazon-Metriken enthalten.
Vergleichen Sie insbesondere die KNNGraphMemoryUsage
Metrik auf jedem Datenknoten mit der knn.memory.circuit_breaker.limit
Statistik und dem verfügbaren RAM für den Instance-Typ. OpenSearch Der Dienst verwendet die Hälfte des RAM einer Instanz für den Java-Heap (bis zu einer Heap-Größe von 32 GiB). Standardmäßig verwendet KNN bis zu 50 % der verbleibenden Hälfte, sodass ein Instance-Typ mit 32 GiB RAM 8 GiB an Graphen (32 * 0,5 * 0,5) aufnehmen kann. Die Leistung kann beeinträchtigt werden, wenn die Nutzung des Graphen-Speichers diesen Wert überschreitet.
Sie können einen k-NN-Index nicht in einen Cold Storage migrieren, UltraWarmwenn der Index ungefähre k-NN"index.knn": true
Wenn index.knn
auf false
gesetzt wird (exakt k-NN