Documentation
¶
Overview ¶
Package vectorstore содержит реализации VectorStore для разных backend'ов.
Index ¶
- type ChromaRuntimeOptions
- type ChromaStore
- func (s *ChromaStore) CollectionExists(ctx context.Context) (bool, error)
- func (s *ChromaStore) CreateCollection(ctx context.Context) error
- func (s *ChromaStore) Delete(ctx context.Context, id string) error
- func (s *ChromaStore) DeleteByParentID(ctx context.Context, parentID string) error
- func (s *ChromaStore) DeleteCollection(ctx context.Context) error
- func (s *ChromaStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
- func (s *ChromaStore) SearchWithFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *ChromaStore) SearchWithMetadataFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *ChromaStore) Upsert(ctx context.Context, chunk domain.Chunk) error
- type InMemoryStore
- func (s *InMemoryStore) Delete(ctx context.Context, id string) error
- func (s *InMemoryStore) DeleteByParentID(ctx context.Context, parentID string) error
- func (s *InMemoryStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
- func (s *InMemoryStore) SearchWithFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *InMemoryStore) SearchWithMetadataFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *InMemoryStore) Upsert(ctx context.Context, chunk domain.Chunk) error
- type MilvusStore
- func (s *MilvusStore) Delete(ctx context.Context, id string) error
- func (s *MilvusStore) DeleteByParentID(ctx context.Context, parentID string) error
- func (s *MilvusStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
- func (s *MilvusStore) SearchHybrid(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *MilvusStore) SearchHybridWithMetadataFilter(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *MilvusStore) SearchHybridWithParentIDFilter(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *MilvusStore) SearchWithFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *MilvusStore) SearchWithMetadataFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *MilvusStore) Upsert(ctx context.Context, chunk domain.Chunk) error
- type PGVectorStore
- func (s *PGVectorStore) Delete(ctx context.Context, id string) error
- func (s *PGVectorStore) DeleteByParentID(ctx context.Context, parentID string) error
- func (s *PGVectorStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
- func (s *PGVectorStore) SearchBM25(ctx context.Context, query string, topK int) (domain.RetrievalResult, error)
- func (s *PGVectorStore) SearchHybrid(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *PGVectorStore) SearchHybridWithMetadataFilter(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *PGVectorStore) SearchHybridWithParentIDFilter(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *PGVectorStore) SearchWithFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *PGVectorStore) SearchWithMetadataFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *PGVectorStore) Upsert(ctx context.Context, chunk domain.Chunk) error
- type QdrantRuntimeOptions
- type QdrantStore
- func (s *QdrantStore) Delete(ctx context.Context, id string) error
- func (s *QdrantStore) DeleteByParentID(ctx context.Context, parentID string) error
- func (s *QdrantStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
- func (s *QdrantStore) SearchHybrid(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *QdrantStore) SearchHybridWithMetadataFilter(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *QdrantStore) SearchHybridWithParentIDFilter(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *QdrantStore) SearchWithFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *QdrantStore) SearchWithMetadataFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *QdrantStore) Upsert(ctx context.Context, chunk domain.Chunk) error
- type RuntimeOptions
- type WeaviateStore
- func (s *WeaviateStore) Delete(ctx context.Context, id string) error
- func (s *WeaviateStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
- func (s *WeaviateStore) SearchHybrid(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *WeaviateStore) SearchHybridWithMetadataFilter(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *WeaviateStore) SearchHybridWithParentIDFilter(ctx context.Context, query string, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *WeaviateStore) SearchWithFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *WeaviateStore) SearchWithMetadataFilter(ctx context.Context, embedding []float64, topK int, ...) (domain.RetrievalResult, error)
- func (s *WeaviateStore) Upsert(ctx context.Context, chunk domain.Chunk) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ChromaRuntimeOptions ¶
type ChromaRuntimeOptions struct {
SearchTimeout time.Duration
UpsertTimeout time.Duration
DeleteTimeout time.Duration
MaxTopK int
}
ChromaRuntimeOptions задаёт ограничения и таймауты для ChromaStore.
type ChromaStore ¶
type ChromaStore struct {
// contains filtered or unexported fields
}
ChromaStore реализует domain.VectorStore и domain.VectorStoreWithFilters через ChromaDB REST API. Поддерживает ChromaDB 0.4.x+ с HTTP API v1.
@ds-task T1.1: Создать структуру ChromaStore с HTTP клиентом (RQ-001, RQ-002, DEC-001)
func NewChromaStore ¶
func NewChromaStore(baseURL, collection string, dimension int) *ChromaStore
NewChromaStore создаёт новый ChromaDB-backed store. baseURL по умолчанию: http://localhost:8000 (ChromaDB 0.4.x+)
@ds-task T1.1: Factory-функция для создания клиента (RQ-001, DEC-001)
func (*ChromaStore) CollectionExists ¶
func (s *ChromaStore) CollectionExists(ctx context.Context) (bool, error)
CollectionExists проверяет существование коллекции в ChromaDB. Возвращает (true, nil) при HTTP 200, (false, nil) при 404, (false, error) при других сбоях. Реализует domain.CollectionManager.
@ds-task T2.3: CollectionExists через GET /api/v1/collections/{name} (AC-004, AC-005, DEC-003)
func (*ChromaStore) CreateCollection ¶
func (s *ChromaStore) CreateCollection(ctx context.Context) error
CreateCollection создаёт коллекцию в ChromaDB. Idempotent: использует get_or_create=true, повторный вызов возвращает nil. Реализует domain.CollectionManager.
@ds-task T2.1: Публичный CreateCollection заменяет приватный createCollection (AC-001, DEC-002)
func (*ChromaStore) Delete ¶
func (s *ChromaStore) Delete(ctx context.Context, id string) error
Delete удаляет чанк по ID из ChromaDB.
@ds-task T2.3: Реализовать Delete через HTTP POST /api/v1/collections/{name}/delete (AC-004, RQ-004)
func (*ChromaStore) DeleteByParentID ¶
func (s *ChromaStore) DeleteByParentID(ctx context.Context, parentID string) error
DeleteByParentID удаляет все документы с указанным parent_id через ChromaDB where-фильтр.
func (*ChromaStore) DeleteCollection ¶
func (s *ChromaStore) DeleteCollection(ctx context.Context) error
DeleteCollection удаляет коллекцию из ChromaDB. Idempotent: возвращает nil при HTTP 200, 204 и 404 (коллекция не существует). При других статусах возвращает ошибку с кодом. Реализует domain.CollectionManager.
@ds-task T2.2: DeleteCollection через DELETE /api/v1/collections/{name} (AC-002, AC-003, DEC-001)
func (*ChromaStore) Search ¶
func (s *ChromaStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
Search выполняет векторный поиск в ChromaDB.
@ds-task T2.2: Реализовать Search через HTTP POST /api/v1/collections/{name}/query (AC-002, RQ-005)
func (*ChromaStore) SearchWithFilter ¶
func (s *ChromaStore) SearchWithFilter( ctx context.Context, embedding []float64, topK int, filter domain.ParentIDFilter, ) (domain.RetrievalResult, error)
SearchWithFilter выполняет поиск с фильтрацией по ParentID.
@ds-task T2.3: Реализовать SearchWithFilter с where-фильтром ChromaDB (AC-004, RQ-004)
func (*ChromaStore) SearchWithMetadataFilter ¶
func (s *ChromaStore) SearchWithMetadataFilter( ctx context.Context, embedding []float64, topK int, filter domain.MetadataFilter, ) (domain.RetrievalResult, error)
SearchWithMetadataFilter выполняет поиск с фильтрацией по полям метаданных. Поддерживает автосоздание коллекции при отсутствии.
@ds-task T2.4: Реализовать SearchWithMetadataFilter с where-фильтром и autocreate (AC-003, AC-007, RQ-006, RQ-007, DEC-003)
type InMemoryStore ¶
type InMemoryStore struct {
// contains filtered or unexported fields
}
InMemoryStore реализует VectorStore в памяти для тестирования.
func NewInMemoryStore ¶
func NewInMemoryStore() *InMemoryStore
NewInMemoryStore создаёт новое in-memory хранилище.
func (*InMemoryStore) Delete ¶
func (s *InMemoryStore) Delete(ctx context.Context, id string) error
Delete удаляет чанк по ID из хранилища.
func (*InMemoryStore) DeleteByParentID ¶
func (s *InMemoryStore) DeleteByParentID(ctx context.Context, parentID string) error
DeleteByParentID удаляет все чанки с указанным ParentID.
func (*InMemoryStore) Search ¶
func (s *InMemoryStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
Search выполняет поиск похожих чанков по embedding-вектору с использованием cosine similarity.
func (*InMemoryStore) SearchWithFilter ¶
func (s *InMemoryStore) SearchWithFilter( ctx context.Context, embedding []float64, topK int, filter domain.ParentIDFilter, ) (domain.RetrievalResult, error)
SearchWithFilter выполняет поиск похожих чанков с фильтрацией по ParentID. Пустой filter.ParentIDs (nil или len==0) делегирует в базовый Search.
@ds-task T2.2: Реализовать SearchWithFilter в InMemoryStore для полного соответствия VectorStoreWithFilters (AC-005)
func (*InMemoryStore) SearchWithMetadataFilter ¶
func (s *InMemoryStore) SearchWithMetadataFilter( ctx context.Context, embedding []float64, topK int, filter domain.MetadataFilter, ) (domain.RetrievalResult, error)
SearchWithMetadataFilter выполняет поиск похожих чанков с фильтрацией по полям метаданных. Пустой filter.Fields (nil или len==0) делегирует в базовый Search без фильтра. Фильтрация выполняется в памяти: все пары (ключ, значение) из Fields должны присутствовать в chunk.Metadata (AND).
@ds-task T2.2: Реализовать SearchWithMetadataFilter в InMemoryStore (RQ-004, AC-002, AC-005)
type MilvusStore ¶
type MilvusStore struct {
// contains filtered or unexported fields
}
MilvusStore реализует domain.VectorStore, domain.VectorStoreWithFilters и domain.DocumentStore через Milvus REST API v2 (raw HTTP, без SDK). Паттерн аналогичен WeaviateStore и QdrantStore в этом пакете. @ds-task T1.1: Создать структуру MilvusStore (AC-007, DEC-001)
func NewMilvusStore ¶
func NewMilvusStore(baseURL, collection, token string) *MilvusStore
NewMilvusStore создаёт MilvusStore с указанными параметрами. baseURL: полный URL к Milvus REST API, напр. "http://localhost:19121". token: Bearer-токен для Authorization; передайте пустую строку если аутентификация не нужна (DEC-002). @ds-task T1.1: Конструктор MilvusStore (DEC-001, DEC-002)
func (*MilvusStore) Delete ¶
func (s *MilvusStore) Delete(ctx context.Context, id string) error
Delete удаляет чанк по ID из Milvus. Отправляет POST /v2/vectordb/entities/delete с фильтром id == "<id>" (DM-002). @ds-task T2.2: Delete с фильтром id == "<id>" (AC-002)
func (*MilvusStore) DeleteByParentID ¶
func (s *MilvusStore) DeleteByParentID(ctx context.Context, parentID string) error
DeleteByParentID удаляет все чанки с указанным parentId из Milvus. Отправляет POST /v2/vectordb/entities/delete с фильтром parent_id == "<parentID>" (DM-002). @ds-task T2.2: DeleteByParentID с фильтром parent_id == "<parentID>" (AC-006)
func (*MilvusStore) Search ¶
func (s *MilvusStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
Search выполняет поиск похожих чанков по вектору без дополнительного фильтра. @ds-task T2.3: Search через POST /v2/vectordb/entities/search (AC-003, DEC-003)
func (*MilvusStore) SearchHybrid ¶
func (s *MilvusStore) SearchHybrid(ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig) (domain.RetrievalResult, error)
SearchHybrid выполняет гибридный поиск: BM25 (sparse) + semantic (dense). Валидирует HybridConfig, создаёт AnnSearchRequest для text_sparse и text_dense, вызывает hybrid_search() через POST /v2/vectordb/entities/hybrid_search (DEC-002). @sk-task T2.1: Реализовать SearchHybrid с Multi-Vector Search API (AC-001, AC-002, AC-003, AC-005, AC-006, DEC-001, DEC-002)
func (*MilvusStore) SearchHybridWithMetadataFilter ¶
func (s *MilvusStore) SearchHybridWithMetadataFilter(ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig, filter domain.MetadataFilter) (domain.RetrievalResult, error)
SearchHybridWithMetadataFilter выполняет гибридный поиск с фильтрацией по metadata. Добавляет expr фильтр в AnnSearchRequest для text_sparse и text_dense (DEC-003). При пустом Fields делегирует в SearchHybrid без фильтра. @sk-task T3.2: Реализовать SearchHybridWithMetadataFilter с фильтрацией (AC-004, DEC-003)
func (*MilvusStore) SearchHybridWithParentIDFilter ¶
func (s *MilvusStore) SearchHybridWithParentIDFilter(ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig, filter domain.ParentIDFilter) (domain.RetrievalResult, error)
SearchHybridWithParentIDFilter выполняет гибридный поиск с фильтрацией по parentId. Добавляет expr фильтр в AnnSearchRequest для text_sparse и text_dense (DEC-003). При пустом ParentIDs делегирует в SearchHybrid без фильтра. @sk-task T3.1: Реализовать SearchHybridWithParentIDFilter с фильтрацией (AC-004, DEC-003)
func (*MilvusStore) SearchWithFilter ¶
func (s *MilvusStore) SearchWithFilter(ctx context.Context, embedding []float64, topK int, filter domain.ParentIDFilter) (domain.RetrievalResult, error)
SearchWithFilter выполняет поиск с фильтром по parent_id. При непустых ParentIDs добавляет filter: parent_id in ["a","b"] (DM-002). При пустом ParentIDs поле filter опускается. @ds-task T3.1: SearchWithFilter с parent_id in [...] фильтром (AC-004)
func (*MilvusStore) SearchWithMetadataFilter ¶
func (s *MilvusStore) SearchWithMetadataFilter(ctx context.Context, embedding []float64, topK int, filter domain.MetadataFilter) (domain.RetrievalResult, error)
SearchWithMetadataFilter выполняет поиск с фильтром по полям metadata. Строит AND-выражение вида metadata["k"] == "v" && metadata["k2"] == "v2" (DEC-003). При пустом Fields поле filter опускается (DM-002). @ds-task T3.2: SearchWithMetadataFilter с metadata["k"] == "v" && ... (AC-005, DEC-003)
func (*MilvusStore) Upsert ¶
Upsert сохраняет или обновляет чанк в Milvus-коллекции. Сериализует domain.Chunk в тело DM-002 (Upsert body) и отправляет POST /v2/vectordb/entities/upsert. metadata передаётся как JSON-объект — encoding/json сериализует map[string]string напрямую (DEC-003). @ds-task T2.1: Upsert через POST /v2/vectordb/entities/upsert (AC-001, DEC-003)
type PGVectorStore ¶
type PGVectorStore struct {
// contains filtered or unexported fields
}
PGVectorStore реализует domain.VectorStore поверх PostgreSQL+pgvector.
Примечание: создание схемы (таблицы/индекса) выполняется отдельным helper'ом в `pkg/draftrag`.
func NewPGVectorStore ¶
func NewPGVectorStore(db *sql.DB, tableName string, embeddingDimension int) *PGVectorStore
NewPGVectorStore создаёт новый pgvector-backed store.
func NewPGVectorStoreWithRuntimeOptions ¶
func NewPGVectorStoreWithRuntimeOptions( db *sql.DB, tableName string, embeddingDimension int, runtime RuntimeOptions, ) *PGVectorStore
NewPGVectorStoreWithRuntimeOptions создаёт новый pgvector-backed store с runtime options.
func (*PGVectorStore) Delete ¶
func (s *PGVectorStore) Delete(ctx context.Context, id string) error
Delete удаляет чанк по ID из хранилища.
func (*PGVectorStore) DeleteByParentID ¶
func (s *PGVectorStore) DeleteByParentID(ctx context.Context, parentID string) error
DeleteByParentID удаляет все чанки с указанным parent_id.
func (*PGVectorStore) Search ¶
func (s *PGVectorStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
Search выполняет поиск похожих чанков по embedding-вектору с использованием cosine distance в БД.
Score вычисляется как similarity: score = 1 - cosine_distance и находится в диапазоне [-1, 1].
func (*PGVectorStore) SearchBM25 ¶
func (s *PGVectorStore) SearchBM25(ctx context.Context, query string, topK int) (domain.RetrievalResult, error)
SearchBM25 выполняет полнотекстовый поиск через PostgreSQL tsvector/tsquery. Использует GIN-индекс по колонке content_tsv для быстрого поиска. Требует наличия миграции 0003_add_bm25.sql.
func (*PGVectorStore) SearchHybrid ¶
func (s *PGVectorStore) SearchHybrid(ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig) (domain.RetrievalResult, error)
SearchHybrid выполняет гибридный поиск: семантический + BM25. Параллельно выполняет оба поиска и объединяет результаты через RRF или weighted fusion.
func (*PGVectorStore) SearchHybridWithMetadataFilter ¶
func (s *PGVectorStore) SearchHybridWithMetadataFilter(ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig, filter domain.MetadataFilter) (domain.RetrievalResult, error)
SearchHybridWithMetadataFilter выполняет гибридный поиск с фильтрацией по метаданным.
func (*PGVectorStore) SearchHybridWithParentIDFilter ¶
func (s *PGVectorStore) SearchHybridWithParentIDFilter(ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig, filter domain.ParentIDFilter) (domain.RetrievalResult, error)
SearchHybridWithParentIDFilter выполняет гибридный поиск с фильтрацией по ParentID.
func (*PGVectorStore) SearchWithFilter ¶
func (s *PGVectorStore) SearchWithFilter( ctx context.Context, embedding []float64, topK int, filter domain.ParentIDFilter, ) (domain.RetrievalResult, error)
SearchWithFilter выполняет поиск похожих чанков с фильтрацией по ParentID.
func (*PGVectorStore) SearchWithMetadataFilter ¶
func (s *PGVectorStore) SearchWithMetadataFilter( ctx context.Context, embedding []float64, topK int, filter domain.MetadataFilter, ) (domain.RetrievalResult, error)
SearchWithMetadataFilter выполняет поиск похожих чанков с фильтрацией по полям метаданных документа. Пустой filter.Fields (nil или len==0) делегирует в базовый Search без фильтра. SQL-условие: WHERE metadata @> $N::jsonb (оператор JSONB «содержит»; AND по всем полям).
@ds-task T2.1: Реализовать SearchWithMetadataFilter в pgvector (RQ-003, AC-001, AC-002, DEC-002)
type QdrantRuntimeOptions ¶
type QdrantRuntimeOptions struct {
SearchTimeout time.Duration
UpsertTimeout time.Duration
DeleteTimeout time.Duration
MaxTopK int
}
QdrantRuntimeOptions задаёт ограничения и таймауты для QdrantStore.
type QdrantStore ¶
type QdrantStore struct {
// contains filtered or unexported fields
}
QdrantStore реализует domain.VectorStore и domain.VectorStoreWithFilters через Qdrant REST API.
@ds-task T1.1: Создать структуру QdrantStore с HTTP клиентом (RQ-001, RQ-002)
func NewQdrantStore ¶
func NewQdrantStore(baseURL, collection string, dimension int) *QdrantStore
NewQdrantStore создаёт новый Qdrant-backed store.
@ds-task T1.1: Factory-функция для создания клиента (RQ-003)
func (*QdrantStore) Delete ¶
func (s *QdrantStore) Delete(ctx context.Context, id string) error
Delete удаляет чанк по ID из Qdrant.
@ds-task T2.1: Реализовать Delete через HTTP POST /collections/{name}/points/delete (AC-004)
func (*QdrantStore) DeleteByParentID ¶
func (s *QdrantStore) DeleteByParentID(ctx context.Context, parentID string) error
DeleteByParentID удаляет все точки с указанным parent_id через Qdrant filter API.
func (*QdrantStore) Search ¶
func (s *QdrantStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
Search выполняет векторный поиск в Qdrant.
@ds-task T2.1: Реализовать Search через HTTP POST /collections/{name}/points/search (AC-001)
func (*QdrantStore) SearchHybrid ¶
func (s *QdrantStore) SearchHybrid(ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig) (domain.RetrievalResult, error)
SearchHybrid выполняет гибридный поиск: семантический + BM25 через Query API Qdrant. Использует Prefetch для multi-vector retrieval и Fusion.RRF для объединения результатов.
@sk-task T2.1: Реализовать SearchHybrid с Query API Prefetch и Fusion.RRF (AC-001, AC-002, AC-003, AC-005, AC-006, DEC-001, DEC-002)
func (*QdrantStore) SearchHybridWithMetadataFilter ¶
func (s *QdrantStore) SearchHybridWithMetadataFilter(ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig, filter domain.MetadataFilter) (domain.RetrievalResult, error)
SearchHybridWithMetadataFilter выполняет гибридный поиск с фильтрацией по метаданным. Использует Query API с Prefetch для multi-vector retrieval и Fusion.RRF для объединения результатов.
@sk-task T3.1: Реализовать SearchHybridWithMetadataFilter с фильтрацией (AC-004)
func (*QdrantStore) SearchHybridWithParentIDFilter ¶
func (s *QdrantStore) SearchHybridWithParentIDFilter(ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig, filter domain.ParentIDFilter) (domain.RetrievalResult, error)
SearchHybridWithParentIDFilter выполняет гибридный поиск с фильтрацией по ParentID. Использует Query API с Prefetch для multi-vector retrieval и Fusion.RRF для объединения результатов.
@sk-task T3.1: Реализовать SearchHybridWithParentIDFilter с фильтрацией (AC-004)
func (*QdrantStore) SearchWithFilter ¶
func (s *QdrantStore) SearchWithFilter( ctx context.Context, embedding []float64, topK int, filter domain.ParentIDFilter, ) (domain.RetrievalResult, error)
SearchWithFilter выполняет поиск с фильтрацией по ParentID.
@ds-task T2.2: Реализовать SearchWithFilter с маппингом на Qdrant payload filter (AC-002)
func (*QdrantStore) SearchWithMetadataFilter ¶
func (s *QdrantStore) SearchWithMetadataFilter( ctx context.Context, embedding []float64, topK int, filter domain.MetadataFilter, ) (domain.RetrievalResult, error)
SearchWithMetadataFilter выполняет поиск с фильтрацией по метаданным.
@ds-task T2.3: Реализовать SearchWithMetadataFilter с маппингом на Qdrant must filter (AC-003, RQ-010)
type RuntimeOptions ¶
type RuntimeOptions struct {
SearchTimeout time.Duration
UpsertTimeout time.Duration
DeleteTimeout time.Duration
// MaxTopK ограничивает topK в Search*. 0 означает “без лимита”.
MaxTopK int
// MaxParentIDs ограничивает количество ParentIDs в фильтре. 0 означает “без лимита”.
MaxParentIDs int
// MaxContentBytes ограничивает размер chunk.Content в байтах. 0 означает “без лимита”.
MaxContentBytes int
}
RuntimeOptions задаёт ограничения и таймауты выполнения операций pgvector store.
type WeaviateStore ¶
type WeaviateStore struct {
// contains filtered or unexported fields
}
WeaviateStore реализует domain.VectorStore и domain.VectorStoreWithFilters через Weaviate REST API v1 (raw HTTP, без официального SDK). Паттерн аналогичен QdrantStore и ChromaStore.
@ds-task T1.1: Создать структуру WeaviateStore с HTTP клиентом (DEC-001)
func NewWeaviateStore ¶
func NewWeaviateStore(scheme, host, collection, apiKey string) *WeaviateStore
NewWeaviateStore создаёт WeaviateStore с указанными параметрами. scheme: "http" или "https"; host: "localhost:8080" или аналог.
func (*WeaviateStore) Delete ¶
func (s *WeaviateStore) Delete(ctx context.Context, id string) error
Delete удаляет чанк по ID из Weaviate. Идемпотентен: 404 не является ошибкой.
@ds-task T1.3: Delete с идемпотентностью — 204 и 404 возвращают nil (AC-004, RQ-006)
func (*WeaviateStore) Search ¶
func (s *WeaviateStore) Search(ctx context.Context, embedding []float64, topK int) (domain.RetrievalResult, error)
Search выполняет near-vector поиск через Weaviate GraphQL API. Score = certainty (0–1 для cosine similarity).
@ds-task T2.1: Search через GraphQL near-vector запрос (AC-001, RQ-003, DEC-004)
func (*WeaviateStore) SearchHybrid ¶
func (s *WeaviateStore) SearchHybrid( ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig, ) (domain.RetrievalResult, error)
SearchHybrid выполняет гибридный поиск (BM25 + semantic fusion) через Weaviate GraphQL API. Использует bm25 и nearVector с fusion-стратегией (RRF или weighted) в зависимости от HybridConfig.
@sk-task T2.1: Реализация SearchHybrid с GraphQL API (AC-001, AC-002, AC-003, AC-005, AC-006, DEC-001, DEC-002, DEC-003)
func (*WeaviateStore) SearchHybridWithMetadataFilter ¶
func (s *WeaviateStore) SearchHybridWithMetadataFilter( ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig, filter domain.MetadataFilter, ) (domain.RetrievalResult, error)
SearchHybridWithMetadataFilter выполняет гибридный поиск с фильтрацией по метаданным. При пустом filter.Fields делегирует в SearchHybrid без WHERE-клаузы.
@sk-task T4.1: Реализация SearchHybridWithMetadataFilter (AC-004, DEC-003)
func (*WeaviateStore) SearchHybridWithParentIDFilter ¶
func (s *WeaviateStore) SearchHybridWithParentIDFilter( ctx context.Context, query string, embedding []float64, topK int, config domain.HybridConfig, filter domain.ParentIDFilter, ) (domain.RetrievalResult, error)
SearchHybridWithParentIDFilter выполняет гибридный поиск с фильтрацией по ParentID. При пустом ParentIDs делегирует в SearchHybrid без WHERE-клаузы.
@sk-task T4.1: Реализация SearchHybridWithParentIDFilter (AC-004, DEC-003)
func (*WeaviateStore) SearchWithFilter ¶
func (s *WeaviateStore) SearchWithFilter( ctx context.Context, embedding []float64, topK int, filter domain.ParentIDFilter, ) (domain.RetrievalResult, error)
SearchWithFilter выполняет поиск с фильтрацией по parentId. При пустом ParentIDs делегирует в Search без WHERE-клаузы.
@ds-task T2.2: SearchWithFilter с WHERE по parentId (AC-002, RQ-004)
func (*WeaviateStore) SearchWithMetadataFilter ¶
func (s *WeaviateStore) SearchWithMetadataFilter( ctx context.Context, embedding []float64, topK int, filter domain.MetadataFilter, ) (domain.RetrievalResult, error)
SearchWithMetadataFilter выполняет поиск с фильтрацией по meta_* свойствам. При пустом filter.Fields делегирует в Search без WHERE-клаузы.
@ds-task T2.3: SearchWithMetadataFilter с WHERE по meta_* (AC-003, RQ-005)
func (*WeaviateStore) Upsert ¶
Upsert сохраняет или обновляет чанк в Weaviate. Стратегия DEC-005: сначала PUT (replace если существует), при 404 — POST (create). Metadata хранится дважды (DEC-003): JSON-строка chunkMetadata + flat-свойства meta_{key}.
@ds-task T1.2: Upsert с dual-write и PUT→POST стратегией (AC-001, RQ-002, DEC-003, DEC-005)