TATECHATLAS
◎ Deutsch
Künstliche Intelligenz / Anleitung

Strategie für gefilterte Vektorsuche: Anwenden von Filtern auf Vektorabfragen in Azure AI Search

Die gefilterte Vektorsuche in Azure AI Search kombiniert Vektorähnlichkeit mit Metadatenfilterung. Vorfiltern verkleinert die Kandidatenmenge vor dem Scoring, was die Latenz senken kann, aber das Risiko von Recall-Verlusten birgt. Nachfiltern erhält den Recall, liefert aber möglicherweise weniger Ergebnisse. Das Testen beider Modi ist entscheidend, um den richtigen Kompromiss für Ihre Daten zu finden.

Auf dieser Seite

Die gefilterte Vektorsuche in Azure AI Search ermöglicht es, einer Vektorabfrage einen Filterausdruck hinzuzufügen. Der Filter zielt auf Nicht-Vektor-Metadatenfelder ab, nicht auf das Vektorfeld selbst. Die Engine kann den Filter vor oder nach der Vektorähnlichkeitsbewertung anwenden. Vorfiltern grenzt die Kandidatenmenge vor der Nearest-Neighbor-Suche ein, wodurch relevante Dokumente, die die Metadatenbedingung nicht erfüllen, stillschweigend verworfen werden können, aber die Latenz bei selektiven Filtern sinken kann. Nachfiltern berechnet die Ähnlichkeit über den gesamten Index und entfernt dann nicht passende Ergebnisse, was möglicherweise weniger als k Dokumente zurückgibt. Die Wahl ist eine strategische Entscheidung: Nachfiltern wird oft empfohlen, wenn der semantische Ranker verwendet wird, da dieser einen größeren Kandidatenpool benötigt, aber die Dokumentation rät, beide Modi für Ihre Daten zu testen. Zur Implementierung müssen Sie filterbare Text- oder numerische Felder neben Ihren Vektorfeldern entwerfen und den Parameter vectorFilterMode in der Abfrageanforderung setzen.

Was gefilterte Vektorsuche in Azure AI Search bedeutet

Gefilterte Vektorsuche in Azure AI Search bedeutet, einer Abfrage, die auch eine Vektorabfrage enthält, einen Filterausdruck hinzuzufügen. Der Filter operiert auf Text- oder numerischen Feldern im Indexschema, niemals auf dem Vektorfeld selbst. Dadurch können Sie Dokumente anhand von Metadatenkriterien ein- oder ausschließen, während gleichzeitig eine Nearest-Neighbor-Ähnlichkeitssuche über Einbettungen durchgeführt wird. Die Engine kann den Filter entweder vor oder nach der Ausführung der Vektorabfrage verarbeiten, was ändert, welche Dokumente in die Ähnlichkeitsbewertungs-Pipeline gelangen.

Vorfiltern reduziert die Kandidatenmenge vor dem kNN-Scoring, was die Latenz senken kann, wenn der Filter hochselektiv ist. Da es jedoch konzeptionell relevante Dokumente stillschweigend verwerfen kann, empfiehlt die Dokumentation, beide Modi - Vorfiltern und Nachfiltern - mit repräsentativen Abfragen zu benchmarken, um den Kompromiss für Ihre spezifische Datenverteilung zu bestätigen.

Vorfiltern versus Nachfiltern: Die zentrale Entscheidung

Die Suchmaschine kann den Filter vor oder nach der Ausführung der Vektorabfrage anwenden. Dies ist eine strategische Entscheidung, keine syntaktische Wahl, und sie beeinflusst direkt die Größe des Kandidatenpools. Beim Vorfiltern läuft der Filter zuerst und reduziert die Menge der Dokumente, die die Vektorsuche bewerten wird. Beim Nachfiltern läuft die Vektorsuche über den gesamten Index, und der Filter entfernt anschließend nicht passende Ergebnisse. Die Wahl beeinflusst Recall, Präzision und die Anzahl der zurückgegebenen Ergebnisse. Die Dokumentation schreibt keinen universell besten Modus vor; sie rät, beide zu testen, um herauszufinden, welcher für Ihr Szenario funktioniert.

Entwerfen filterbarer Metadatenfelder

Da Vektorfelder nicht filterbar sind, muss jedes Attribut, das Sie zur Abfragezeit einschränken möchten, in einem separaten Nicht-Vektorfeld gespeichert werden, das im Indexschema als filterbar markiert ist. Wenn Sie beispielsweise nach Kategorie, Standort oder Datum filtern möchten, müssen Sie Text- oder numerische Felder für diese Eigenschaften anlegen und deren filterbar-Attribut auf true setzen. Der Filterausdruck in der Abfrage verweist auf diese Felder, nicht auf das Vektorfeld. Ohne sie ist eine gefilterte Vektorsuche unmöglich. Dieser Schritt des Schemaentwurfs ist eine Voraussetzung, die erfüllt sein muss, bevor eine Abfrage einen Filter zusammen mit einer Vektorsuche verwenden kann.

Der Parameter vectorFilterMode und eine konkrete Abfrage

Die Dokumentation zur Hybridsuche enthält eine konkrete Abfrage, die die gefilterte Vektorsuche in der Praxis demonstriert. Die Anforderung enthält einen Filterausdruck mit geo.distance, um Hotels innerhalb von 300 Kilometern um einen Punkt zu finden, und setzt vectorFilterMode auf postFilter. Die Abfrage enthält außerdem eine Volltextsuche, zwei Vektorabfragen, die auf unterschiedliche Vektorfelder abzielen, Facetten und semantisches Ranking. Der Filter lautet geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300, und vectorFilterMode ist postFilter. Das bedeutet, dass die Engine zunächst die 50 nächsten Nachbarn anhand der Einbettungsähnlichkeit über alle Hotels findet und dann diejenigen entfernt, die außerhalb des Radius liegen. Die Ergebnismenge kann weniger als 50 Dokumente enthalten. Die Vektorabfragen geben k=50 und Oversampling an, um den Recall zu verbessern. Das Beispiel zeigt, wie Filter, Vektorabfragen und andere Funktionen in einer einzigen Anforderung koexistieren.

POST https://{{searchServiceName}}.search.windows.net/indexes/hotels-vector-quickstart/docs/search?api-version=2026-04-01
content-type: application/JSON

{
  "count": true,
  "search": "historic hotel walk to restaurants and shopping",
  "select": "HotelId, HotelName, Category, Description, Address/City, Address/StateProvince",
  "filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300",
  "vectorFilterMode": "postFilter",
  "facets": ["Address/StateProvince"],
  "vectorQueries": [
    {
      "kind": "vector",
      "vector": [<array of embeddings>],
      "k": 50,
      "fields": "DescriptionVector",
      "exhaustive": true,
      "oversampling": 20
    },
    {
      "kind": "vector",
      "vector": [<array of embeddings>],
      "k": 50,
      "fields": "Description_frVector",
      "exhaustive": false,
      "oversampling": 10
    }
  ],
  "skip": 0,
  "top": 10,
  "queryType": "semantic",
  "queryLanguage": "en-us",
  "semanticConfiguration": "my-semantic-config"
}

Interaktion mit dem semantischen Ranker

Bei Verwendung des semantischen Rankers schlägt die Dokumentation Nachfiltern als Ausgangspunkt vor. Der Grund ist, dass der semantische Ranker einen größeren Kandidatenpool benötigt, um zu lesen und neu zu ordnen. Vorfiltern könnte den Pool zu stark verkleinern und die Effektivität des Rankers einschränken. Dies ist jedoch keine strenge Regel; die Quelle empfiehlt ausdrücklich, zu testen, welches Verhalten für Ihre Abfragen am besten ist. Der semantische Ranker operiert auf den zusammengeführten Ergebnissen aus Volltext- und Vektorsuche, und der Filter kann vor oder nach dieser Zusammenführung angewendet werden, was die Eingabe für den Ranker beeinflusst. Wenn Sie k für Vektorabfragen bei Verwendung des semantischen Rankers auf 50 setzen, maximieren Sie die für das Reranking verfügbaren Eingaben.

Kompromisse: Recall-Verlust beim Vorfiltern

Vorfiltern grenzt die Kandidatenmenge ein, bevor die Vektorähnlichkeit berechnet wird. Dies kann konzeptionell relevante Dokumente stillschweigend verwerfen, die die Metadatenbedingung nicht erfüllen, selbst wenn sie dem Abfragevektor sehr ähnlich sind. Beispielsweise würde ein Hotel, das semantisch perfekt passt, aber knapp außerhalb des geografischen Radius liegt, vor dem Scoring ausgeschlossen. Nachfiltern berechnet die Ähnlichkeit über den gesamten Index und entfernt dann nicht passende Ergebnisse, was weniger als k Elemente zurückgeben kann, aber sicherstellt, dass das Ähnlichkeitsranking alle Dokumente berücksichtigt hat. Die Konsequenz ist, dass die Wahl zwischen Vorfiltern und Nachfiltern Recall gegen Ergebnisanzahl und Latenz abwägt. Vorfiltern erhält k und kann die Latenz bei selektiven Filtern senken, riskiert jedoch, relevante Dokumente zu übersehen; Nachfiltern erhält den Recall, liefert aber möglicherweise weniger Ergebnisse und erfordert mehr Rechenaufwand.

Kombinieren von Filtern mit Facetten und Bewertungsprofilen

Filter und Facetten zielen auf Datenstrukturen innerhalb des Index ab, die sich von den invertierten Indizes für die Volltextsuche und den Vektorindizes für die Vektorsuche unterscheiden. Wenn Filter- und Facettenoperationen ausgeführt werden, kann die Suchmaschine das operative Ergebnis auf die hybriden Suchergebnisse in der Antwort anwenden. Das bedeutet, dass ein Filter mit facettierter Navigation und Bewertungsprofilen koexistieren kann, ohne das Vektorranking zu beeinträchtigen. Facetten werden über die endgültige Ergebnismenge nach Filterung und Zusammenführung berechnet. Bewertungsprofile können auf Textfelder angewendet werden, aber explizite Sortierreihenfolgen überschreiben relevanzbasierte Ergebnisse; vermeiden Sie daher orderby, wenn Sie möchten, dass Ähnlichkeit und BM25-Relevanz das Ranking steuern.

Anwendbarkeitsgrenzen und wann der Ansatz überdacht werden sollte

Die primären Einschränkungen bestehen darin, dass Vektorfelder selbst nicht filterbar sind, sodass jedes Filterkriterium in einem separaten Feld existieren muss. Nachfiltern kann weniger Ergebnisse als das angeforderte k liefern, was eine Behandlung in Ihrer Anwendung erfordern kann. Vorfiltern kann den Recall verringern, aber die Latenz bei hochselektiven Filtern verbessern. Die Dokumentation empfiehlt, zu testen, welcher Modus am besten ist, anstatt eine einzige richtige Antwort anzunehmen. Wenn Ihre Filterkriterien hochselektiv sind und Sie exakt k Ergebnisse benötigen, müssen Sie möglicherweise das Oversampling anpassen oder das Filterdesign überdenken. Tests sollten die Messung von Recall, Präzision und Latenz unter realistischen Arbeitslasten umfassen. Wenn keine Kombination aus Filtermodus und Oversampling akzeptable Ergebnisse liefert, erwägen Sie, den Filter weniger restriktiv zu gestalten oder einige Einschränkungen durch metadatenbewusste Einbettungsstrategien in die Vektoreinbettung selbst zu verlagern.

Was Sie prüfen sollten

  • Stellen Sie sicher, dass jedes Filterkriterium in der Abfrage einem Nicht-Vektorfeld entspricht, das im Indexschema als filterbar markiert ist.
  • Bestätigen Sie, dass der Parameter vectorFilterMode in der Hybridabfrageanforderung entweder auf preFilter oder postFilter gesetzt ist.
  • Benchmarken Sie sowohl den Vorfilter- als auch den Nachfiltermodus mit repräsentativen Abfragen, um das optimale Gleichgewicht von Recall, Latenz und Ergebnisanzahl für Ihren spezifischen Datensatz zu ermitteln.
  • Prüfen Sie, dass nachgefilterte Ergebnisse weniger Dokumente als das angeforderte k enthalten können; behandeln Sie dies in Ihrer Anwendungslogik.
  • Stellen Sie sicher, dass Facetten und Bewertungsprofile auf die hybride Ergebnismenge angewendet werden und das Vektorranking nicht beeinträchtigen.

Vektorfelder selbst können nicht in Filterausdrücken verwendet werden; jedes Filterkriterium erfordert ein eigenes Nicht-Vektorfeld. Nachfiltern kann weniger Dokumente als das angeforderte k zurückgeben, da die Ähnlichkeit über den gesamten Index berechnet und dann Ergebnisse entfernt werden. Vorfiltern kann den Recall stillschweigend verringern, indem der Kandidatenpool vor der Nearest-Neighbor-Suche verkleinert wird, kann jedoch die Latenz bei selektiven Filtern senken. Die Dokumentation empfiehlt, beide Modi zu testen, anstatt einen als universell richtig vorzuschreiben; die beste Wahl hängt von Ihrer Datenverteilung und Ihren Abfragemustern ab.

Quellen

  1. Microsoft Learn: vector search ↗
  2. Microsoft Learn: hybrid search ↗
  3. scikit-learn: precision_score ↗
Nach oben ↑