Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add v2/search #297

Merged
merged 2 commits into from
Mar 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3,463 changes: 3,463 additions & 0 deletions v2/internal/search/search.pb.go

Large diffs are not rendered by default.

398 changes: 398 additions & 0 deletions v2/internal/search/search.proto
@@ -0,0 +1,398 @@
// Copyright 2023 Google Inc. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.

syntax = "proto2";
option go_package = "search";

package search;

message Scope {
enum Type {
USER_BY_CANONICAL_ID = 1;
USER_BY_EMAIL = 2;
GROUP_BY_CANONICAL_ID = 3;
GROUP_BY_EMAIL = 4;
GROUP_BY_DOMAIN = 5;
ALL_USERS = 6;
ALL_AUTHENTICATED_USERS = 7;
}

optional Type type = 1;
optional string value = 2;
}

message Entry {
enum Permission {
READ = 1;
WRITE = 2;
FULL_CONTROL = 3;
}

optional Scope scope = 1;
optional Permission permission = 2;
optional string display_name = 3;
}

message AccessControlList {
optional string owner = 1;
repeated Entry entries = 2;
}

message FieldValue {
enum ContentType {
TEXT = 0;
HTML = 1;
ATOM = 2;
DATE = 3;
NUMBER = 4;
GEO = 5;
}

optional ContentType type = 1 [default = TEXT];

optional string language = 2 [default = "en"];

optional string string_value = 3;

optional group Geo = 4 {
required double lat = 5;
required double lng = 6;
}
}

message Field {
required string name = 1;
required FieldValue value = 2;
}

message FieldTypes {
required string name = 1;
repeated FieldValue.ContentType type = 2;
}

message IndexShardSettings {
repeated int32 prev_num_shards = 1;
required int32 num_shards = 2 [default=1];
repeated int32 prev_num_shards_search_false = 3;
optional string local_replica = 4 [default = ""];
}

message FacetValue {
enum ContentType {
ATOM = 2;
NUMBER = 4;
}

optional ContentType type = 1 [default = ATOM];
optional string string_value = 3;
}

message Facet {
required string name = 1;
required FacetValue value = 2;
}

message DocumentMetadata {
optional int64 version = 1;
optional int64 committed_st_version = 2;
}

message Document {
optional string id = 1;
optional string language = 2 [default = "en"];
repeated Field field = 3;
optional int32 order_id = 4;
optional OrderIdSource order_id_source = 6 [default = SUPPLIED];

enum OrderIdSource {
DEFAULTED = 0;
SUPPLIED = 1;
}

enum Storage {
DISK = 0;
}

optional Storage storage = 5 [default = DISK];
repeated Facet facet = 8;
}

message SearchServiceError {
enum ErrorCode {
OK = 0;
INVALID_REQUEST = 1;
TRANSIENT_ERROR = 2;
INTERNAL_ERROR = 3;
PERMISSION_DENIED = 4;
TIMEOUT = 5;
CONCURRENT_TRANSACTION = 6;
}
}

message RequestStatus {
required SearchServiceError.ErrorCode code = 1;
optional string error_detail = 2;
optional int32 canonical_code = 3;
}

message IndexSpec {
required string name = 1;

enum Consistency {
GLOBAL = 0;
PER_DOCUMENT = 1;
}
optional Consistency consistency = 2 [default = PER_DOCUMENT];

optional string namespace = 3;
optional int32 version = 4;

enum Source {
SEARCH = 0;
DATASTORE = 1;
CLOUD_STORAGE = 2;
}
optional Source source = 5 [default = SEARCH];

enum Mode {
PRIORITY = 0;
BACKGROUND = 1;
}
optional Mode mode = 6 [default = PRIORITY];
}

message IndexMetadata {
required IndexSpec index_spec = 1;

repeated FieldTypes field = 2;

message Storage {
optional int64 amount_used = 1;
optional int64 limit = 2;
}
optional Storage storage = 3;
}

message IndexDocumentParams {
repeated Document document = 1;

enum Freshness {
SYNCHRONOUSLY = 0;
WHEN_CONVENIENT = 1;
}
optional Freshness freshness = 2 [default = SYNCHRONOUSLY, deprecated=true];

required IndexSpec index_spec = 3;
}

message IndexDocumentRequest {
required IndexDocumentParams params = 1;

optional bytes app_id = 3;
}

message IndexDocumentResponse {
repeated RequestStatus status = 1;

repeated string doc_id = 2;
}

message DeleteDocumentParams {
repeated string doc_id = 1;

required IndexSpec index_spec = 2;
}

message DeleteDocumentRequest {
required DeleteDocumentParams params = 1;

optional bytes app_id = 3;
}

message DeleteDocumentResponse {
repeated RequestStatus status = 1;
}

message ListDocumentsParams {
required IndexSpec index_spec = 1;
optional string start_doc_id = 2;
optional bool include_start_doc = 3 [default = true];
optional int32 limit = 4 [default = 100];
optional bool keys_only = 5;
}

message ListDocumentsRequest {
required ListDocumentsParams params = 1;

optional bytes app_id = 2;
}

message ListDocumentsResponse {
required RequestStatus status = 1;

repeated Document document = 2;
}

message ListIndexesParams {
optional bool fetch_schema = 1;
optional int32 limit = 2 [default = 20];
optional string namespace = 3;
optional string start_index_name = 4;
optional bool include_start_index = 5 [default = true];
optional string index_name_prefix = 6;
optional int32 offset = 7;
optional IndexSpec.Source source = 8 [default = SEARCH];
}

message ListIndexesRequest {
required ListIndexesParams params = 1;

optional bytes app_id = 3;
}

message ListIndexesResponse {
required RequestStatus status = 1;
repeated IndexMetadata index_metadata = 2;
}

message DeleteSchemaParams {
optional IndexSpec.Source source = 1 [default = SEARCH];
repeated IndexSpec index_spec = 2;
}

message DeleteSchemaRequest {
required DeleteSchemaParams params = 1;

optional bytes app_id = 3;
}

message DeleteSchemaResponse {
repeated RequestStatus status = 1;
}

message SortSpec {
required string sort_expression = 1;
optional bool sort_descending = 2 [default = true];
optional string default_value_text = 4;
optional double default_value_numeric = 5;
}

message ScorerSpec {
enum Scorer {
RESCORING_MATCH_SCORER = 0;
MATCH_SCORER = 2;
}
optional Scorer scorer = 1 [default = MATCH_SCORER];

optional int32 limit = 2 [default = 1000];
optional string match_scorer_parameters = 9;
}

message FieldSpec {
repeated string name = 1;

repeated group Expression = 2 {
required string name = 3;
required string expression = 4;
}
}

message FacetRange {
optional string name = 1;
optional string start = 2;
optional string end = 3;
}

message FacetRequestParam {
optional int32 value_limit = 1;
repeated FacetRange range = 2;
repeated string value_constraint = 3;
}

message FacetAutoDetectParam {
optional int32 value_limit = 1 [default = 10];
}

message FacetRequest {
required string name = 1;
optional FacetRequestParam params = 2;
}

message FacetRefinement {
required string name = 1;
optional string value = 2;

message Range {
optional string start = 1;
optional string end = 2;
}
optional Range range = 3;
}

message SearchParams {
required IndexSpec index_spec = 1;
required string query = 2;
optional string cursor = 4;
optional int32 offset = 11;

enum CursorType {
NONE = 0;
SINGLE = 1;
PER_RESULT = 2;
}
optional CursorType cursor_type = 5 [default = NONE];

optional int32 limit = 6 [default = 20];
optional int32 matched_count_accuracy = 7;
repeated SortSpec sort_spec = 8;
optional ScorerSpec scorer_spec = 9;
optional FieldSpec field_spec = 10;
optional bool keys_only = 12;

enum ParsingMode {
STRICT = 0;
RELAXED = 1;
}
optional ParsingMode parsing_mode = 13 [default = STRICT];

optional int32 auto_discover_facet_count = 15 [default = 0];
repeated FacetRequest include_facet = 16;
repeated FacetRefinement facet_refinement = 17;
optional FacetAutoDetectParam facet_auto_detect_param = 18;
optional int32 facet_depth = 19 [default=1000];
}

message SearchRequest {
required SearchParams params = 1;

optional bytes app_id = 3;
}

message FacetResultValue {
required string name = 1;
required int32 count = 2;
required FacetRefinement refinement = 3;
}

message FacetResult {
required string name = 1;
repeated FacetResultValue value = 2;
}

message SearchResult {
required Document document = 1;
repeated Field expression = 4;
repeated double score = 2;
optional string cursor = 3;
}

message SearchResponse {
repeated SearchResult result = 1;
required int64 matched_count = 2;
required RequestStatus status = 3;
optional string cursor = 4;
repeated FacetResult facet_result = 5;

extensions 1000 to 9999;
}