Technologieaustausch

Elasticsearch: Einführung in Retriever – Alles durchsuchen

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Autor: von ElasticJeff Vestal, Jack Conradson

In 8.14 führte Elastic in Elasticsearch eine neue Suchfunktion namens „Retriever“ ein. Lesen Sie weiter, um mehr über ihre Einfachheit und Effizienz zu erfahren und wie sie Ihre Suchvorgänge verbessern können.

Retriever sind eine neue Abstraktionsschicht, die der Such-API in Elasticsearch hinzugefügt wurde. Sie bieten die Möglichkeit, mehrstufige Abrufpipelines in einem einzigen _search-API-Aufruf zu konfigurieren. Diese Architektur vereinfacht die Suchlogik in Ihrer Anwendung, indem sie die Notwendigkeit mehrerer Elasticsearch-API-Aufrufe für komplexe Suchabfragen überflüssig macht. Es reduziert auch den Bedarf an clientseitiger Logik, die häufig die Kombination von Ergebnissen aus mehreren Abfragen erfordert.

Der ursprüngliche Typ des Retrievers

In der ersten Version sind drei Arten von Retrievern enthalten. Jeder Retriever ist für einen bestimmten Zweck konzipiert und kann in Kombination komplexe Suchvorgänge durchführen.

Zu den verfügbaren Typen gehören:

  • Standard – Gibt Dokumente der obersten Ebene in herkömmlichen Abfragen zurück. Diese Typen sind abwärtskompatibel, indem sie die vorhandene Abfrage-DSL-Anfragesyntax unterstützen, sodass Sie in Ihrem eigenen Tempo auf das Crawler-Framework migrieren können.
  • kNN - Gibt Top-Dokumente in der kNN-Suche zurück.
  • RRF - Verwenden Sie den reziproken Fusionsalgorithmus, um mehrere Retriever der ersten Stufe ohne oder mit minimalen Benutzeranpassungen in einem einzigen Ergebnissatz zu kombinieren und einzustufen. Ein RRF-Retriever ist ein zusammengesetzter Retriever, dessen Filterelemente an seine untergeordneten Retriever weitergegeben werden.

Wie unterscheiden sich Retriever? Warum sind sie nützlich?

Bei herkömmlichen Abfragen ist die Abfrage Teil eines allgemeinen Such-API-Aufrufs. Der Unterschied zwischen Retrievern besteht darin, dass sie als eigenständige Einheiten konzipiert sind, die einzeln verwendet oder problemlos kombiniert werden können. Dieser modulare Ansatz bietet eine größere Flexibilität bei der Gestaltung von Suchstrategien.

Retriever sind als Teil eines „Retriever-Baums“ konzipiert, einer hierarchischen Struktur, die Suchvorgänge definiert, indem sie deren Reihenfolge und Logik klärt. Diese Struktur macht komplexe Suchvorgänge einfacher zu handhaben, für Entwickler leichter verständlich und ermöglicht das einfache Hinzufügen neuer Funktionen in der Zukunft.

Retriever unterstützen die Zusammensetzbarkeit und ermöglichen Ihnen den Aufbau von Pipelines und die Integration verschiedener Abrufstrategien. Dies ermöglicht ein einfaches Testen verschiedener Abrufkombinationen. Sie bieten außerdem eine bessere Kontrolle darüber, wie Dokumente bewertet und gefiltert werden. Sie können beispielsweise einen Mindestschwellenwert für die Punktzahl festlegen, komplexe Filter anwenden, ohne die Punktzahl zu beeinflussen, und Parameter wie „terminate_after“ zur Leistungsoptimierung verwenden.

Behält die Abwärtskompatibilität mit älteren Abfrageelementen bei und konvertiert sie automatisch in geeignete Retriever.

Beispiel für die Verwendung beim Abrufen

Schauen wir uns einige Beispiele für die Verwendung von Retrievern an. Wir verwenden den IMDB-Beispieldatensatz.

Sie können das enthaltene ausführen Jupiter-Notizbuch, importieren Sie IMDB-Daten in Ihr serverloses Suchprojekt und führen Sie die folgenden Beispiele selbst aus!

Die übergeordneten Einstellungen sind:

  • Übersicht – eine kurze Zusammenfassung des Films
  • Namen – die Namen der Filme
  • Overview_Dense – Dense_Vector, generiert aus dem e5-small-Modell
  • Overview_sparse – Sparse-Vektoren unter Verwendung des ELSER-Modells von Elastic.
  • Wenn Sie nur Felder verwenden und _source:false festlegen, wird die Textversion von Namen und Übersicht zurückgegeben

Standard – Gesamten Text durchsuchen!

  1. GET /imdb_movies/_search?pretty
  2. {
  3. "retriever": {
  4. "standard": {
  5. "query": {
  6. "term": {
  7. "overview": "clueless"
  8. }
  9. }
  10. }
  11. },
  12. "size": 3,
  13. "fields": [
  14. "names",
  15. "overview"
  16. ],
  17. "_source": false
  18. }

kNN – Alle dichten Vektoren durchsuchen!

  1. GET /imdb_movies/_search?pretty
  2. {
  3. "retriever": {
  4. "knn": {
  5. "field": "overview_dense",
  6. "query_vector_builder": {
  7. "text_embedding": {
  8. "model_id": ".multilingual-e5-small_linux-x86_64",
  9. "model_text": "clueless slackers"
  10. }
  11. },
  12. "k": 5,
  13. "num_candidates": 5
  14. }
  15. },
  16. "size": 3,
  17. "fields": [
  18. "names",
  19. "overview"
  20. ],
  21. "_source": false
  22. }

text_expansion – Alle dünn besetzten Vektoren durchsuchen!

  1. GET /imdb_movies/_search?pretty
  2. {
  3. "retriever": {
  4. "standard": {
  5. "query": {
  6. "text_expansion": {
  7. "overview_sparse": {
  8. "model_id": ".elser_model_2_linux-x86_64",
  9. "model_text": "clueless slackers"
  10. }
  11. }
  12. }
  13. }
  14. },
  15. "size": 3,
  16. "fields": [
  17. "names",
  18. "overview"
  19. ],
  20. "_source": false
  21. }

rrf – vereint alles!

  1. GET /imdb_movies/_search?pretty
  2. {
  3. "retriever": {
  4. "rrf": {
  5. "retrievers": [
  6. {
  7. "standard": {
  8. "query": {
  9. "term": {
  10. "overview": "clueless slackers"
  11. }
  12. }
  13. }
  14. },
  15. {
  16. "knn": {
  17. "field": "overview_dense",
  18. "query_vector_builder": {
  19. "text_embedding": {
  20. "model_id": ".multilingual-e5-small_linux-x86_64",
  21. "model_text": "clueless slackers"
  22. }
  23. },
  24. "k": 5,
  25. "num_candidates": 5
  26. }
  27. },
  28. {
  29. "standard": {
  30. "query": {
  31. "text_expansion": {
  32. "overview_sparse": {
  33. "model_id": ".elser_model_2_linux-x86_64",
  34. "model_text": "clueless slackers"
  35. }
  36. }
  37. }
  38. }
  39. }
  40. ],
  41. "rank_window_size": 5,
  42. "rank_constant": 1
  43. }
  44. },
  45. "size": 3,
  46. "fields": [
  47. "names",
  48. "overview"
  49. ],
  50. "_source": false
  51. }

Das aktuelle Limit des Retrievers

Der Retriever weist bestimmte Einschränkungen auf, die Benutzer beachten sollten. Wenn Sie beispielsweise einen Compound-Retriever verwenden, können nur Elemente abgefragt werden. Dies erzwingt eine klarere Trennung der Anliegen und verhindert die Komplexität, die mit einer übermäßigen Verschachtelung oder unabhängigen Konfiguration einhergeht. Darüber hinaus dürfen untergeordnete Retriever keine Elemente verwenden, die einen zusammengesetzten Retriever darauf beschränken, Teil eines Retriever-Baums zu sein.

Diese Einschränkungen verbessern die Leistung und Zusammensetzbarkeit, selbst wenn komplexe Abrufstrategien verwendet werden.

Der Retriever wird zunächst als technische Vorschau veröffentlicht, daher kann sich seine API ändern

abschließend

Suchfunktionen stellen einen wichtigen Fortschritt in der Suchfunktionalität und Benutzerfreundlichkeit von Elasticsearch dar. Sie können in einer Pipeline-Methode verkettet werden, wobei jeder Retriever seine eigene Logik anwendet und die Ergebnisse an das nächste Element in der Kette weitergibt. Retriever können das Sucherlebnis erheblich verbessern, indem sie strukturiertere, flexiblere und effizientere Suchvorgänge ermöglichen.

Die folgenden Ressourcen bieten weitere Details zu Retrievern.

Probieren Sie den obigen Code selbst aus!Du kannst rennenbegleitendes Jupiter-Notizbuch, IMDB-Daten in das Elastic Serverless Search-Projekt importieren!

Bereit, es selbst auszuprobieren?StartKostenlose Testphase
Möchten Sie sich von Elastic zertifizieren lassen?Finden Sie es beim nächsten Mal herausAusbildung zum Elasticsearch-IngenieurWann anfangen?

Original:Elasticsearch-Retriever – So verwenden Sie Such-Retriever in Elasticsearch – Elastic Search Labs