use serde::{Deserialize, Serialize};
use crate::data::DataValue;
use crate::vector::core::vector::Vector;
pub use crate::vector::search::searcher::{
VectorSearchParams, VectorSearchQuery, VectorSearchRequest,
};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "value", rename_all = "snake_case")]
pub enum FieldSelector {
Exact(String),
Prefix(String),
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum VectorScoreMode {
#[default]
WeightedSum,
MaxSim,
LateInteraction,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryVector {
pub vector: Vector,
#[serde(default = "QueryVector::default_weight")]
pub weight: f32,
#[serde(default)]
pub fields: Option<Vec<String>>,
}
impl QueryVector {
fn default_weight() -> f32 {
1.0
}
}
#[derive(Debug, Clone)]
pub struct QueryPayload {
pub field: String,
pub payload: DataValue,
pub weight: f32,
}
impl QueryPayload {
pub fn new(field: impl Into<String>, payload: DataValue) -> Self {
Self {
field: field.into(),
payload,
weight: Self::default_weight(),
}
}
pub fn with_weight(field: impl Into<String>, payload: DataValue, weight: f32) -> Self {
Self {
field: field.into(),
payload,
weight,
}
}
fn default_weight() -> f32 {
1.0
}
}