Files
komp_ac/common/proto/search.proto
2026-09-02 14:51:00 +02:00

98 lines
2.3 KiB
Protocol Buffer

// 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;
}