PgSearchIndex

org.llm4s.rag.permissions.pg.PgSearchIndex
See thePgSearchIndex companion object
final class PgSearchIndex extends SearchIndex

PostgreSQL implementation of SearchIndex with permission-based filtering.

Uses HikariCP for connection pooling and pgvector for efficient vector similarity search.

The implementation:

  1. Extends the vectors table with collection_id and readable_by columns
  2. Uses GIN indexes for efficient array containment queries
  3. Applies two-level permission filtering (collection + document)

Value parameters

dataSource

HikariCP data source for connection pooling

vectorTableName

Name of the vectors table

Attributes

Companion
object
Graph
Supertypes
trait SearchIndex
class Object
trait Matchable
class Any

Members list

Value members

Concrete methods

override def clearCollection(collectionPath: CollectionPath): Result[Long]

Delete all documents in a collection.

Delete all documents in a collection.

Does not delete the collection itself.

Value parameters

collectionPath

The collection to clear

Attributes

Returns

Number of chunks deleted

Definition Classes
override def close(): Unit

Close the search index and release resources.

Close the search index and release resources.

Attributes

Definition Classes

Access to collection management

Access to collection management

Attributes

Definition Classes
override def deleteDocument(collectionPath: CollectionPath, documentId: String): Result[Long]

Delete a document from a collection.

Delete a document from a collection.

Removes all chunks associated with the document.

Value parameters

collectionPath

The collection containing the document

documentId

The document identifier

Attributes

Returns

Number of chunks deleted

Definition Classes
override def dropSchema(): Result[Unit]

Drop the permission schema.

Drop the permission schema.

WARNING: This is destructive and will delete all permission data. Only use for testing or complete reset.

Attributes

Returns

Success or error

Definition Classes
override def ingest(collectionPath: CollectionPath, documentId: String, chunks: Seq[ChunkWithEmbedding], metadata: Map[String, String], readableBy: Set[PrincipalId]): Result[Int]

Ingest a document into a specific collection.

Ingest a document into a specific collection.

The collection must:

  • Exist (call ensureExists first if needed)
  • Be a leaf collection (can contain documents)

Value parameters

chunks

Pre-chunked content with embeddings

collectionPath

Target collection path

documentId

Unique document identifier

metadata

Document metadata

readableBy

Document-level permission override (empty = inherit from collection)

Attributes

Returns

Number of chunks indexed

Definition Classes
override def initializeSchema(): Result[Unit]

Initialize the permission schema.

Initialize the permission schema.

Creates necessary tables and indexes if they don't exist. Safe to call multiple times (idempotent).

Attributes

Returns

Success or error

Definition Classes
override def principals: PrincipalStore

Access to principal (user/group) management

Access to principal (user/group) management

Attributes

Definition Classes
override def query(auth: UserAuthorization, collectionPattern: CollectionPattern, queryVector: Array[Float], topK: Int, additionalFilter: Option[MetadataFilter]): Result[Seq[ScoredRecord]]

Main query method with permission filtering.

Main query method with permission filtering.

Performs a two-stage permission filter:

  1. Collection-level: Only search collections the user can access
  2. Document-level: Only return documents the user can read

Value parameters

additionalFilter

Optional additional metadata filter

auth

User authorization context

collectionPattern

Pattern to filter collections (e.g., confluence/STAR)

queryVector

Embedding vector for semantic search

topK

Maximum number of results to return

Attributes

Returns

Permission-filtered search results

Definition Classes

Inherited methods

def queryHybrid(auth: UserAuthorization, collectionPattern: CollectionPattern, queryVector: Array[Float], queryText: Option[String], topK: Int, additionalFilter: Option[MetadataFilter]): Result[Seq[ScoredRecord]]

Query with a text query (for hybrid search).

Query with a text query (for hybrid search).

Value parameters

additionalFilter

Optional additional metadata filter

auth

User authorization context

collectionPattern

Pattern to filter collections

queryText

Text for keyword search (optional)

queryVector

Embedding vector for semantic search

topK

Maximum number of results

Attributes

Returns

Permission-filtered search results

Inherited from:
SearchIndex
def stats(collectionPath: CollectionPath): Result[CollectionStats]

Get statistics for a collection.

Get statistics for a collection.

Value parameters

collectionPath

The collection path

Attributes

Returns

Collection statistics

Inherited from:
SearchIndex