Die Integration von Machine Learning in OpenSearch eröffnet völlig neue Möglichkeiten für die Datenanalyse und Suche. In diesem Kapitel lernen Sie, wie Sie die ML-Funktionen von OpenSearch praktisch einsetzen können - von einfachen Ähnlichkeitssuchen bis hin zu komplexer Anomalieerkennung.
OpenSearch bietet verschiedene ML-Funktionalitäten, die auf unterschiedlichen Technologien basieren:
Anders als traditionelle ML-Frameworks wie TensorFlow oder PyTorch ist OpenSearch’s Machine Learning speziell für Suchanwendungen und Zeitreihenanalyse optimiert. Die Modelle sind direkt in den Suchmechanismus integriert.
Die k-Nearest Neighbors Suche ist ideal für Empfehlungssysteme oder ähnlichkeitsbasierte Suchen. Stellen Sie sich vor, Sie möchten ähnliche Produkte in einem Online-Shop finden.
Zuerst erstellen wir einen Index mit k-NN Konfiguration:
PUT /products
{
"settings": {
"index": {
"knn": true,
"knn.algo_param.ef_search": 100
}
},
"mappings": {
"properties": {
"product_vector": {
"type": "knn_vector",
"dimension": 128,
"method": {
"name": "hnsw",
"space_type": "l2",
"engine": "nmslib",
"parameters": {
"ef_construction": 128,
"m": 24
}
}
},
"name": { "type": "text" },
"description": { "type": "text" },
"category": { "type": "keyword" }
}
}
}
Diese Konfiguration enthält wichtige Parameter:
Jetzt können wir Produkte mit ihren Merkmalsvektoren indexieren:
POST /products/_doc
{
"name": "Moderne Kamera XC-100",
"description": "Kompakte Digitalkamera für ambitionierte Fotografen",
"category": "Elektronik",
"product_vector": [0.2, 0.5, ..., 0.8] // 128-dimensionaler Vektor
}
Eine k-NN Suche führen wir so durch:
GET /products/_search
{
"size": 5,
"query": {
"knn": {
"product_vector": {
"vector": [0.3, 0.4, ..., 0.7],
"k": 5
}
}
}
}
Die Anomalieerkennung in OpenSearch ist besonders wertvoll für das Monitoring von Systemen. Sie basiert auf statistischen Modellen und maschinellem Lernen.
Zuerst definieren wir einen Detektor:
POST /_plugins/_anomaly_detection/detectors
{
"name": "system_metrics_detector",
"description": "Erkennt Anomalien in Systemmetriken",
"time_field": "timestamp",
"indices": ["metrics-*"],
"feature_attributes": [
{
"feature_name": "cpu_usage",
"feature_enabled": true,
"aggregation_query": {
"cpu_usage": {
"avg": {
"field": "system.cpu.total.norm.pct"
}
}
}
},
{
"feature_name": "memory_usage",
"feature_enabled": true,
"aggregation_query": {
"memory_usage": {
"avg": {
"field": "system.memory.actual.used.pct"
}
}
}
}
],
"detection_interval": {
"period": {
"interval": 10,
"unit": "Minutes"
}
},
"window_delay": {
"period": {
"interval": 1,
"unit": "Minutes"
}
}
}
Diese Konfiguration:
Anomalien können wir dann abfragen:
POST /_plugins/_anomaly_detection/detectors/<detector_id>/_search
{
"query": {
"range": {
"anomaly_grade": {
"gt": 0.7
}
}
}
}
Die Vektorsuche ermöglicht es uns, semantisch ähnliche Dokumente zu finden, auch wenn sie nicht die gleichen Wörter enthalten. Dies ist besonders nützlich für moderne Suchanwendungen.
Zuerst erstellen wir einen Index für Textdokumente mit Vektorrepräsentationen:
PUT /documents
{
"settings": {
"index": {
"knn": true
}
},
"mappings": {
"properties": {
"title": { "type": "text" },
"content": { "type": "text" },
"embedding": {
"type": "knn_vector",
"dimension": 384,
"method": {
"name": "hnsw",
"space_type": "cosine",
"engine": "faiss",
"parameters": {
"ef_construction": 256,
"m": 48
}
}
}
}
}
}
Beachten Sie die Verwendung von:
Ein Dokument mit Embedding indexieren:
POST /documents/_doc
{
"title": "Einführung in Machine Learning",
"content": "Machine Learning ist ein Teilgebiet der künstlichen Intelligenz...",
"embedding": [0.1, 0.2, ..., 0.9] // 384-dimensionaler Vektor
}
Eine semantische Suche durchführen:
GET /documents/_search
{
"query": {
"script_score": {
"query": { "match_all": {} },
"script": {
"source": "cosineSimilarity(params.query_vector, 'embedding') + 1.0",
"params": {
"query_vector": [0.2, 0.3, ..., 0.8]
}
}
}
}
}
Für komplexere Anwendungsfälle können wir ML-Funktionen in Ingest-Pipelines integrieren:
PUT _ingest/pipeline/ml_enrichment
{
"description": "Berechnet Vektoren und erkennt Anomalien",
"processors": [
{
"inference": {
"model_id": "sentence-embeddings",
"target_field": "content_vector",
"field_map": {
"content": "text_field"
}
}
},
{
"anomaly_detection": {
"model_id": "metric_anomalies",
"target_field": "anomaly_score",
"field_map": {
"value": "metric_value"
}
}
}
]
}
Bei der Implementierung von ML-Funktionen sollten Sie beachten: