pub struct PgVectorIndex { /* private fields */ }Expand description
PostgreSQL vector index backed by the pgvector extension.
All operations are async over a shared PgPool (MVCC, connection-pooled).
The relation named table holds (id BIGINT PK, vec vector(N)) rows.
Implementations§
Source§impl PgVectorIndex
impl PgVectorIndex
Sourcepub async fn new(url: &str, table: &str, dim: usize) -> Result<Self>
pub async fn new(url: &str, table: &str, dim: usize) -> Result<Self>
Connect to url (libpq connstring / postgresql://…), create the
vector table + HNSW cosine index if missing, and return a ready index.
dim is enforced by the fixed vector(dim) column; vectors whose
length differs from dim are rejected by pgvector on insert.
Sourcepub fn pool(&self) -> &PgPool
pub fn pool(&self) -> &PgPool
Underlying connection pool.
Callers that need cross-table transactional consistency — e.g. pruning
a law’s chunks plus their vectors atomically in one transaction — can
pool().begin() and run their own DML on the same pool the index uses.
This preserves the table-name encapsulation while letting the caller
coordinate a multi-statement transaction.
Sourcepub async fn remove_in_tx(
&self,
tx: &mut PgConnection,
ids: &[u64],
) -> Result<()>
pub async fn remove_in_tx( &self, tx: &mut PgConnection, ids: &[u64], ) -> Result<()>
Remove vectors by external IDs within a caller-provided transaction.
Enables atomic cross-table deletes: begin a tx on pool,
delete related rows in other relations (chunks, edges, …), call this with
the same &mut PgConnection, then commit(). A failure anywhere rolls
back the whole set — no orphaned vectors or chunks. The table name stays
encapsulated (format! over the validated identifier).
Trait Implementations§
Source§impl AsyncVectorIndex for PgVectorIndex
impl AsyncVectorIndex for PgVectorIndex
Source§fn add<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
vectors: &'life1 [Vec<f32>],
ids: &'life2 [u64],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn add<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
vectors: &'life1 [Vec<f32>],
ids: &'life2 [u64],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn remove<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [u64],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn remove<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [u64],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn search<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 [f32],
k: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<SearchHit>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn search<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 [f32],
k: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<SearchHit>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
k nearest neighbors of query.Source§fn search_filtered<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
query: &'life1 [f32],
k: usize,
allowlist: &'life2 [u64],
) -> Pin<Box<dyn Future<Output = Result<Vec<SearchHit>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn search_filtered<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
query: &'life1 [f32],
k: usize,
allowlist: &'life2 [u64],
) -> Pin<Box<dyn Future<Output = Result<Vec<SearchHit>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Auto Trait Implementations§
impl !RefUnwindSafe for PgVectorIndex
impl !UnwindSafe for PgVectorIndex
impl Freeze for PgVectorIndex
impl Send for PgVectorIndex
impl Sync for PgVectorIndex
impl Unpin for PgVectorIndex
impl UnsafeUnpin for PgVectorIndex
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.