use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct FulltextSearchRequest {
pub index_name: String,
pub query: String,
#[serde(default)]
pub limit: Option<usize>,
#[serde(default)]
pub offset: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct FulltextSearchResponse {
pub results: Vec<FulltextSearchResult>,
pub total_hits: usize,
pub took_ms: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct FulltextSearchResult {
pub doc_id: String,
pub score: f32,
#[serde(default)]
pub highlights: Option<Vec<HighlightResult>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct HighlightResult {
pub field: String,
pub fragments: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct CreateFulltextIndexRequest {
pub index_name: String,
pub schema_name: String,
pub fields: Vec<FulltextFieldDef>,
#[serde(default)]
pub if_not_exists: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct FulltextFieldDef {
pub field_name: String,
#[serde(default)]
pub analyzer: Option<String>,
#[serde(default)]
pub boost: Option<f32>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct DropFulltextIndexRequest {
pub index_name: String,
#[serde(default)]
pub if_exists: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct FulltextIndexInfo {
pub index_name: String,
pub space_id: u64,
pub tag_name: String,
pub field_name: String,
pub status: String,
pub doc_count: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct ListFulltextIndexesResponse {
pub indexes: Vec<FulltextIndexInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct RebuildFulltextIndexRequest {
pub space_id: u64,
pub tag_name: String,
pub field_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct RebuildFulltextIndexResponse {
pub rebuild_id: String,
pub status: String,
pub space_id: u64,
pub tag_name: String,
pub field_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct FulltextRebuildStatusResponse {
pub rebuild_id: String,
pub status: String,
#[serde(default)]
pub phase: Option<String>,
#[serde(default)]
pub generation: Option<u64>,
#[serde(default)]
pub docs_scanned: u64,
#[serde(default)]
pub docs_applied: u64,
#[serde(default)]
pub docs_skipped: u64,
#[serde(default)]
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct ClearFulltextIndexRequest {
pub space_id: u64,
pub tag_name: String,
pub field_name: String,
pub force: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct ClearFulltextIndexResponse {
pub ok: bool,
pub space_id: u64,
pub tag_name: String,
pub field_name: String,
}