Geometrie-OperatorenCompatible with Milvus 2.6.4+
Milvus unterstützt eine Reihe von Operatoren für die räumliche Filterung von GEOMETRY Feldern, die für die Verwaltung und Analyse von Geometriedaten unerlässlich sind. Mit diesen Operatoren können Sie Entitäten auf der Grundlage der geometrischen Beziehungen zwischen Objekten abrufen.
Alle Geometrieoperatoren funktionieren mit zwei geometrischen Argumenten: dem Namen des Feldes GEOMETRY, das in Ihrem Sammlungsschema definiert ist, und einem geometrischen Zielobjekt, das im Format Well-Known Text (WKT) dargestellt ist.
Syntax verwenden
Um nach einem GEOMETRY Feld zu filtern, verwenden Sie einen Geometrieoperator in einem Ausdruck:
Allgemein:
{operator}(geo_field, '{wkt}')Abstandsbezogen:
ST_DWITHIN(geo_field, '{wkt}', distance)
Wobei:
operatoreiner der unterstützten Geometrieoperatoren ist (z. B.ST_CONTAINS,ST_INTERSECTS). Operatornamen müssen in Groß- oder Kleinbuchstaben geschrieben werden. Eine Liste der unterstützten Operatoren finden Sie unter Unterstützte Geometrieoperatoren.geo_fieldist der Name IhresGEOMETRYFeldes.'{wkt}'ist die WKT-Darstellung der abzufragenden Geometrie.distanceist der Schwellenwert speziell fürST_DWITHIN.
Weitere Informationen über GEOMETRY Felder in Milvus finden Sie unter Geometriefeld.
Unterstützte Geometrieoperatoren
In der folgenden Tabelle sind die in Milvus verfügbaren Geometrieoperatoren aufgeführt.
Die Namen der Operatoren müssen in Groß- oder Kleinbuchstaben geschrieben werden. Mischen Sie keine Groß- und Kleinschreibung innerhalb desselben Operatornamens.
Operator |
Beschreibung |
Beispiel |
|---|---|---|
|
Gibt TRUE zurück, wenn zwei Geometrien räumlich identisch sind, d. h. die gleiche Punktmenge und Dimension aufweisen. |
Sind zwei Geometrien (A und B) im Raum genau gleich? |
|
Gibt TRUE zurück, wenn die Geometrie A die Geometrie B vollständig enthält, wobei ihre Innenräume mindestens einen Punkt gemeinsam haben. |
Umfasst eine Stadtgrenze (A) einen bestimmten Park (B)? |
|
Gibt TRUE zurück, wenn sich die Geometrien A und B teilweise überschneiden, aber nicht vollständig enthalten. |
Kreuzen sich zwei Straßen (A und B) an einer Kreuzung? |
|
Gibt TRUE zurück, wenn die Geometrien A und B mindestens einen gemeinsamen Punkt haben. Dies ist die allgemeinste und am häufigsten verwendete räumliche Abfrage. |
Überschneidet sich ein Suchgebiet (A) mit einem der Geschäftsstandorte (B)? |
|
Gibt TRUE zurück, wenn die Geometrien A und B dieselbe Dimension haben, sich teilweise überschneiden und keine der beiden Geometrien die andere vollständig enthält. |
Überschneiden sich zwei Grundstücke (A und B)? |
|
Gibt TRUE zurück, wenn die Geometrien A und B eine gemeinsame Grenze haben, aber ihre Innenräume sich nicht überschneiden. |
Haben zwei benachbarte Grundstücke (A und B) eine gemeinsame Grenze? |
|
Gibt TRUE zurück, wenn die Geometrie A vollständig in der Geometrie B enthalten ist und ihre Innenräume mindestens einen gemeinsamen Punkt haben. Dies ist die Umkehrung von |
Liegt ein bestimmter Punkt von Interesse (A) innerhalb eines bestimmten Suchradius (B)? |
|
Gibt TRUE zurück, wenn der Abstand zwischen Geometrie A und Geometrie B kleiner oder gleich dem angegebenen Abstand ist. Hinweis: Geometrie B unterstützt derzeit nur Punkte. Die Abstandseinheit ist Meter. |
Findet alle Punkte innerhalb von 5000 Metern von einem bestimmten Punkt (B). |
ST_EQUALS / st_equals
Der Operator ST_EQUALS gibt TRUE zurück, wenn zwei Geometrien räumlich identisch sind, d. h. sie haben denselben Satz von Punkten und dieselbe Dimension. Dies ist nützlich, um zu überprüfen, ob zwei gespeicherte Geometrieobjekte genau denselben Ort und dieselbe Form repräsentieren.
Beispiel
Nehmen wir an, Sie möchten überprüfen, ob eine gespeicherte Geometrie (z. B. ein Punkt oder ein Polygon) genau dieselbe ist wie eine Zielgeometrie. Sie können zum Beispiel einen gespeicherten Punkt mit einem bestimmten Punkt von Interesse vergleichen.
# The filter expression to check if a geometry matches a specific point
filter = "ST_EQUALS(geo_field, 'POINT(10 20)')"
ST_CONTAINS / st_contains
Der Operator ST_CONTAINS gibt TRUE zurück, wenn die erste Geometrie die zweite Geometrie vollständig enthält. Dies ist nützlich, um Punkte innerhalb eines Polygons oder kleinere Polygone innerhalb eines größeren Polygons zu finden.
Beispiel
Stellen Sie sich vor, Sie haben eine Sammlung von Stadtbezirken und möchten einen bestimmten Punkt von Interesse finden, z. B. ein Restaurant, das innerhalb der Grenzen eines bestimmten Bezirks liegt.
# The filter expression to find geometries completely within a specific polygon.
filter = "ST_CONTAINS(geo_field, 'POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')"
ST_CROSSES / st_crosses
Der Operator ST_CROSSES gibt TRUE zurück, wenn der Schnittpunkt zweier Geometrien eine Geometrie mit einer geringeren Dimension als die ursprünglichen Geometrien bildet. Dies gilt typischerweise für eine Linie, die ein Polygon oder eine andere Linie schneidet.
Beispiel
Sie möchten alle Wanderwege (Linienstrings) finden, die eine bestimmte Grenzlinie (einen anderen Linienstring) kreuzen oder in ein Schutzgebiet (Polygon) eintreten.
# The filter expression to find geometries that cross a line string.
filter = "ST_CROSSES(geo_field, 'LINESTRING(5 0, 5 10)')"
ST_INTERSECTS / st_intersects
Der Operator ST_INTERSECTS gibt TRUE zurück, wenn zwei Geometrien irgendeinen Punkt ihrer Grenzen oder Innenräume gemeinsam haben. Dies ist ein allgemeiner Operator zur Erkennung jeder Form von räumlicher Überschneidung.
Beispiel
Wenn Sie eine Sammlung von Straßen haben und alle Straßen finden möchten, die eine bestimmte Linie kreuzen oder berühren, die eine vorgeschlagene neue Straße darstellt, können Sie ST_INTERSECTS verwenden.
# The filter expression to find geometries that intersect with a specific line string.
filter = "ST_INTERSECTS(geo_field, 'LINESTRING (1 1, 2 2)')"
ST_OVERLAPS / st_overlaps
Der Operator ST_OVERLAPS gibt TRUE zurück, wenn zwei Geometrien der gleichen Dimension eine Teilüberschneidung haben, wobei die Überschneidung selbst die gleiche Dimension wie die ursprünglichen Geometrien hat, aber nicht gleich einer von ihnen ist.
Beispiel
Sie haben eine Reihe von sich überschneidenden Verkaufsgebieten und möchten alle Gebiete finden, die sich teilweise mit einem neuen vorgeschlagenen Verkaufsgebiet überschneiden.
# The filter expression to find geometries that partially overlap with a polygon.
filter = "ST_OVERLAPS(geo_field, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')"
ST_TOUCHES / st_touches
Der Operator ST_TOUCHES gibt TRUE zurück, wenn sich die Grenzen zweier Geometrien berühren, ihre Innenräume sich aber nicht überschneiden. Dies ist nützlich, um Nachbarschaften zu erkennen.
Beispiel
Wenn Sie eine Karte mit Grundstücken haben und alle Grundstücke finden möchten, die direkt an einen öffentlichen Park grenzen, ohne dass es Überschneidungen gibt.
# The filter expression to find geometries that only touch a line string at their boundaries.
filter = "ST_TOUCHES(geo_field, 'LINESTRING(0 0, 1 1)')"
ST_WITHIN / st_within
Der Operator ST_WITHIN gibt TRUE zurück, wenn die erste Geometrie vollständig im Inneren oder an der Grenze der zweiten Geometrie liegt. Er ist die Umkehrung von ST_CONTAINS.
Beispiel
Sie möchten alle kleinen Wohngebiete finden, die sich vollständig innerhalb eines größeren ausgewiesenen Parkgebiets befinden.
# The filter expression to find geometries that are completely within a larger polygon.
filter = "ST_WITHIN(geo_field, 'POLYGON((110 38, 115 38, 115 42, 110 42, 110 38))')"
Weitere Informationen über die Verwendung eines GEOMETRY Feldes finden Sie unter Geometriefeld.
ST_DWITHIN / st_dwithin
Der Operator ST_DWITHIN gibt TRUE zurück, wenn der Abstand zwischen Geometrie A und Geometrie B kleiner oder gleich einem bestimmten Wert (in Metern) ist. Derzeit muss Geometrie B ein Punkt sein.
Beispiel
Angenommen, Sie haben eine Sammlung von Filialen und möchten alle Filialen im Umkreis von 5.000 Metern um den Standort eines bestimmten Kunden finden.
# Find all stores within 5000 meters of the point (120 30)
filter = "ST_DWITHIN(geo_field, 'POINT(120 30)', 5000)"