Files
komp_ac/common/proto/search.proto
2026-08-13 21:23:49 +02:00

73 lines
1.8 KiB
Protocol Buffer

// In common/proto/search.proto
syntax = "proto3";
package komp_ac.search;
service Searcher {
rpc Search(SearchRequest) returns (SearchResponse);
rpc Count(SearchRequest) returns (SearchCountResponse);
}
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;
}