Spaces:
Build error
Build error
File size: 3,493 Bytes
84d2a97 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
use std::fmt::Debug;
use segment::data_types::vectors::{
DenseVector, Named, NamedQuery, NamedVectorStruct, VectorInternal,
};
use segment::vector_storage::query::{ContextQuery, DiscoveryQuery, RecoQuery};
use sparse::common::sparse_vector::SparseVector;
impl QueryEnum {
pub fn get_vector_name(&self) -> &str {
match self {
QueryEnum::Nearest(vector) => vector.get_name(),
QueryEnum::RecommendBestScore(reco_query) => reco_query.get_name(),
QueryEnum::Discover(discovery_query) => discovery_query.get_name(),
QueryEnum::Context(context_query) => context_query.get_name(),
}
}
/// Only when the distance is the scoring, this will return true.
pub fn is_distance_scored(&self) -> bool {
match self {
QueryEnum::Nearest(_) => true,
QueryEnum::RecommendBestScore(_) | QueryEnum::Discover(_) | QueryEnum::Context(_) => {
false
}
}
}
pub fn iterate_sparse(&self, mut f: impl FnMut(&str, &SparseVector)) {
match self {
QueryEnum::Nearest(vector) => match vector {
NamedVectorStruct::Sparse(named_sparse_vector) => {
f(&named_sparse_vector.name, &named_sparse_vector.vector)
}
NamedVectorStruct::Default(_)
| NamedVectorStruct::Dense(_)
| NamedVectorStruct::MultiDense(_) => {}
},
QueryEnum::RecommendBestScore(reco_query) => {
let name = reco_query.get_name();
for vector in reco_query.query.flat_iter() {
match vector {
VectorInternal::Sparse(sparse_vector) => f(name, sparse_vector),
VectorInternal::Dense(_) | VectorInternal::MultiDense(_) => {}
}
}
}
QueryEnum::Discover(discovery_query) => {
let name = discovery_query.get_name();
for pair in discovery_query.query.flat_iter() {
match pair {
VectorInternal::Sparse(sparse_vector) => f(name, sparse_vector),
VectorInternal::Dense(_) | VectorInternal::MultiDense(_) => {}
}
}
}
QueryEnum::Context(context_query) => {
let name = context_query.get_name();
for pair in context_query.query.flat_iter() {
match pair {
VectorInternal::Sparse(sparse_vector) => f(name, sparse_vector),
VectorInternal::Dense(_) | VectorInternal::MultiDense(_) => {}
}
}
}
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum QueryEnum {
Nearest(NamedVectorStruct),
RecommendBestScore(NamedQuery<RecoQuery<VectorInternal>>),
Discover(NamedQuery<DiscoveryQuery<VectorInternal>>),
Context(NamedQuery<ContextQuery<VectorInternal>>),
}
impl From<DenseVector> for QueryEnum {
fn from(vector: DenseVector) -> Self {
QueryEnum::Nearest(NamedVectorStruct::Default(vector))
}
}
impl From<NamedQuery<DiscoveryQuery<VectorInternal>>> for QueryEnum {
fn from(query: NamedQuery<DiscoveryQuery<VectorInternal>>) -> Self {
QueryEnum::Discover(query)
}
}
impl AsRef<QueryEnum> for QueryEnum {
fn as_ref(&self) -> &QueryEnum {
self
}
}
|