1use serde::{Deserialize, Serialize};
10
11#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
13pub struct FulltextSearchRequest {
14 pub index_name: String,
16 pub query: String,
18 #[serde(default)]
20 pub limit: Option<usize>,
21 #[serde(default)]
23 pub offset: Option<usize>,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
28pub struct FulltextSearchResponse {
29 pub results: Vec<FulltextSearchResult>,
31 pub total_hits: usize,
33 pub took_ms: u64,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
39pub struct FulltextSearchResult {
40 pub doc_id: String,
42 pub score: f32,
44 #[serde(default)]
46 pub highlights: Option<Vec<HighlightResult>>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
51pub struct HighlightResult {
52 pub field: String,
54 pub fragments: Vec<String>,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
60pub struct CreateFulltextIndexRequest {
61 pub index_name: String,
63 pub schema_name: String,
65 pub fields: Vec<FulltextFieldDef>,
67 #[serde(default)]
69 pub if_not_exists: Option<bool>,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
74pub struct FulltextFieldDef {
75 pub field_name: String,
77 #[serde(default)]
79 pub analyzer: Option<String>,
80 #[serde(default)]
82 pub boost: Option<f32>,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
87pub struct DropFulltextIndexRequest {
88 pub index_name: String,
90 #[serde(default)]
92 pub if_exists: Option<bool>,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
97pub struct FulltextIndexInfo {
98 pub index_name: String,
100 pub space_id: u64,
102 pub tag_name: String,
104 pub field_name: String,
106 pub status: String,
108 pub doc_count: u64,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
114pub struct ListFulltextIndexesResponse {
115 pub indexes: Vec<FulltextIndexInfo>,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
124pub struct RebuildFulltextIndexRequest {
125 pub space_id: u64,
127 pub tag_name: String,
129 pub field_name: String,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
135pub struct RebuildFulltextIndexResponse {
136 pub rebuild_id: String,
138 pub status: String,
140 pub space_id: u64,
142 pub tag_name: String,
144 pub field_name: String,
146}
147
148#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
150pub struct FulltextRebuildStatusResponse {
151 pub rebuild_id: String,
153 pub status: String,
155 #[serde(default)]
157 pub phase: Option<String>,
158 #[serde(default)]
160 pub generation: Option<u64>,
161 #[serde(default)]
163 pub docs_scanned: u64,
164 #[serde(default)]
166 pub docs_applied: u64,
167 #[serde(default)]
169 pub docs_skipped: u64,
170 #[serde(default)]
172 pub error: Option<String>,
173}
174
175#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
180pub struct ClearFulltextIndexRequest {
181 pub space_id: u64,
183 pub tag_name: String,
185 pub field_name: String,
187 pub force: bool,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
193pub struct ClearFulltextIndexResponse {
194 pub ok: bool,
196 pub space_id: u64,
198 pub tag_name: String,
200 pub field_name: String,
202}