<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Jessica Garson - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Jessica Garson - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/de/search-labs/author/jessica-garson</link>
    </image>
    <link>https://www.elastic.co/de/search-labs/author/jessica-garson</link>
    <atom:link href="https://www.elastic.co/de/search-labs/rss/author/jessica-garson.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[de]]></language>
    <lastBuildDate>Fri, 11 Sep 2026 20:30:17 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Wie Sie Better Binary Quantization (BBQ) in Ihren Anwendungsfall implementieren können]]></title>
    <description><![CDATA[Erfahren Sie, warum Sie Better Binary Quantization (BBQ) in Ihrem Anwendungsfall einsetzen sollten und wie Sie dabei vorgehen.]]></description>
    <content:encoded><![CDATA[<p>Die Vektorsuche bildet die Grundlage für die Implementierung der semantischen Suche nach Text oder der Ähnlichkeitssuche nach Bildern, Videos oder Audio. Bei der Vektorsuche handelt es sich bei den Vektoren um mathematische Darstellungen von Daten, die sehr groß und manchmal langsam sein können. Die bessere binäre Quantisierung (im Folgenden als BBQ bezeichnet) funktioniert als Komprimierungsmethode für Vektoren. Es ermöglicht Ihnen, die richtigen Übereinstimmungen zu finden und gleichzeitig die Vektoren zu verkleinern, damit sie schneller durchsucht und verarbeitet werden können. Dieser Artikel behandelt BBQ und rescore_vector, ein Feld, das nur für quantisierte Indizes verfügbar ist und Vektoren automatisch neu bewertet.</p><p>Alle vollständigen Abfragen und Ausgaben, die in diesem Artikel erwähnt werden, finden Sie in unserem <a href="https://github.com/elastic/elasticsearch-labs/tree/main/supporting-blog-content/how-and-why-bbq">Elasticsearch Labs-Code-Repository</a>.</p><h2>Warum sollten Sie Better Binary Quantization (BBQ) in Ihrem Anwendungsfall einsetzen?</h2>Hinweis: Um ein tieferes Verständnis der Mathematik hinter BBQ zu erhalten, lesen Sie bitte den <a href="https://www.elastic.co/de/search-labs/blog/bbq-implementation-into-use-case#further-learning">Abschnitt „Weiterführende Informationen“</a> weiter unten. Für die Zwecke dieses Blogs liegt der Schwerpunkt auf der Implementierung.<p>Die mathematischen Hintergründe sind zwar faszinierend, aber unerlässlich, wenn Sie vollständig verstehen wollen, warum Ihre Vektorsuchen präzise bleiben. Letztendlich dreht sich alles um Komprimierung, da sich herausgestellt hat, dass man mit den aktuellen Vektorsuchalgorithmen durch die Lesegeschwindigkeit der Daten begrenzt ist. Wenn Sie also all diese Daten im Arbeitsspeicher unterbringen können, erzielen Sie im Vergleich zum Lesen vom Speicher eine erhebliche Geschwindigkeitssteigerung (<a href="https://sre.google/static/pdf/rule-of-thumb-latency-numbers-letter.pdf">der Arbeitsspeicher ist etwa 200-mal schneller als SSDs</a>).</p><p>Es gibt ein paar Dinge zu beachten:</p><ul><li><p>Graphenbasierte Indizes wie <a href="https://arxiv.org/pdf/1603.09320">HNSW</a> (Hierarchical Navigable Small World) sind für die Vektorabfrage am schnellsten.</p><ul><li><p>HNSW: Ein ungefährer Suchalgorithmus für den nächsten Nachbarn, der eine mehrschichtige Graphstruktur erstellt, um effiziente hochdimensionale Ähnlichkeitssuchen zu ermöglichen.</p></li></ul></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt760bd95c206bfa8f/6a17e2ad505ac393f7ad8a95/590f3b3c72a76023a38a0436cd9ff90a9f80e936-1964x1262.png" alt="HNSW: Ein ungefährer Suchalgorithmus für den nächsten Nachbarn, der eine mehrschichtige Graphstruktur erstellt, um effiziente hochdimensionale Ähnlichkeitssuchen zu ermöglichen." /><ul><li><p>Die Geschwindigkeit von HNSW wird grundsätzlich durch die Datenlesegeschwindigkeit aus dem Speicher oder im schlimmsten Fall aus dem Speicher begrenzt.</p><ul><li><p>Idealerweise möchten Sie alle Ihre gespeicherten Vektoren in den Speicher laden können.</p></li></ul></li><li><p>Einbettungsmodelle erzeugen im Allgemeinen Vektoren mit Float32-Präzision, 4 Bytes pro Gleitkommazahl.</p></li><li><p>Und schließlich kann es, je nachdem, wie viele Vektoren und/oder Dimensionen Sie haben, sehr schnell passieren, dass Ihnen nicht genügend Speicher zur Verfügung steht, um alle Ihre Vektoren zu speichern.</p></li></ul><p>Wenn man dies als gegeben voraussetzt, erkennt man, dass schnell ein Problem entsteht, wenn man Millionen oder sogar Milliarden von Vektoren mit jeweils potenziell Hunderten oder sogar Tausenden von Dimensionen verarbeitet. Der Abschnitt „ <a href="https://www.elastic.co/de/search-labs/blog/bbq-implementation-into-use-case#approximate-numbers-on-the-compression-ratios">Ungefähre Zahlen zu den Kompressionsverhältnissen</a>“ enthält einige grobe Zahlen.</p><h2>Was brauchen Sie für den Anfang?</h2><p>Für den Anfang benötigen Sie Folgendes:</p><ul><li><p>Wenn Sie Elastic Cloud oder vor Ort verwenden, benötigen Sie eine höhere Version von Elasticsearch als 8.18. Während BBQ in 8.16 eingeführt wurde, verwenden Sie in diesem Artikel <code>vector_rescore</code>, das in 8.18 eingeführt wurde.</p></li><li><p>Darüber hinaus müssen Sie sicherstellen, dass in Ihrem Cluster ein <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/8.18/ml-settings.html">Knoten für maschinelles Lernen (ML)</a> vorhanden ist. (Hinweis: Zum Laden des Modells ist ein ML-Knoten mit mindestens 4 GB erforderlich, für die vollständige Produktionsarbeitslast werden Sie jedoch wahrscheinlich viel größere Knoten benötigen.)</p></li><li><p>Wenn Sie Serverless verwenden, müssen Sie eine Instanz auswählen, die für Vektoren optimiert ist.</p></li><li><p>Darüber hinaus benötigen Sie Grundkenntnisse im Umgang mit Vektordatenbanken. Wenn Sie mit den Konzepten der Vektorsuche in Elastic noch nicht vertraut sind, sollten Sie sich zunächst die folgenden Ressourcen ansehen:</p><ul><li><p><a href="https://www.elastic.co/de/search-labs/blog/elastic-vector-database-practical-example">Navigieren in einer Elastic Vector-Datenbank</a></p></li><li><p><a href="https://www.elastic.co/de/blog/retrieval-augmented-generation-explained">Die großen Ideen hinter der Retrieval Augmented Generation</a></p></li></ul></li></ul><h2>Verbesserte Binärquantisierung (BBQ)-Implementierung</h2><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt18df00df95ff2ca7/6a17e2af414c6411989450df/4d388078495566f0527e931e0c2e38facdce83c6-1503x748.png" alt="Elasticsearch BBQ-Implementierung." /><p>Um diesen Blog einfach zu halten, verwenden Sie integrierte Funktionen, wenn diese verfügbar sind. In diesem Fall verfügen Sie über das Vektor-Einbettungsmodell <a href="https://www.elastic.co/de/guide/en/machine-learning/8.17/ml-nlp-e5.html"><code>.multilingual-e5-small</code></a> , das direkt in Elasticsearch auf einem Machine-Learning-Knoten ausgeführt wird. Beachten Sie, dass Sie das Modell <code>text_embedding</code> durch den Embedder Ihrer Wahl ersetzen können (<a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/8.18/infer-service-openai.html">OpenAI</a>, <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/8.18/infer-service-google-ai-studio.html">Google AI Studio</a>, <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/8.18/infer-service-cohere.html">Cohere</a> und viele mehr). Wenn Ihr bevorzugtes Modell noch nicht integriert ist, können Sie auch <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/8.18/bring-your-own-vectors.html">Ihre eigenen dichten Vektoreinbettungen mitbringen</a>.)</p><p>Zuerst müssen Sie einen Inferenzendpunkt erstellen, um Vektoren für einen bestimmten Textabschnitt zu generieren. Sie führen alle diese Befehle von der Kibana <a href="https://www.elastic.co/de/guide/en/kibana/8.18/console-kibana.html">Dev Tools-Konsole</a> aus. Dieser Befehl lädt <code>.multilingual-e5-small</code> herunter. Wenn es noch nicht vorhanden ist, wird Ihr Endpunkt eingerichtet. Dies kann eine Minute dauern. Sie können die erwartete Ausgabe in der Datei <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/how-and-why-bbq/Outputs/01-create-an-inference-endpoint-output.json">01-create-an-inference-endpoint-output.json</a> im Ordner „Outputs“ sehen. </p>PUT _inference/text_embedding/my_e5_model
{
  "service": "elasticsearch",
  "service_settings": {
    "num_threads": 1,
    "model_id": ".multilingual-e5-small",
    "adaptive_allocations": {
      "enabled": true,
      "min_number_of_allocations": 1
    }
  }
}<p>Sobald dies zurückgegeben wurde, ist Ihr Modell eingerichtet und Sie können mit dem folgenden Befehl testen, ob das Modell wie erwartet funktioniert. Sie können die erwartete Ausgabe in der Datei <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/how-and-why-bbq/Outputs/02-embed-text-output.json">02-embed-text-output.json</a> im Ordner „Outputs“ sehen.</p>POST _inference/text_embedding/my_e5_model
{
  "input": "my awesome piece of text"
}<p>Wenn bei Ihnen Probleme auftreten, weil Ihr trainiertes Modell keinem Knoten zugewiesen wird, müssen Sie Ihr Modell möglicherweise manuell starten.</p>POST _ml/trained_models/.multilingual-e5-small/deployment/_start<p>Erstellen wir nun eine neue Zuordnung mit 2 Eigenschaften, einem Standardtextfeld (<code>my_field</code>) und einem dichten Vektorfeld (<code>my_vector</code>) mit 384 Dimensionen, um der Ausgabe des Einbettungsmodells zu entsprechen. Sie werden auch <code>index_options.type to bbq_hnsw</code> überschreiben. Sie können die erwartete Ausgabe in der Datei <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/how-and-why-bbq/Outputs/03-create-byte-qauntized-index-output.json">03-create-byte-qauntized-index-output.json</a> im Ordner „Outputs“ sehen.</p>PUT bbq-my-byte-quantized-index
{
  "mappings": {
    "properties": {
      "my_field": {
        "type": "text"
      },
      "my_vector": {
        "type": "dense_vector",
        "dims": 384,
        "index_options": {
          "type": "bbq_hnsw"
        }
      }
    }
  }
}<p>Um sicherzustellen, dass Elasticsearch Ihre Vektoren generiert, können Sie eine <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/8.18/ingest.html">Ingest-Pipeline</a> verwenden. Diese Pipeline erfordert drei Dinge: den Endpunkt (<code>model_id</code>), die <code>input_field</code> , für die Sie Vektoren erstellen möchten, und die <code>output_field</code> , in der diese Vektoren gespeichert werden. Der erste Befehl unten erstellt eine Inferenz-Ingest-Pipeline, die den <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/current/inference-apis.html">Inferenzdienst </a>im Hintergrund verwendet, und der zweite testet, ob die Pipeline ordnungsgemäß funktioniert. Sie können die erwartete Ausgabe in der Datei <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/how-and-why-bbq/Outputs/04-create-and-simulate-ingest-pipeline-output.json">04-create-and-simulate-ingest-pipeline-output.json</a> im Ordner „Outputs“ sehen. </p>PUT _ingest/pipeline/my_inference_pipeline
{
  "processors": [
    {
      "inference": {
        "model_id": "my_e5_model",
        "input_output": [
          {
            "input_field": "my_field",
            "output_field": "my_vector"
          }
        ]
      }
    }
  ]
}

POST _ingest/pipeline/my_inference_pipeline/_simulate
{
  "docs": [
    {
      "_source": {
        "my_field": "my awesome text field"
      }
    }
  ]
}<p>Sie können nun mit den ersten beiden Befehlen unten einige Dokumente hinzufügen und mit dem dritten Befehl testen, ob Ihre Suchvorgänge funktionieren. Sie können die erwartete Ausgabe in der Datei <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/how-and-why-bbq/Outputs/05-bbq-index-output.json">05-bbq-index-output.json</a> im Ordner „Outputs“ überprüfen. </p>PUT bbq-my-byte-quantized-index/_doc/1?pipeline=my_inference_pipeline
{
    "my_field": "my awesome text field"
}

PUT bbq-my-byte-quantized-index/_doc/2?pipeline=my_inference_pipeline
{
    "my_field": "some other sentence"
}

GET bbq-my-byte-quantized-index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "knn": {
            "field": "my_vector",
            "query_vector_builder": {
              "text_embedding": {
                "model_id": "my_e5_model",
                "model_text": "my awesome search field"
              }
            },
            "k": 10,
            "num_candidates": 100
          }
        }
      ]
    }
  },
  "_source": [
    "my_field"
  ]
}<p>Wie in <a href="https://www.elastic.co/de/search-labs/blog/better-binary-quantization-lucene-elasticsearch#lucene-benchmarking">diesem Beitrag</a> empfohlen, sind Neubewertung und Überabtastung ratsam, wenn Sie auf nicht triviale Datenmengen skalieren, da sie dazu beitragen, eine hohe Rückrufgenauigkeit aufrechtzuerhalten und gleichzeitig von den Komprimierungsvorteilen zu profitieren. Ab Elasticsearch Version 8.18 können Sie dies auf diese Weise mit <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/8.18/knn-search.html#dense-vector-knn-search-rescoring">rescore_vector</a> tun. Die erwartete Ausgabe befindet sich in der Datei <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/how-and-why-bbq/Outputs/06-bbq-search-8-18-output.json">06-bbq-search-8-18-output.json</a> im Ordner „Outputs“.</p>GET bbq-my-byte-quantized-index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "knn": {
            "field": "my_vector",
            "query_vector_builder": {
              "text_embedding": {
                "model_id": "my_e5_model",
                "model_text": "my awesome search field"
              }
            },
            "rescore_vector": {
              "oversample": 3
            },
            "k": 10,
            "num_candidates": 100
          }
        }
      ]
    }
  },
  "_source": [
    "my_field"
  ]
}<p>Wie schneiden diese Werte im Vergleich zu denen ab, die Sie für Rohdaten erhalten würden? Wenn Sie alles oben Gesagte noch einmal machen, aber mit <code>index_options.type: hnsw</code>, werden Sie sehen, dass die Ergebnisse sehr vergleichbar sind. Sie können die erwartete Ausgabe in der Datei <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/how-and-why-bbq/Outputs/07-raw-vector-output.json">07-raw-vector-output.json</a> im Ordner „Outputs“ sehen.</p>PUT my-raw-vector-index
{
  "mappings": {
    "properties": {
      "my_field": {
        "type": "text"
      },
      "my_vector": {
        "type": "dense_vector",
        "dims": 384,
        "index_options": {
          "type": "hnsw"
        }
      }
    }
  }
}

PUT my-raw-vector-index/_doc/1?pipeline=my_inference_pipeline
{
    "my_field": "my awesome text field"
}

PUT my-raw-vector-index/_doc/2?pipeline=my_inference_pipeline
{
    "my_field": "some other sentence"
}

GET my-raw-vector-index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "knn": {
            "field": "my_vector",
            "query_vector_builder": {
              "text_embedding": {
                "model_id": "my_e5_model",
                "model_text": "my awesome search field"
              }
            },
            "k": 10,
            "num_candidates": 100
          }
        }
      ]
    }
  },
  "_source": [
    "my_field"
  ]
}<h2>Ungefähre Zahlen zu den Kompressionsverhältnissen</h2><p>Bei der Arbeit mit der Vektorsuche können Speicher- und Arbeitsspeicheranforderungen schnell zu einer erheblichen Herausforderung werden. Die folgende Aufschlüsselung veranschaulicht, wie verschiedene Quantisierungstechniken den Speicherbedarf von Vektordaten drastisch reduzieren.</p><p>Vektoren (V)</p><p>Abmessungen (D)</p><p>roh (V x D x 4)</p><p>int8 (V x (D x 1 + 4))</p><p>int4 (V x (D x 0,5 + 4))</p><p>Grill (V x (D x 0,125 + 4))</p><p>10.000.000</p><p>384</p><p>14,31 GB</p><p>3,61 GB</p><p>1,83 GB</p><p>0,58 GB</p><p>50.000.000</p><p>384</p><p>71,53 GB</p><p>18,07 GB</p><p>9,13 GB</p><p>2,89 GB</p><p>100.000.000</p><p>384</p><p>143,05 GB</p><p>36,14 GB</p><p>18,25 GB</p><p>5,77 GB</p><h2>Fazit</h2><p>BBQ ist eine Optimierung, die Sie zur Komprimierung Ihrer Vektordaten anwenden können, ohne die Genauigkeit zu beeinträchtigen. Dabei werden Vektoren in Bits umgewandelt, sodass Sie die Daten effektiv durchsuchen und Ihre KI-Workflows skalieren können, um die Suche zu beschleunigen und die Datenspeicherung zu optimieren.</p><h2>Weiterführendes Lernen</h2><p>Wenn Sie mehr über BBQ erfahren möchten, sehen Sie sich unbedingt die folgenden Ressourcen an:</p><ul><li><p><a href="https://www.elastic.co/de/search-labs/blog/better-binary-quantization-lucene-elasticsearch">Binäre Quantisierung (BBQ) in Lucene und Elasticsearch</a></p></li><li><p><a href="https://www.elastic.co/de/search-labs/blog/bit-vectors-elasticsearch-bbq-vs-pq">Bessere binäre Quantisierung (BBQ) vs. Produktquantisierung</a></p></li><li><p><a href="https://www.elastic.co/de/search-labs/blog/optimized-scalar-quantization-elasticsearch">Optimierte skalare Quantisierung: Noch bessere binäre Quantisierung</a></p></li><li><p><a href="https://www.youtube.com/watch?v=04NzMt2Nigc">Bessere binäre Quantisierung (BBQ): Von Bytes bis BBQ, das Geheimnis einer besseren Vektorsuche von Ben Trent</a></p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/bbq-implementation-into-use-case</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/bbq-implementation-into-use-case</guid>
    <category><![CDATA[Vektordatenbank]]></category>
    <category><![CDATA[Grundlagen]]></category>
    <dc:creator><![CDATA[Sachin Frayne,Jessica Garson]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3dd0495b536b2615/6a17e2b0414c6488459450e3/66842055367cdd795532b01c167f2a4b03dc65e3-1200x628.png" length="0" type="image/png"/>
    <pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>