use diskann_utils::future::SendFuture;
use crate::{
ANNResult,
graph::{self, index::DiskANNIndex},
provider::DataProvider,
};
mod filtered_range_search;
mod inline_filter_search;
mod knn_search;
pub(crate) mod multihop_filter_search;
mod range_search;
mod paged;
pub use paged::PagedSearch;
pub mod record;
pub(crate) mod scratch;
pub trait Search<'a, DP, S, T>
where
DP: DataProvider,
S: graph::glue::SearchStrategy<'a, DP, T>,
{
type Output;
fn search<O, PP, OB>(
self,
index: &'a DiskANNIndex<DP>,
strategy: &'a S,
processor: PP,
context: &'a DP::Context,
query: T,
output: &mut OB,
) -> impl SendFuture<ANNResult<Self::Output>>
where
O: Send,
PP: graph::glue::SearchPostProcess<S::SearchAccessor, T, O> + Send + Sync,
OB: graph::search_output_buffer::SearchOutputBuffer<O> + Send + ?Sized;
}
pub use filtered_range_search::FilteredRange;
pub use inline_filter_search::{AdaptiveL, InlineFilterSearch};
pub use knn_search::{Knn, KnnSearchError, RecordedKnn};
pub use multihop_filter_search::MultihopFilterSearch;
pub use range_search::{Range, RangeBuilder, RangeSearchError};
#[cfg(feature = "experimental_diversity_search")]
mod diverse_search;
#[cfg(feature = "experimental_diversity_search")]
pub use diverse_search::Diverse;
#[cfg(feature = "experimental_diversity_search")]
pub use diverse_search::DiverseSearchParams;