// In common/proto/search.proto syntax = "proto3"; package komp_ac.search; import "common.proto"; service Searcher { rpc Search(SearchRequest) returns (SearchResponse); rpc Count(SearchRequest) returns (SearchCountResponse); } service SearchHealth { rpc GetHealth(komp_ac.common.Empty) returns (SearchHealthResponse); } message SearchIndexError { int64 job_id = 1; string profile_name = 2; string table_name = 3; int64 row_id = 4; string operation = 5; int32 attempts = 6; string last_error = 7; } message SearchHealthResponse { bool enabled = 1; bool ready = 2; bool healthy = 3; uint64 pending_jobs = 4; uint64 retrying_jobs = 5; repeated SearchIndexError errors = 6; } message SearchCountResponse { uint64 count = 1; } enum MatchMode { MATCH_MODE_UNSPECIFIED = 0; MATCH_MODE_FUZZY = 1; MATCH_MODE_EXACT = 2; } message ColumnConstraint { string column = 1; string query = 2; MatchMode mode = 3; } message SearchRequest { string profile_name = 1; optional string table_name = 2; string free_query = 3; repeated ColumnConstraint must = 4; optional uint32 limit = 5; optional uint32 offset = 6; optional SearchOrder order = 7; // Current rows are the default so pickers and relationship counts never // select historical records. Callers may explicitly search immutable row // archives as well. SearchVersionScope version_scope = 8; } enum SearchVersionScope { SEARCH_VERSION_SCOPE_CURRENT = 0; SEARCH_VERSION_SCOPE_ARCHIVED = 1; SEARCH_VERSION_SCOPE_ALL = 2; } message SearchOrder { string column = 1; SearchOrderDirection direction = 2; } enum SearchOrderDirection { SEARCH_ORDER_DIRECTION_UNSPECIFIED = 0; SEARCH_ORDER_DIRECTION_ASC = 1; SEARCH_ORDER_DIRECTION_DESC = 2; } message SearchResponse { message Hit { int64 id = 1; // PostgreSQL row ID float score = 2; string content_json = 3; string table_name = 4; // Configured human-readable values for this row, in display order. repeated string row_display_values = 5; repeated string row_display_columns = 6; optional uint64 position = 7; // Version 0 means the source predates managed row versioning. New managed // rows always return a positive version. int64 version_number = 8; bool archived = 9; } repeated Hit hits = 1; }