syntax = "proto3"; package qdrant; option csharp_namespace = "Qdrant.Client.Grpc"; option java_outer_classname = "Common"; import "google/protobuf/timestamp.proto"; message PointId { oneof point_id_options { // Numerical ID of the point uint64 num = 1; // UUID string uuid = 2; } } message GeoPoint { double lon = 1; double lat = 2; } message Filter { // At least one of those conditions should match repeated Condition should = 1; // All conditions must match repeated Condition must = 2; // All conditions must NOT match repeated Condition must_not = 3; // At least minimum amount of given conditions should match optional MinShould min_should = 4; } message MinShould { repeated Condition conditions = 1; uint64 min_count = 2; } message Condition { oneof condition_one_of { FieldCondition field = 1; IsEmptyCondition is_empty = 2; HasIdCondition has_id = 3; Filter filter = 4; IsNullCondition is_null = 5; NestedCondition nested = 6; HasVectorCondition has_vector = 7; SliceCondition slice = 8; } } message IsEmptyCondition { string key = 1; } message IsNullCondition { string key = 1; } message HasIdCondition { repeated PointId has_id = 1; } message HasVectorCondition { string has_vector = 1; } message SliceCondition { // Total number of disjoint deterministic slices the id space is split into, must be >= 1 uint32 total = 1; // Which slice to select, must be less than `total` uint32 index = 2; } message NestedCondition { // Path to nested object string key = 1; // Filter condition Filter filter = 2; } message FieldCondition { string key = 1; // Check if point has field with a given value Match match = 2; // Check if points value lies in a given range Range range = 3; // Check if points geolocation lies in a given area GeoBoundingBox geo_bounding_box = 4; // Check if geo point is within a given radius GeoRadius geo_radius = 5; // Check number of values for a specific field ValuesCount values_count = 6; // Check if geo point is within a given polygon GeoPolygon geo_polygon = 7; // Check if datetime is within a given range DatetimeRange datetime_range = 8; // Check if field is empty optional bool is_empty = 9; // Check if field is null optional bool is_null = 10; } message Match { oneof match_value { // Match string keyword string keyword = 1; // Match integer int64 integer = 2; // Match boolean bool boolean = 3; // Match text string text = 4; // Match multiple keywords RepeatedStrings keywords = 5; // Match multiple integers RepeatedIntegers integers = 6; // Match any other value except those integers RepeatedIntegers except_integers = 7; // Match any other value except those keywords RepeatedStrings except_keywords = 8; // Match phrase text string phrase = 9; // Match any word in the text string text_any = 10; // Match keywords starting with the given prefix string prefix = 11; // Match keywords containing the given substring string substring = 12; } } message RepeatedStrings { repeated string strings = 1; } message RepeatedIntegers { repeated int64 integers = 1; } message Range { optional double lt = 1; optional double gt = 2; optional double gte = 3; optional double lte = 4; } message DatetimeRange { optional google.protobuf.Timestamp lt = 1; optional google.protobuf.Timestamp gt = 2; optional google.protobuf.Timestamp gte = 3; optional google.protobuf.Timestamp lte = 4; } message GeoBoundingBox { // north-west corner GeoPoint top_left = 1; // south-east corner GeoPoint bottom_right = 2; } message GeoRadius { // Center of the circle GeoPoint center = 1; // In meters float radius = 2; } message GeoLineString { // Ordered sequence of GeoPoints representing the line repeated GeoPoint points = 1; } // For a valid GeoPolygon, both the exterior and interior GeoLineStrings must // consist of a minimum of 4 points. // Additionally, the first and last points of each GeoLineString must be the same. message GeoPolygon { // The exterior line bounds the surface GeoLineString exterior = 1; // Interior lines (if present) bound holes within the surface repeated GeoLineString interiors = 2; } message ValuesCount { optional uint64 lt = 1; optional uint64 gt = 2; optional uint64 gte = 3; optional uint64 lte = 4; }