1syntax = "proto2"; 2option go_package = "search"; 3 4package search; 5 6message Scope { 7 enum Type { 8 USER_BY_CANONICAL_ID = 1; 9 USER_BY_EMAIL = 2; 10 GROUP_BY_CANONICAL_ID = 3; 11 GROUP_BY_EMAIL = 4; 12 GROUP_BY_DOMAIN = 5; 13 ALL_USERS = 6; 14 ALL_AUTHENTICATED_USERS = 7; 15 } 16 17 optional Type type = 1; 18 optional string value = 2; 19} 20 21message Entry { 22 enum Permission { 23 READ = 1; 24 WRITE = 2; 25 FULL_CONTROL = 3; 26 } 27 28 optional Scope scope = 1; 29 optional Permission permission = 2; 30 optional string display_name = 3; 31} 32 33message AccessControlList { 34 optional string owner = 1; 35 repeated Entry entries = 2; 36} 37 38message FieldValue { 39 enum ContentType { 40 TEXT = 0; 41 HTML = 1; 42 ATOM = 2; 43 DATE = 3; 44 NUMBER = 4; 45 GEO = 5; 46 } 47 48 optional ContentType type = 1 [default = TEXT]; 49 50 optional string language = 2 [default = "en"]; 51 52 optional string string_value = 3; 53 54 optional group Geo = 4 { 55 required double lat = 5; 56 required double lng = 6; 57 } 58} 59 60message Field { 61 required string name = 1; 62 required FieldValue value = 2; 63} 64 65message FieldTypes { 66 required string name = 1; 67 repeated FieldValue.ContentType type = 2; 68} 69 70message IndexShardSettings { 71 repeated int32 prev_num_shards = 1; 72 required int32 num_shards = 2 [default=1]; 73 repeated int32 prev_num_shards_search_false = 3; 74 optional string local_replica = 4 [default = ""]; 75} 76 77message FacetValue { 78 enum ContentType { 79 ATOM = 2; 80 NUMBER = 4; 81 } 82 83 optional ContentType type = 1 [default = ATOM]; 84 optional string string_value = 3; 85} 86 87message Facet { 88 required string name = 1; 89 required FacetValue value = 2; 90} 91 92message DocumentMetadata { 93 optional int64 version = 1; 94 optional int64 committed_st_version = 2; 95} 96 97message Document { 98 optional string id = 1; 99 optional string language = 2 [default = "en"]; 100 repeated Field field = 3; 101 optional int32 order_id = 4; 102 optional OrderIdSource order_id_source = 6 [default = SUPPLIED]; 103 104 enum OrderIdSource { 105 DEFAULTED = 0; 106 SUPPLIED = 1; 107 } 108 109 enum Storage { 110 DISK = 0; 111 } 112 113 optional Storage storage = 5 [default = DISK]; 114 repeated Facet facet = 8; 115} 116 117message SearchServiceError { 118 enum ErrorCode { 119 OK = 0; 120 INVALID_REQUEST = 1; 121 TRANSIENT_ERROR = 2; 122 INTERNAL_ERROR = 3; 123 PERMISSION_DENIED = 4; 124 TIMEOUT = 5; 125 CONCURRENT_TRANSACTION = 6; 126 } 127} 128 129message RequestStatus { 130 required SearchServiceError.ErrorCode code = 1; 131 optional string error_detail = 2; 132 optional int32 canonical_code = 3; 133} 134 135message IndexSpec { 136 required string name = 1; 137 138 enum Consistency { 139 GLOBAL = 0; 140 PER_DOCUMENT = 1; 141 } 142 optional Consistency consistency = 2 [default = PER_DOCUMENT]; 143 144 optional string namespace = 3; 145 optional int32 version = 4; 146 147 enum Source { 148 SEARCH = 0; 149 DATASTORE = 1; 150 CLOUD_STORAGE = 2; 151 } 152 optional Source source = 5 [default = SEARCH]; 153 154 enum Mode { 155 PRIORITY = 0; 156 BACKGROUND = 1; 157 } 158 optional Mode mode = 6 [default = PRIORITY]; 159} 160 161message IndexMetadata { 162 required IndexSpec index_spec = 1; 163 164 repeated FieldTypes field = 2; 165 166 message Storage { 167 optional int64 amount_used = 1; 168 optional int64 limit = 2; 169 } 170 optional Storage storage = 3; 171} 172 173message IndexDocumentParams { 174 repeated Document document = 1; 175 176 enum Freshness { 177 SYNCHRONOUSLY = 0; 178 WHEN_CONVENIENT = 1; 179 } 180 optional Freshness freshness = 2 [default = SYNCHRONOUSLY, deprecated=true]; 181 182 required IndexSpec index_spec = 3; 183} 184 185message IndexDocumentRequest { 186 required IndexDocumentParams params = 1; 187 188 optional bytes app_id = 3; 189} 190 191message IndexDocumentResponse { 192 repeated RequestStatus status = 1; 193 194 repeated string doc_id = 2; 195} 196 197message DeleteDocumentParams { 198 repeated string doc_id = 1; 199 200 required IndexSpec index_spec = 2; 201} 202 203message DeleteDocumentRequest { 204 required DeleteDocumentParams params = 1; 205 206 optional bytes app_id = 3; 207} 208 209message DeleteDocumentResponse { 210 repeated RequestStatus status = 1; 211} 212 213message ListDocumentsParams { 214 required IndexSpec index_spec = 1; 215 optional string start_doc_id = 2; 216 optional bool include_start_doc = 3 [default = true]; 217 optional int32 limit = 4 [default = 100]; 218 optional bool keys_only = 5; 219} 220 221message ListDocumentsRequest { 222 required ListDocumentsParams params = 1; 223 224 optional bytes app_id = 2; 225} 226 227message ListDocumentsResponse { 228 required RequestStatus status = 1; 229 230 repeated Document document = 2; 231} 232 233message ListIndexesParams { 234 optional bool fetch_schema = 1; 235 optional int32 limit = 2 [default = 20]; 236 optional string namespace = 3; 237 optional string start_index_name = 4; 238 optional bool include_start_index = 5 [default = true]; 239 optional string index_name_prefix = 6; 240 optional int32 offset = 7; 241 optional IndexSpec.Source source = 8 [default = SEARCH]; 242} 243 244message ListIndexesRequest { 245 required ListIndexesParams params = 1; 246 247 optional bytes app_id = 3; 248} 249 250message ListIndexesResponse { 251 required RequestStatus status = 1; 252 repeated IndexMetadata index_metadata = 2; 253} 254 255message DeleteSchemaParams { 256 optional IndexSpec.Source source = 1 [default = SEARCH]; 257 repeated IndexSpec index_spec = 2; 258} 259 260message DeleteSchemaRequest { 261 required DeleteSchemaParams params = 1; 262 263 optional bytes app_id = 3; 264} 265 266message DeleteSchemaResponse { 267 repeated RequestStatus status = 1; 268} 269 270message SortSpec { 271 required string sort_expression = 1; 272 optional bool sort_descending = 2 [default = true]; 273 optional string default_value_text = 4; 274 optional double default_value_numeric = 5; 275} 276 277message ScorerSpec { 278 enum Scorer { 279 RESCORING_MATCH_SCORER = 0; 280 MATCH_SCORER = 2; 281 } 282 optional Scorer scorer = 1 [default = MATCH_SCORER]; 283 284 optional int32 limit = 2 [default = 1000]; 285 optional string match_scorer_parameters = 9; 286} 287 288message FieldSpec { 289 repeated string name = 1; 290 291 repeated group Expression = 2 { 292 required string name = 3; 293 required string expression = 4; 294 } 295} 296 297message FacetRange { 298 optional string name = 1; 299 optional string start = 2; 300 optional string end = 3; 301} 302 303message FacetRequestParam { 304 optional int32 value_limit = 1; 305 repeated FacetRange range = 2; 306 repeated string value_constraint = 3; 307} 308 309message FacetAutoDetectParam { 310 optional int32 value_limit = 1 [default = 10]; 311} 312 313message FacetRequest { 314 required string name = 1; 315 optional FacetRequestParam params = 2; 316} 317 318message FacetRefinement { 319 required string name = 1; 320 optional string value = 2; 321 322 message Range { 323 optional string start = 1; 324 optional string end = 2; 325 } 326 optional Range range = 3; 327} 328 329message SearchParams { 330 required IndexSpec index_spec = 1; 331 required string query = 2; 332 optional string cursor = 4; 333 optional int32 offset = 11; 334 335 enum CursorType { 336 NONE = 0; 337 SINGLE = 1; 338 PER_RESULT = 2; 339 } 340 optional CursorType cursor_type = 5 [default = NONE]; 341 342 optional int32 limit = 6 [default = 20]; 343 optional int32 matched_count_accuracy = 7; 344 repeated SortSpec sort_spec = 8; 345 optional ScorerSpec scorer_spec = 9; 346 optional FieldSpec field_spec = 10; 347 optional bool keys_only = 12; 348 349 enum ParsingMode { 350 STRICT = 0; 351 RELAXED = 1; 352 } 353 optional ParsingMode parsing_mode = 13 [default = STRICT]; 354 355 optional int32 auto_discover_facet_count = 15 [default = 0]; 356 repeated FacetRequest include_facet = 16; 357 repeated FacetRefinement facet_refinement = 17; 358 optional FacetAutoDetectParam facet_auto_detect_param = 18; 359 optional int32 facet_depth = 19 [default=1000]; 360} 361 362message SearchRequest { 363 required SearchParams params = 1; 364 365 optional bytes app_id = 3; 366} 367 368message FacetResultValue { 369 required string name = 1; 370 required int32 count = 2; 371 required FacetRefinement refinement = 3; 372} 373 374message FacetResult { 375 required string name = 1; 376 repeated FacetResultValue value = 2; 377} 378 379message SearchResult { 380 required Document document = 1; 381 repeated Field expression = 4; 382 repeated double score = 2; 383 optional string cursor = 3; 384} 385 386message SearchResponse { 387 repeated SearchResult result = 1; 388 required int64 matched_count = 2; 389 required RequestStatus status = 3; 390 optional string cursor = 4; 391 repeated FacetResult facet_result = 5; 392 393 extensions 1000 to 9999; 394} 395