@mastra/mcp-docs-server 0.0.0-commonjs-20250414101718
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.docs/organized/changelogs/%40mastra%2Fastra.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fchroma.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fclickhouse.md +161 -0
- package/.docs/organized/changelogs/%40mastra%2Fclient-js.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare.md +110 -0
- package/.docs/organized/changelogs/%40mastra%2Fcore.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloudflare.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-netlify.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-vercel.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fdeployer.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fevals.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Ffirecrawl.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fgithub.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Floggers.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fmcp-docs-server.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fmcp-registry-registry.md +26 -0
- package/.docs/organized/changelogs/%40mastra%2Fmcp.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fmem0.md +196 -0
- package/.docs/organized/changelogs/%40mastra%2Fmemory.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fpg.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fpinecone.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fplayground-ui.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fqdrant.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Frag.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fragie.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fserver.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-azure.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-deepgram.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-elevenlabs.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-google.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-ibm.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-murf.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-openai.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-playai.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-replicate.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-speechify.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fturbopuffer.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fupstash.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvectorize.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-azure.md +250 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-cloudflare.md +250 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-deepgram.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-elevenlabs.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-murf.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai-realtime.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-playai.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-sarvam.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-speechify.md +302 -0
- package/.docs/organized/changelogs/create-mastra.md +302 -0
- package/.docs/organized/changelogs/mastra.md +302 -0
- package/.docs/organized/code-examples/agent-network.md +282 -0
- package/.docs/organized/code-examples/agent.md +388 -0
- package/.docs/organized/code-examples/ai-sdk-useChat.md +378 -0
- package/.docs/organized/code-examples/assistant-ui.md +37 -0
- package/.docs/organized/code-examples/bird-checker-with-express.md +235 -0
- package/.docs/organized/code-examples/bird-checker-with-nextjs-and-eval.md +360 -0
- package/.docs/organized/code-examples/bird-checker-with-nextjs.md +250 -0
- package/.docs/organized/code-examples/client-side-tools.md +69 -0
- package/.docs/organized/code-examples/crypto-chatbot.md +96 -0
- package/.docs/organized/code-examples/fireworks-r1.md +159 -0
- package/.docs/organized/code-examples/mcp-registry-registry.md +63 -0
- package/.docs/organized/code-examples/memory-todo-agent.md +164 -0
- package/.docs/organized/code-examples/memory-with-context.md +167 -0
- package/.docs/organized/code-examples/memory-with-libsql.md +204 -0
- package/.docs/organized/code-examples/memory-with-mem0.md +121 -0
- package/.docs/organized/code-examples/memory-with-pg.md +224 -0
- package/.docs/organized/code-examples/memory-with-upstash.md +268 -0
- package/.docs/organized/code-examples/quick-start.md +129 -0
- package/.docs/organized/code-examples/stock-price-tool.md +124 -0
- package/.docs/organized/code-examples/weather-agent.md +353 -0
- package/.docs/organized/code-examples/workflow-ai-recruiter.md +159 -0
- package/.docs/organized/code-examples/workflow-with-inline-steps.md +111 -0
- package/.docs/organized/code-examples/workflow-with-memory.md +393 -0
- package/.docs/organized/code-examples/workflow-with-separate-steps.md +131 -0
- package/.docs/raw/agents/adding-tools.mdx +317 -0
- package/.docs/raw/agents/adding-voice.mdx +175 -0
- package/.docs/raw/agents/agent-memory.mdx +62 -0
- package/.docs/raw/agents/mcp-guide.mdx +215 -0
- package/.docs/raw/agents/overview.mdx +303 -0
- package/.docs/raw/community/discord.mdx +12 -0
- package/.docs/raw/community/licensing.mdx +63 -0
- package/.docs/raw/deployment/client.mdx +120 -0
- package/.docs/raw/deployment/deployment.mdx +127 -0
- package/.docs/raw/deployment/server.mdx +282 -0
- package/.docs/raw/evals/custom-eval.mdx +22 -0
- package/.docs/raw/evals/overview.mdx +95 -0
- package/.docs/raw/evals/running-in-ci.mdx +81 -0
- package/.docs/raw/evals/textual-evals.mdx +54 -0
- package/.docs/raw/faq/index.mdx +63 -0
- package/.docs/raw/frameworks/ai-sdk.mdx +296 -0
- package/.docs/raw/frameworks/next-js.mdx +238 -0
- package/.docs/raw/getting-started/installation.mdx +442 -0
- package/.docs/raw/getting-started/mcp-docs-server.mdx +141 -0
- package/.docs/raw/getting-started/project-structure.mdx +80 -0
- package/.docs/raw/index.mdx +22 -0
- package/.docs/raw/integrations/index.mdx +213 -0
- package/.docs/raw/local-dev/add-to-existing-project.mdx +48 -0
- package/.docs/raw/local-dev/creating-a-new-project.mdx +54 -0
- package/.docs/raw/local-dev/mastra-dev.mdx +108 -0
- package/.docs/raw/memory/memory-processors.mdx +131 -0
- package/.docs/raw/memory/overview.mdx +119 -0
- package/.docs/raw/memory/semantic-recall.mdx +122 -0
- package/.docs/raw/memory/working-memory.mdx +87 -0
- package/.docs/raw/observability/logging.mdx +38 -0
- package/.docs/raw/observability/nextjs-tracing.mdx +108 -0
- package/.docs/raw/observability/tracing.mdx +115 -0
- package/.docs/raw/rag/chunking-and-embedding.mdx +156 -0
- package/.docs/raw/rag/overview.mdx +85 -0
- package/.docs/raw/rag/retrieval.mdx +365 -0
- package/.docs/raw/rag/vector-databases.mdx +340 -0
- package/.docs/raw/reference/agents/createTool.mdx +229 -0
- package/.docs/raw/reference/agents/generate.mdx +334 -0
- package/.docs/raw/reference/agents/getAgent.mdx +54 -0
- package/.docs/raw/reference/agents/stream.mdx +369 -0
- package/.docs/raw/reference/cli/build.mdx +55 -0
- package/.docs/raw/reference/cli/dev.mdx +134 -0
- package/.docs/raw/reference/cli/init.mdx +43 -0
- package/.docs/raw/reference/client-js/agents.mdx +107 -0
- package/.docs/raw/reference/client-js/error-handling.mdx +38 -0
- package/.docs/raw/reference/client-js/logs.mdx +24 -0
- package/.docs/raw/reference/client-js/memory.mdx +97 -0
- package/.docs/raw/reference/client-js/telemetry.mdx +20 -0
- package/.docs/raw/reference/client-js/tools.mdx +44 -0
- package/.docs/raw/reference/client-js/vectors.mdx +79 -0
- package/.docs/raw/reference/client-js/workflows.mdx +136 -0
- package/.docs/raw/reference/core/mastra-class.mdx +232 -0
- package/.docs/raw/reference/deployer/cloudflare.mdx +207 -0
- package/.docs/raw/reference/deployer/deployer.mdx +159 -0
- package/.docs/raw/reference/deployer/netlify.mdx +109 -0
- package/.docs/raw/reference/deployer/vercel.mdx +117 -0
- package/.docs/raw/reference/evals/answer-relevancy.mdx +186 -0
- package/.docs/raw/reference/evals/bias.mdx +186 -0
- package/.docs/raw/reference/evals/completeness.mdx +174 -0
- package/.docs/raw/reference/evals/content-similarity.mdx +183 -0
- package/.docs/raw/reference/evals/context-position.mdx +190 -0
- package/.docs/raw/reference/evals/context-precision.mdx +189 -0
- package/.docs/raw/reference/evals/context-relevancy.mdx +188 -0
- package/.docs/raw/reference/evals/contextual-recall.mdx +191 -0
- package/.docs/raw/reference/evals/faithfulness.mdx +193 -0
- package/.docs/raw/reference/evals/hallucination.mdx +219 -0
- package/.docs/raw/reference/evals/keyword-coverage.mdx +176 -0
- package/.docs/raw/reference/evals/prompt-alignment.mdx +238 -0
- package/.docs/raw/reference/evals/summarization.mdx +205 -0
- package/.docs/raw/reference/evals/textual-difference.mdx +161 -0
- package/.docs/raw/reference/evals/tone-consistency.mdx +181 -0
- package/.docs/raw/reference/evals/toxicity.mdx +165 -0
- package/.docs/raw/reference/index.mdx +12 -0
- package/.docs/raw/reference/memory/Memory.mdx +212 -0
- package/.docs/raw/reference/memory/createThread.mdx +95 -0
- package/.docs/raw/reference/memory/getThreadById.mdx +46 -0
- package/.docs/raw/reference/memory/getThreadsByResourceId.mdx +48 -0
- package/.docs/raw/reference/memory/query.mdx +167 -0
- package/.docs/raw/reference/networks/agent-network.mdx +159 -0
- package/.docs/raw/reference/observability/create-logger.mdx +106 -0
- package/.docs/raw/reference/observability/logger.mdx +55 -0
- package/.docs/raw/reference/observability/otel-config.mdx +120 -0
- package/.docs/raw/reference/observability/providers/braintrust.mdx +40 -0
- package/.docs/raw/reference/observability/providers/dash0.mdx +40 -0
- package/.docs/raw/reference/observability/providers/index.mdx +16 -0
- package/.docs/raw/reference/observability/providers/laminar.mdx +41 -0
- package/.docs/raw/reference/observability/providers/langfuse.mdx +51 -0
- package/.docs/raw/reference/observability/providers/langsmith.mdx +48 -0
- package/.docs/raw/reference/observability/providers/langwatch.mdx +45 -0
- package/.docs/raw/reference/observability/providers/new-relic.mdx +40 -0
- package/.docs/raw/reference/observability/providers/signoz.mdx +40 -0
- package/.docs/raw/reference/observability/providers/traceloop.mdx +40 -0
- package/.docs/raw/reference/rag/astra.mdx +258 -0
- package/.docs/raw/reference/rag/chroma.mdx +281 -0
- package/.docs/raw/reference/rag/chunk.mdx +235 -0
- package/.docs/raw/reference/rag/document.mdx +127 -0
- package/.docs/raw/reference/rag/embeddings.mdx +160 -0
- package/.docs/raw/reference/rag/extract-params.mdx +226 -0
- package/.docs/raw/reference/rag/graph-rag.mdx +182 -0
- package/.docs/raw/reference/rag/libsql.mdx +357 -0
- package/.docs/raw/reference/rag/metadata-filters.mdx +298 -0
- package/.docs/raw/reference/rag/pg.mdx +477 -0
- package/.docs/raw/reference/rag/pinecone.mdx +281 -0
- package/.docs/raw/reference/rag/qdrant.mdx +236 -0
- package/.docs/raw/reference/rag/rerank.mdx +212 -0
- package/.docs/raw/reference/rag/turbopuffer.mdx +249 -0
- package/.docs/raw/reference/rag/upstash.mdx +247 -0
- package/.docs/raw/reference/rag/vectorize.mdx +298 -0
- package/.docs/raw/reference/storage/libsql.mdx +74 -0
- package/.docs/raw/reference/storage/postgresql.mdx +48 -0
- package/.docs/raw/reference/storage/upstash.mdx +86 -0
- package/.docs/raw/reference/tools/client.mdx +207 -0
- package/.docs/raw/reference/tools/document-chunker-tool.mdx +141 -0
- package/.docs/raw/reference/tools/graph-rag-tool.mdx +154 -0
- package/.docs/raw/reference/tools/mcp-configuration.mdx +206 -0
- package/.docs/raw/reference/tools/vector-query-tool.mdx +212 -0
- package/.docs/raw/reference/voice/composite-voice.mdx +140 -0
- package/.docs/raw/reference/voice/deepgram.mdx +164 -0
- package/.docs/raw/reference/voice/elevenlabs.mdx +216 -0
- package/.docs/raw/reference/voice/google.mdx +198 -0
- package/.docs/raw/reference/voice/mastra-voice.mdx +394 -0
- package/.docs/raw/reference/voice/murf.mdx +251 -0
- package/.docs/raw/reference/voice/openai-realtime.mdx +431 -0
- package/.docs/raw/reference/voice/openai.mdx +168 -0
- package/.docs/raw/reference/voice/playai.mdx +159 -0
- package/.docs/raw/reference/voice/sarvam.mdx +260 -0
- package/.docs/raw/reference/voice/speechify.mdx +145 -0
- package/.docs/raw/reference/voice/voice.answer.mdx +122 -0
- package/.docs/raw/reference/voice/voice.connect.mdx +124 -0
- package/.docs/raw/reference/voice/voice.listen.mdx +195 -0
- package/.docs/raw/reference/voice/voice.on.mdx +189 -0
- package/.docs/raw/reference/voice/voice.send.mdx +118 -0
- package/.docs/raw/reference/voice/voice.speak.mdx +203 -0
- package/.docs/raw/reference/workflows/after.mdx +88 -0
- package/.docs/raw/reference/workflows/afterEvent.mdx +76 -0
- package/.docs/raw/reference/workflows/commit.mdx +37 -0
- package/.docs/raw/reference/workflows/createRun.mdx +77 -0
- package/.docs/raw/reference/workflows/else.mdx +72 -0
- package/.docs/raw/reference/workflows/events.mdx +305 -0
- package/.docs/raw/reference/workflows/execute.mdx +110 -0
- package/.docs/raw/reference/workflows/if.mdx +107 -0
- package/.docs/raw/reference/workflows/resume.mdx +155 -0
- package/.docs/raw/reference/workflows/resumeWithEvent.mdx +133 -0
- package/.docs/raw/reference/workflows/snapshots.mdx +207 -0
- package/.docs/raw/reference/workflows/start.mdx +84 -0
- package/.docs/raw/reference/workflows/step-class.mdx +100 -0
- package/.docs/raw/reference/workflows/step-condition.mdx +134 -0
- package/.docs/raw/reference/workflows/step-function.mdx +92 -0
- package/.docs/raw/reference/workflows/step-options.mdx +69 -0
- package/.docs/raw/reference/workflows/step-retries.mdx +203 -0
- package/.docs/raw/reference/workflows/suspend.mdx +70 -0
- package/.docs/raw/reference/workflows/then.mdx +74 -0
- package/.docs/raw/reference/workflows/until.mdx +165 -0
- package/.docs/raw/reference/workflows/watch.mdx +118 -0
- package/.docs/raw/reference/workflows/while.mdx +168 -0
- package/.docs/raw/reference/workflows/workflow.mdx +233 -0
- package/.docs/raw/storage/overview.mdx +378 -0
- package/.docs/raw/voice/overview.mdx +135 -0
- package/.docs/raw/voice/speech-to-text.mdx +45 -0
- package/.docs/raw/voice/text-to-speech.mdx +52 -0
- package/.docs/raw/voice/voice-to-voice.mdx +310 -0
- package/.docs/raw/workflows/control-flow.mdx +778 -0
- package/.docs/raw/workflows/dynamic-workflows.mdx +236 -0
- package/.docs/raw/workflows/error-handling.mdx +183 -0
- package/.docs/raw/workflows/nested-workflows.mdx +352 -0
- package/.docs/raw/workflows/overview.mdx +203 -0
- package/.docs/raw/workflows/steps.mdx +108 -0
- package/.docs/raw/workflows/suspend-and-resume.mdx +404 -0
- package/.docs/raw/workflows/variables.mdx +313 -0
- package/LICENSE.md +46 -0
- package/README.md +129 -0
- package/dist/_tsup-dts-rollup.d.ts +149 -0
- package/dist/chunk-QWYMT5LP.js +194 -0
- package/dist/prepare-docs/prepare.d.ts +1 -0
- package/dist/prepare-docs/prepare.js +1 -0
- package/dist/stdio.d.ts +1 -0
- package/dist/stdio.js +518 -0
- package/package.json +60 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Default Vector Store | Vector Databases | RAG | Mastra Docs"
|
|
3
|
+
description: Documentation for the LibSQLVector class in Mastra, which provides vector search using LibSQL with vector extensions.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# LibSQLVector Store
|
|
7
|
+
|
|
8
|
+
The LibSQL storage implementation provides a SQLite-compatible vector search [LibSQL](https://github.com/tursodatabase/libsql), a fork of SQLite with vector extensions, and [Turso](https://turso.tech/) with vector extensions, offering a lightweight and efficient vector database solution.
|
|
9
|
+
It's part of the `@mastra/core` package and offers efficient vector similarity search with metadata filtering.
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
Default vector store is included in the core package:
|
|
14
|
+
|
|
15
|
+
```bash copy
|
|
16
|
+
npm install @mastra/core
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```typescript copy showLineNumbers
|
|
22
|
+
import { LibSQLVector } from "@mastra/core/vector/libsql";
|
|
23
|
+
|
|
24
|
+
// Create a new vector store instance
|
|
25
|
+
const store = new LibSQLVector({
|
|
26
|
+
connectionUrl: process.env.DATABASE_URL,
|
|
27
|
+
// Optional: for Turso cloud databases
|
|
28
|
+
authToken: process.env.DATABASE_AUTH_TOKEN,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Create an index
|
|
32
|
+
await store.createIndex({
|
|
33
|
+
indexName: "myCollection",
|
|
34
|
+
dimension: 1536,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Add vectors with metadata
|
|
38
|
+
const vectors = [[0.1, 0.2, ...], [0.3, 0.4, ...]];
|
|
39
|
+
const metadata = [
|
|
40
|
+
{ text: "first document", category: "A" },
|
|
41
|
+
{ text: "second document", category: "B" }
|
|
42
|
+
];
|
|
43
|
+
await store.upsert({
|
|
44
|
+
indexName: "myCollection",
|
|
45
|
+
vectors,
|
|
46
|
+
metadata,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Query similar vectors
|
|
50
|
+
const queryVector = [0.1, 0.2, ...];
|
|
51
|
+
const results = await store.query({
|
|
52
|
+
indexName: "myCollection",
|
|
53
|
+
queryVector,
|
|
54
|
+
topK: 10, // top K results
|
|
55
|
+
filter: { category: "A" } // optional metadata filter
|
|
56
|
+
});
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Constructor Options
|
|
60
|
+
|
|
61
|
+
<PropertiesTable
|
|
62
|
+
content={[
|
|
63
|
+
{
|
|
64
|
+
name: "connectionUrl",
|
|
65
|
+
type: "string",
|
|
66
|
+
description:
|
|
67
|
+
"LibSQL database URL. Use ':memory:' for in-memory database, 'file:dbname.db' for local file, or a LibSQL-compatible connection string like 'libsql://your-database.turso.io'.",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: "authToken",
|
|
71
|
+
type: "string",
|
|
72
|
+
isOptional: true,
|
|
73
|
+
description: "Authentication token for Turso cloud databases",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: "syncUrl",
|
|
77
|
+
type: "string",
|
|
78
|
+
isOptional: true,
|
|
79
|
+
description: "URL for database replication (Turso specific)",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "syncInterval",
|
|
83
|
+
type: "number",
|
|
84
|
+
isOptional: true,
|
|
85
|
+
description:
|
|
86
|
+
"Interval in milliseconds for database sync (Turso specific)",
|
|
87
|
+
},
|
|
88
|
+
]}
|
|
89
|
+
/>
|
|
90
|
+
|
|
91
|
+
## Methods
|
|
92
|
+
|
|
93
|
+
### createIndex()
|
|
94
|
+
|
|
95
|
+
Creates a new vector collection. The index name must start with a letter or underscore and can only contain letters, numbers, and underscores. The dimension must be a positive integer.
|
|
96
|
+
|
|
97
|
+
<PropertiesTable
|
|
98
|
+
content={[
|
|
99
|
+
{
|
|
100
|
+
name: "indexName",
|
|
101
|
+
type: "string",
|
|
102
|
+
description: "Name of the index to create",
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "dimension",
|
|
106
|
+
type: "number",
|
|
107
|
+
description: "Vector dimension size (must match your embedding model)",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: "metric",
|
|
111
|
+
type: "'cosine' | 'euclidean' | 'dotproduct'",
|
|
112
|
+
isOptional: true,
|
|
113
|
+
defaultValue: "cosine",
|
|
114
|
+
description:
|
|
115
|
+
"Distance metric for similarity search. Note: Currently only cosine similarity is supported by LibSQL.",
|
|
116
|
+
},
|
|
117
|
+
]}
|
|
118
|
+
/>
|
|
119
|
+
|
|
120
|
+
### upsert()
|
|
121
|
+
|
|
122
|
+
Adds or updates vectors and their metadata in the index. Uses a transaction to ensure all vectors are inserted atomically - if any insert fails, the entire operation is rolled back.
|
|
123
|
+
|
|
124
|
+
<PropertiesTable
|
|
125
|
+
content={[
|
|
126
|
+
{
|
|
127
|
+
name: "indexName",
|
|
128
|
+
type: "string",
|
|
129
|
+
description: "Name of the index to insert into",
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: "vectors",
|
|
133
|
+
type: "number[][]",
|
|
134
|
+
description: "Array of embedding vectors",
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: "metadata",
|
|
138
|
+
type: "Record<string, any>[]",
|
|
139
|
+
isOptional: true,
|
|
140
|
+
description: "Metadata for each vector",
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: "ids",
|
|
144
|
+
type: "string[]",
|
|
145
|
+
isOptional: true,
|
|
146
|
+
description: "Optional vector IDs (auto-generated if not provided)",
|
|
147
|
+
},
|
|
148
|
+
]}
|
|
149
|
+
/>
|
|
150
|
+
|
|
151
|
+
### query()
|
|
152
|
+
|
|
153
|
+
Searches for similar vectors with optional metadata filtering.
|
|
154
|
+
|
|
155
|
+
<PropertiesTable
|
|
156
|
+
content={[
|
|
157
|
+
{
|
|
158
|
+
name: "indexName",
|
|
159
|
+
type: "string",
|
|
160
|
+
description: "Name of the index to search in",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: "queryVector",
|
|
164
|
+
type: "number[]",
|
|
165
|
+
description: "Query vector to find similar vectors for",
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: "topK",
|
|
169
|
+
type: "number",
|
|
170
|
+
isOptional: true,
|
|
171
|
+
defaultValue: "10",
|
|
172
|
+
description: "Number of results to return",
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: "filter",
|
|
176
|
+
type: "Filter",
|
|
177
|
+
isOptional: true,
|
|
178
|
+
description: "Metadata filters",
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: "includeVector",
|
|
182
|
+
type: "boolean",
|
|
183
|
+
isOptional: true,
|
|
184
|
+
defaultValue: "false",
|
|
185
|
+
description: "Whether to include vector data in results",
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: "minScore",
|
|
189
|
+
type: "number",
|
|
190
|
+
isOptional: true,
|
|
191
|
+
defaultValue: "0",
|
|
192
|
+
description: "Minimum similarity score threshold",
|
|
193
|
+
},
|
|
194
|
+
]}
|
|
195
|
+
/>
|
|
196
|
+
|
|
197
|
+
### describeIndex()
|
|
198
|
+
|
|
199
|
+
Gets information about an index.
|
|
200
|
+
|
|
201
|
+
<PropertiesTable
|
|
202
|
+
content={[
|
|
203
|
+
{
|
|
204
|
+
name: "indexName",
|
|
205
|
+
type: "string",
|
|
206
|
+
description: "Name of the index to describe",
|
|
207
|
+
},
|
|
208
|
+
]}
|
|
209
|
+
/>
|
|
210
|
+
|
|
211
|
+
Returns:
|
|
212
|
+
|
|
213
|
+
```typescript copy
|
|
214
|
+
interface IndexStats {
|
|
215
|
+
dimension: number;
|
|
216
|
+
count: number;
|
|
217
|
+
metric: "cosine" | "euclidean" | "dotproduct";
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### deleteIndex()
|
|
222
|
+
|
|
223
|
+
Deletes an index and all its data.
|
|
224
|
+
|
|
225
|
+
<PropertiesTable
|
|
226
|
+
content={[
|
|
227
|
+
{
|
|
228
|
+
name: "indexName",
|
|
229
|
+
type: "string",
|
|
230
|
+
description: "Name of the index to delete",
|
|
231
|
+
},
|
|
232
|
+
]}
|
|
233
|
+
/>
|
|
234
|
+
|
|
235
|
+
### listIndexes()
|
|
236
|
+
|
|
237
|
+
Lists all vector indexes in the database.
|
|
238
|
+
|
|
239
|
+
Returns: `Promise<string[]>`
|
|
240
|
+
|
|
241
|
+
### truncateIndex()
|
|
242
|
+
|
|
243
|
+
Removes all vectors from an index while keeping the index structure.
|
|
244
|
+
|
|
245
|
+
<PropertiesTable
|
|
246
|
+
content={[
|
|
247
|
+
{
|
|
248
|
+
name: "indexName",
|
|
249
|
+
type: "string",
|
|
250
|
+
description: "Name of the index to truncate",
|
|
251
|
+
},
|
|
252
|
+
]}
|
|
253
|
+
/>
|
|
254
|
+
|
|
255
|
+
### updateIndexById()
|
|
256
|
+
|
|
257
|
+
Updates a specific vector entry by its ID with new vector data and/or metadata.
|
|
258
|
+
|
|
259
|
+
<PropertiesTable
|
|
260
|
+
content={[
|
|
261
|
+
{
|
|
262
|
+
name: "indexName",
|
|
263
|
+
type: "string",
|
|
264
|
+
description: "Name of the index containing the vector",
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: "id",
|
|
268
|
+
type: "string",
|
|
269
|
+
description: "ID of the vector entry to update",
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
name: "update",
|
|
273
|
+
type: "object",
|
|
274
|
+
description: "Update data containing vector and/or metadata",
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
name: "update.vector",
|
|
278
|
+
type: "number[]",
|
|
279
|
+
isOptional: true,
|
|
280
|
+
description: "New vector data to update",
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
name: "update.metadata",
|
|
284
|
+
type: "Record<string, any>",
|
|
285
|
+
isOptional: true,
|
|
286
|
+
description: "New metadata to update",
|
|
287
|
+
},
|
|
288
|
+
]}
|
|
289
|
+
/>
|
|
290
|
+
|
|
291
|
+
### deleteIndexById()
|
|
292
|
+
|
|
293
|
+
Deletes a specific vector entry from an index by its ID.
|
|
294
|
+
|
|
295
|
+
<PropertiesTable
|
|
296
|
+
content={[
|
|
297
|
+
{
|
|
298
|
+
name: "indexName",
|
|
299
|
+
type: "string",
|
|
300
|
+
description: "Name of the index containing the vector",
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
name: "id",
|
|
304
|
+
type: "string",
|
|
305
|
+
description: "ID of the vector entry to delete",
|
|
306
|
+
},
|
|
307
|
+
]}
|
|
308
|
+
/>
|
|
309
|
+
|
|
310
|
+
## Response Types
|
|
311
|
+
|
|
312
|
+
Query results are returned in this format:
|
|
313
|
+
|
|
314
|
+
```typescript copy
|
|
315
|
+
interface QueryResult {
|
|
316
|
+
id: string;
|
|
317
|
+
score: number;
|
|
318
|
+
metadata: Record<string, any>;
|
|
319
|
+
vector?: number[]; // Only included if includeVector is true
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## Error Handling
|
|
324
|
+
|
|
325
|
+
The store throws specific errors for different failure cases:
|
|
326
|
+
|
|
327
|
+
```typescript copy
|
|
328
|
+
try {
|
|
329
|
+
await store.query({
|
|
330
|
+
indexName: "my-collection",
|
|
331
|
+
queryVector: queryVector,
|
|
332
|
+
});
|
|
333
|
+
} catch (error) {
|
|
334
|
+
// Handle specific error cases
|
|
335
|
+
if (error.message.includes("Invalid index name format")) {
|
|
336
|
+
console.error(
|
|
337
|
+
"Index name must start with a letter/underscore and contain only alphanumeric characters",
|
|
338
|
+
);
|
|
339
|
+
} else if (error.message.includes("Table not found")) {
|
|
340
|
+
console.error("The specified index does not exist");
|
|
341
|
+
} else {
|
|
342
|
+
console.error("Vector store error:", error.message);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Common error cases include:
|
|
348
|
+
|
|
349
|
+
- Invalid index name format
|
|
350
|
+
- Invalid vector dimensions
|
|
351
|
+
- Table/index not found
|
|
352
|
+
- Database connection issues
|
|
353
|
+
- Transaction failures during upsert
|
|
354
|
+
|
|
355
|
+
## Related
|
|
356
|
+
|
|
357
|
+
- [Metadata Filters](./metadata-filters)
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Reference: Metadata Filters | Metadata Filtering | RAG | Mastra Docs"
|
|
3
|
+
description: Documentation for metadata filtering capabilities in Mastra, which allow for precise querying of vector search results across different vector stores.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Metadata Filters
|
|
7
|
+
|
|
8
|
+
Mastra provides a unified metadata filtering syntax across all vector stores, based on MongoDB/Sift query syntax. Each vector store translates these filters into their native format.
|
|
9
|
+
|
|
10
|
+
## Basic Example
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
import { PgVector } from '@mastra/pg';
|
|
14
|
+
|
|
15
|
+
const store = new PgVector(connectionString);
|
|
16
|
+
|
|
17
|
+
const results = await store.query({
|
|
18
|
+
indexName: "my_index",
|
|
19
|
+
queryVector: queryVector,
|
|
20
|
+
topK: 10,
|
|
21
|
+
filter: {
|
|
22
|
+
category: "electronics", // Simple equality
|
|
23
|
+
price: { $gt: 100 }, // Numeric comparison
|
|
24
|
+
tags: { $in: ["sale", "new"] } // Array membership
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Supported Operators
|
|
30
|
+
|
|
31
|
+
<OperatorsTable
|
|
32
|
+
title="Basic Comparison"
|
|
33
|
+
operators={[
|
|
34
|
+
{
|
|
35
|
+
name: "$eq",
|
|
36
|
+
description: "Matches values equal to specified value",
|
|
37
|
+
example: "{ age: { $eq: 25 } }",
|
|
38
|
+
supportedBy: ["All"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: "$ne",
|
|
42
|
+
description: "Matches values not equal",
|
|
43
|
+
example: "{ status: { $ne: 'inactive' } }",
|
|
44
|
+
supportedBy: ["All"]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: "$gt",
|
|
48
|
+
description: "Greater than",
|
|
49
|
+
example: "{ price: { $gt: 100 } }",
|
|
50
|
+
supportedBy: ["All"]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "$gte",
|
|
54
|
+
description: "Greater than or equal",
|
|
55
|
+
example: "{ rating: { $gte: 4.5 } }",
|
|
56
|
+
supportedBy: ["All"]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: "$lt",
|
|
60
|
+
description: "Less than",
|
|
61
|
+
example: "{ stock: { $lt: 20 } }",
|
|
62
|
+
supportedBy: ["All"]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: "$lte",
|
|
66
|
+
description: "Less than or equal",
|
|
67
|
+
example: "{ priority: { $lte: 3 } }",
|
|
68
|
+
supportedBy: ["All"]
|
|
69
|
+
}
|
|
70
|
+
]}
|
|
71
|
+
/>
|
|
72
|
+
|
|
73
|
+
<OperatorsTable
|
|
74
|
+
title="Array Operators"
|
|
75
|
+
operators={[
|
|
76
|
+
{
|
|
77
|
+
name: "$in",
|
|
78
|
+
description: "Matches any value in array",
|
|
79
|
+
example: '{ category: { $in: ["A", "B"] } }',
|
|
80
|
+
supportedBy: ["All"]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: "$nin",
|
|
84
|
+
description: "Matches none of the values",
|
|
85
|
+
example: '{ status: { $nin: ["deleted", "archived"] } }',
|
|
86
|
+
supportedBy: ["All"]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: "$all",
|
|
90
|
+
description: "Matches arrays containing all elements",
|
|
91
|
+
example: '{ tags: { $all: ["urgent", "high"] } }',
|
|
92
|
+
supportedBy: ["Astra", "Pinecone", "Upstash"]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: "$elemMatch",
|
|
96
|
+
description: "Matches array elements meeting criteria",
|
|
97
|
+
example: '{ scores: { $elemMatch: { $gt: 80 } } }',
|
|
98
|
+
supportedBy: ["LibSQL", "PgVector"]
|
|
99
|
+
}
|
|
100
|
+
]}
|
|
101
|
+
/>
|
|
102
|
+
|
|
103
|
+
<OperatorsTable
|
|
104
|
+
title="Logical Operators"
|
|
105
|
+
operators={[
|
|
106
|
+
{
|
|
107
|
+
name: "$and",
|
|
108
|
+
description: "Logical AND",
|
|
109
|
+
example: '{ $and: [{ price: { $gt: 100 } }, { stock: { $gt: 0 } }] }',
|
|
110
|
+
supportedBy: ["All except Vectorize"]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: "$or",
|
|
114
|
+
description: "Logical OR",
|
|
115
|
+
example: '{ $or: [{ status: "active" }, { priority: "high" }] }',
|
|
116
|
+
supportedBy: ["All except Vectorize"]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: "$not",
|
|
120
|
+
description: "Logical NOT",
|
|
121
|
+
example: '{ price: { $not: { $lt: 100 } } }',
|
|
122
|
+
supportedBy: ["Astra", "Qdrant", "Upstash", "PgVector", "LibSQL"]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: "$nor",
|
|
126
|
+
description: "Logical NOR",
|
|
127
|
+
example: '{ $nor: [{ status: "deleted" }, { archived: true }] }',
|
|
128
|
+
supportedBy: ["Qdrant", "Upstash", "PgVector", "LibSQL"]
|
|
129
|
+
}
|
|
130
|
+
]}
|
|
131
|
+
/>
|
|
132
|
+
|
|
133
|
+
<OperatorsTable
|
|
134
|
+
title="Element Operators"
|
|
135
|
+
operators={[
|
|
136
|
+
{
|
|
137
|
+
name: "$exists",
|
|
138
|
+
description: "Matches documents with field",
|
|
139
|
+
example: '{ rating: { $exists: true } }',
|
|
140
|
+
supportedBy: ["All except Vectorize, Chroma"]
|
|
141
|
+
}
|
|
142
|
+
]}
|
|
143
|
+
/>
|
|
144
|
+
|
|
145
|
+
<OperatorsTable
|
|
146
|
+
title="Custom Operators"
|
|
147
|
+
operators={[
|
|
148
|
+
{
|
|
149
|
+
name: "$contains",
|
|
150
|
+
description: "Text contains substring",
|
|
151
|
+
example: '{ description: { $contains: "sale" } }',
|
|
152
|
+
supportedBy: ["Upstash", "LibSQL", "PgVector"]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: "$regex",
|
|
156
|
+
description: "Regular expression match",
|
|
157
|
+
example: '{ name: { $regex: "^test" } }',
|
|
158
|
+
supportedBy: ["Qdrant", "PgVector", "Upstash"]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: "$size",
|
|
162
|
+
description: "Array length check",
|
|
163
|
+
example: '{ tags: { $size: { $gt: 2 } } }',
|
|
164
|
+
supportedBy: ["Astra", "LibSQL", "PgVector"]
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: "$geo",
|
|
168
|
+
description: "Geospatial query",
|
|
169
|
+
example: '{ location: { $geo: { type: "radius", ... } } }',
|
|
170
|
+
supportedBy: ["Qdrant"]
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: "$datetime",
|
|
174
|
+
description: "Datetime range query",
|
|
175
|
+
example: '{ created: { $datetime: { range: { gt: "2024-01-01" } } } }',
|
|
176
|
+
supportedBy: ["Qdrant"]
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: "$hasId",
|
|
180
|
+
description: "Vector ID existence check",
|
|
181
|
+
example: '{ $hasId: ["id1", "id2"] }',
|
|
182
|
+
supportedBy: ["Qdrant"]
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
name: "$hasVector",
|
|
186
|
+
description: "Vector existence check",
|
|
187
|
+
example: '{ $hasVector: true }',
|
|
188
|
+
supportedBy: ["Qdrant"]
|
|
189
|
+
}
|
|
190
|
+
]}
|
|
191
|
+
/>
|
|
192
|
+
|
|
193
|
+
## Common Rules and Restrictions
|
|
194
|
+
|
|
195
|
+
1. Field names cannot:
|
|
196
|
+
- Contain dots (.) unless referring to nested fields
|
|
197
|
+
- Start with $ or contain null characters
|
|
198
|
+
- Be empty strings
|
|
199
|
+
|
|
200
|
+
2. Values must be:
|
|
201
|
+
- Valid JSON types (string, number, boolean, object, array)
|
|
202
|
+
- Not undefined
|
|
203
|
+
- Properly typed for the operator (e.g., numbers for numeric comparisons)
|
|
204
|
+
|
|
205
|
+
3. Logical operators:
|
|
206
|
+
- Must contain valid conditions
|
|
207
|
+
- Cannot be empty
|
|
208
|
+
- Must be properly nested
|
|
209
|
+
- Can only be used at top level or nested within other logical operators
|
|
210
|
+
- Cannot be used at field level or nested inside a field
|
|
211
|
+
- Cannot be used inside an operator
|
|
212
|
+
- Valid: `{ "$and": [{ "field": { "$gt": 100 } }] }`
|
|
213
|
+
- Valid: `{ "$or": [{ "$and": [{ "field": { "$gt": 100 } }] }] }`
|
|
214
|
+
- Invalid: `{ "field": { "$and": [{ "$gt": 100 }] } }`
|
|
215
|
+
- Invalid: `{ "field": { "$gt": { "$and": [{...}] } } }`
|
|
216
|
+
|
|
217
|
+
4. $not operator:
|
|
218
|
+
- Must be an object
|
|
219
|
+
- Cannot be empty
|
|
220
|
+
- Can be used at field level or top level
|
|
221
|
+
- Valid: `{ "$not": { "field": "value" } }`
|
|
222
|
+
- Valid: `{ "field": { "$not": { "$eq": "value" } } }`
|
|
223
|
+
|
|
224
|
+
5. Operator nesting:
|
|
225
|
+
- Logical operators must contain field conditions, not direct operators
|
|
226
|
+
- Valid: `{ "$and": [{ "field": { "$gt": 100 } }] }`
|
|
227
|
+
- Invalid: `{ "$and": [{ "$gt": 100 }] }`
|
|
228
|
+
|
|
229
|
+
## Store-Specific Notes
|
|
230
|
+
|
|
231
|
+
### Astra
|
|
232
|
+
- Nested field queries are supported using dot notation
|
|
233
|
+
- Array fields must be explicitly defined as arrays in the metadata
|
|
234
|
+
- Metadata values are case-sensitive
|
|
235
|
+
|
|
236
|
+
### ChromaDB
|
|
237
|
+
- Where filters only return results where the filtered field exists in metadata
|
|
238
|
+
- Empty metadata fields are not included in filter results
|
|
239
|
+
- Metadata fields must be present for negative matches (e.g., $ne won't match documents missing the field)
|
|
240
|
+
|
|
241
|
+
### Cloudflare Vectorize
|
|
242
|
+
- Requires explicit metadata indexing before filtering can be used
|
|
243
|
+
- Use `createMetadataIndex()` to index fields you want to filter on
|
|
244
|
+
- Up to 10 metadata indexes per Vectorize index
|
|
245
|
+
- String values are indexed up to first 64 bytes (truncated on UTF-8 boundaries)
|
|
246
|
+
- Number values use float64 precision
|
|
247
|
+
- Filter JSON must be under 2048 bytes
|
|
248
|
+
- Field names cannot contain dots (.) or start with $
|
|
249
|
+
- Field names limited to 512 characters
|
|
250
|
+
- Vectors must be re-upserted after creating new metadata indexes to be included in filtered results
|
|
251
|
+
- Range queries may have reduced accuracy with very large datasets (~10M+ vectors)
|
|
252
|
+
|
|
253
|
+
### LibSQL
|
|
254
|
+
- Supports nested object queries with dot notation
|
|
255
|
+
- Array fields are validated to ensure they contain valid JSON arrays
|
|
256
|
+
- Numeric comparisons maintain proper type handling
|
|
257
|
+
- Empty arrays in conditions are handled gracefully
|
|
258
|
+
- Metadata is stored in a JSONB column for efficient querying
|
|
259
|
+
|
|
260
|
+
### PgVector
|
|
261
|
+
- Full support for PostgreSQL's native JSON querying capabilities
|
|
262
|
+
- Efficient handling of array operations using native array functions
|
|
263
|
+
- Proper type handling for numbers, strings, and booleans
|
|
264
|
+
- Nested field queries use PostgreSQL's JSON path syntax internally
|
|
265
|
+
- Metadata is stored in a JSONB column for efficient indexing
|
|
266
|
+
|
|
267
|
+
### Pinecone
|
|
268
|
+
- Metadata field names are limited to 512 characters
|
|
269
|
+
- Numeric values must be within the range of ±1e38
|
|
270
|
+
- Arrays in metadata are limited to 64KB total size
|
|
271
|
+
- Nested objects are flattened with dot notation
|
|
272
|
+
- Metadata updates replace the entire metadata object
|
|
273
|
+
|
|
274
|
+
### Qdrant
|
|
275
|
+
- Supports advanced filtering with nested conditions
|
|
276
|
+
- Payload (metadata) fields must be explicitly indexed for filtering
|
|
277
|
+
- Efficient handling of geo-spatial queries
|
|
278
|
+
- Special handling for null and empty values
|
|
279
|
+
- Vector-specific filtering capabilities
|
|
280
|
+
- Datetime values must be in RFC 3339 format
|
|
281
|
+
|
|
282
|
+
### Upstash
|
|
283
|
+
- 512-character limit for metadata field keys
|
|
284
|
+
- Query size is limited (avoid large IN clauses)
|
|
285
|
+
- No support for null/undefined values in filters
|
|
286
|
+
- Translates to SQL-like syntax internally
|
|
287
|
+
- Case-sensitive string comparisons
|
|
288
|
+
- Metadata updates are atomic
|
|
289
|
+
|
|
290
|
+
## Related
|
|
291
|
+
- [Astra](./astra)
|
|
292
|
+
- [Chroma](./chroma)
|
|
293
|
+
- [Cloudflare Vectorize](./vectorize)
|
|
294
|
+
- [LibSQL](./libsql)
|
|
295
|
+
- [PgStore](./pg)
|
|
296
|
+
- [Pinecone](./pinecone)
|
|
297
|
+
- [Qdrant](./qdrant)
|
|
298
|
+
- [Upstash](./upstash)
|