vectorstore

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2026 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Overview

Package vectorstore содержит реализации VectorStore для разных backend'ов.

Index

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)

func (*ChromaStore) Upsert

func (s *ChromaStore) Upsert(ctx context.Context, chunk domain.Chunk) error

Upsert сохраняет или обновляет чанк в ChromaDB. Маппит Chunk на ChromaDB record с плоским metadata.

@ds-task T2.1: Реализовать Upsert через HTTP POST /api/v1/collections/{name}/upsert (AC-001, AC-005, RQ-003, RQ-008, DEC-002)

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)

func (*InMemoryStore) Upsert

func (s *InMemoryStore) Upsert(ctx context.Context, chunk domain.Chunk) error

Upsert сохраняет или обновляет чанк в хранилище.

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

func (s *MilvusStore) Upsert(ctx context.Context, chunk domain.Chunk) error

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)

func (*PGVectorStore) Upsert

func (s *PGVectorStore) Upsert(ctx context.Context, chunk domain.Chunk) error

Upsert сохраняет или обновляет чанк в хранилище.

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)

func (*QdrantStore) Upsert

func (s *QdrantStore) Upsert(ctx context.Context, chunk domain.Chunk) error

Upsert сохраняет или обновляет чанк в Qdrant. Маппит Chunk на Qdrant point с плоским payload.

@ds-task T2.1: Реализовать Upsert через HTTP PUT /collections/{name}/points (AC-004, DEC-002, DEC-003)

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

func (s *WeaviateStore) Upsert(ctx context.Context, chunk domain.Chunk) error

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)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL