[{"data":1,"prerenderedAt":616},["ShallowReactive",2],{"blog-milvus-zilliz-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":23,"sources":33,"cover":52,"og":53,"expertise":54,"locales":55,"lang":56,"title":59,"description":60,"coverAlt":61,"metaTitle":62,"takeaways":63,"faq":69,"toc":82,"blocks":107,"others":365},"milvus-zilliz","2026-09-08",10,"rag",[9,10,11,12,13],"Vector search","Hybrid search","BM25 full text","Distributed","RAG",[15,16,17,18,19,20,21,22],"milvus","milvus vs qdrant","zilliz cloud pricing","vector database comparison","milvus hybrid search","apache milvus self-hosting","milvus 3.0","rag vector store",[24,27,30],{"name":25,"url":26},"Milvus","https:\u002F\u002Fmilvus.io",{"name":28,"url":29},"Zilliz Cloud","https:\u002F\u002Fzilliz.com",{"name":31,"url":32},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",[34,37,40,43,46,49],{"title":35,"url":36},"Milvus architecture overview","https:\u002F\u002Fmilvus.io\u002Fdocs\u002Farchitecture_overview.md",{"title":38,"url":39},"Milvus release notes","https:\u002F\u002Fmilvus.io\u002Fdocs\u002Frelease_notes.md",{"title":41,"url":42},"Milvus releases on GitHub","https:\u002F\u002Fgithub.com\u002Fmilvus-io\u002Fmilvus\u002Freleases",{"title":44,"url":45},"Milvus README: features and licence","https:\u002F\u002Fgithub.com\u002Fmilvus-io\u002Fmilvus",{"title":47,"url":48},"Zilliz Cloud pricing","https:\u002F\u002Fzilliz.com\u002Fpricing",{"title":50,"url":51},"Zilliz Cloud list price","https:\u002F\u002Fzilliz.com\u002Fpricing\u002Fpricing-guide","\u002Fimages\u002Fblog\u002Fmilvus-zilliz\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmilvus-zilliz\u002Fog.jpg","ai-engineer",[56,57,58],"en","de","hu","Milvus review: the most complete vector database to operate","Milvus 3.0.2 is the most complete open-source vector database and the heaviest to run. A review of its architecture, hybrid search, costs and where it should not be used.","A cart on four circle wheels carrying a tall stack of five sheets, wedged at the axle.","Milvus review: complete, but heavy to run · Balázs Csorba",[64,65,66,67,68],"Milvus 3.0.2, released 20 September 2026, is current while the 2.6 branch is still maintained in parallel.","Dense, sparse and server-side BM25 vectors live in one collection, and reranking now happens inside the search request.","Self-hosting means running etcd, object storage and a WAL layer; the distributed mode is a Kubernetes deployment.","Zilliz Cloud lists dedicated compute at $0.273 per CU-hour and storage at $0.025 per GB-month, with a 5 GB free tier.","Below tens of millions of vectors the architecture is a cost rather than a capability.",[70,73,76,79],{"q":71,"a":72},"Is Milvus free to use?","The Milvus code is Apache-2.0 and self-hosting costs only infrastructure. Zilliz Cloud charges for the managed service and lists a free tier with 5 GB of storage and 2.5 million vCUs per month.",{"q":74,"a":75},"What is the difference between Milvus and Zilliz Cloud?","Milvus is the open-source project under LF AI & Data; Zilliz Cloud runs the same engine as a managed service with serverless, dedicated and bring-your-own-cloud options. Zilliz is the main contributor to the project.",{"q":77,"a":78},"Can Milvus replace Elasticsearch for full-text search?","Milvus computes BM25 server-side and can hold vectors, sparse vectors and text in one collection, which is enough for hybrid retrieval in a RAG stack. It is not a log analytics platform, so existing Elasticsearch estates are rarely replaced wholesale.",{"q":80,"a":81},"Does Milvus run on a laptop?","Yes, through Milvus Lite, which installs with pip and stores everything in a local file. Lite is for prototyping; standalone and distributed modes need etcd, object storage and a WAL layer.",[83,86,89,92,95,98,101,104],{"id":84,"title":85},"what-it-is","What it is",{"id":87,"title":88},"how-it-works","How it works",{"id":90,"title":91},"getting-started","Getting started",{"id":93,"title":94},"hybrid-search-and-scale","Hybrid search and scale",{"id":96,"title":97},"operating-and-cost","Operating it and paying for it",{"id":99,"title":100},"where-it-shingles","Where it shingles",{"id":102,"title":103},"verdict","Verdict",{"id":105,"title":106},"sources","Sources",[108,112,115,118,121,139,140,143,149,152,153,156,159,162,169,170,173,183,186,192,193,196,208,255,260,261,264,274,320,323,324,327,339,343,344],{"type":109,"content":110},"paragraph",[111],"Milvus is an open-source vector database for similarity search over embeddings, written in Go and C++ and developed under LF AI & Data with Zilliz as its main contributor. The position of this review: at scale it is the most complete engine open source offers, and it is also the most expensive one to operate, so the real question is who runs the cluster, not which index type wins.",{"type":109,"content":113},[114],"It occupies the retrieval layer of a RAG or search stack: the store that holds vectors, metadata and, since 3.0, long text, and that answers top-k queries under filters. It competes with Qdrant and Weaviate as self-hostable peers, with Pinecone as the managed-only service, and with pgvector for teams that would rather not operate another database. Zilliz Cloud, sold by the company that contributes most of the code, is the managed twin of the Apache-licensed project.",{"type":116,"level":117,"id":84,"text":85},"heading",2,{"type":109,"content":119},[120],"Three deployment shapes exist, and they are not equivalent. Milvus Lite is a local file opened by the Python client for experiments; standalone is one node plus its dependencies; the distributed mode is the real product, a Kubernetes deployment with storage and compute disaggregated.",{"type":122,"ordered":123,"items":124},"list",false,[125,127,129,131,133,135,137],[126],"Apache-2.0 licence, an LF AI & Data project with Zilliz as the main contributor; written in Go and C++, with search kernels built on FAISS, HNSW, DiskANN and SCANN.",[128],"Current release 3.0.2, published 20 September 2026, while the 2.6 branch is still maintained in parallel at 2.6.25.",[130],"Index menu: HNSW, IVF, FLAT, SCANN, DiskANN, GPU indexes such as NVIDIA CAGRA, plus quantisation and mmap for memory-bound data.",[132],"Dense vectors, learned sparse vectors and server-side BM25 in one collection, with hybrid search and reranking inside a single request.",[134],"Multi-tenancy at database, collection, partition or partition-key level, behind authentication, TLS and RBAC.",[136],"3.0 adds external collections over Parquet, Lance, Iceberg and Vortex, snapshots, and online schema change with backfill.",[138],"The integrations a retrieval stack expects: LangChain, LlamaIndex, Attu for administration, Prometheus and Grafana for monitoring, plus Spark and Kafka connectors.",{"type":116,"level":117,"id":87,"text":88},{"type":109,"content":141},[142],"Milvus separates the data plane from the control plane in four layers. Stateless proxies accept and reduce requests; exactly one coordinator is active at a time and schedules DDL, routing, query and compaction work; worker nodes execute without holding data of their own; storage is shared. The documentation describes Woodpecker as a zero-disk write-ahead log that writes straight to object storage, which takes local disk management off the write path.",{"type":144,"src":145,"alt":146,"wide":147,"caption":148},"image","\u002Fimages\u002Fblog\u002Fmilvus-zilliz\u002Fdiagram-7.webp","Request flow through a Milvus cluster A request enters at the top through a stateless proxy and spreads over three worker roles above a shared storage band. The proxy balances load and reduces results. Below it, three boxes sit side by side: on the left the coordinator, of which exactly one instance is active and which schedules every task; in the middle the streaming node, which writes to the write-ahead log first and answers queries over growing data; on the right the query node, which loads sealed segments from object storage and runs the vector index. Arrows run from the proxy into all three roles and from all three down into a dashed storage band at the bottom. That band lists etcd for metadata and service discovery, MinIO or S3 for segments and indexes, and Woodpecker, Kafka or Pulsar as the write-ahead log, with the note that the workers hold no data of their own.",true,"Storage is shared and the workers are stateless, so scaling out means adding nodes; the coordinator is the one active component that has to stay healthy.",{"type":109,"content":150},[151],"A write is logged to the WAL first, becomes queryable in the streaming node as growing data, and stays there until compaction seals it; the data node then builds indexes and the query node loads them. A search runs against growing data locally and against sealed segments in parallel, with results reduced at three levels before the proxy returns them. Every hop is a place where consistency level and replica placement change the latency that comes back.",{"type":116,"level":117,"id":90,"text":91},{"type":109,"content":154},[155],"The shortest path is Milvus Lite through the Python client: one pip install and a file name, no server, no etcd, no object store. The same client then points at a server or a Zilliz Cloud endpoint by changing uri and token, which is why prototypes usually move without a rewrite.",{"type":157,"code":158},"code","# pip install -U pymilvus  — Milvus Lite stores everything in one local file\nfrom pymilvus import MilvusClient\n\nclient = MilvusClient(uri=\".\u002Fmilvus_demo.db\")\n\nclient.create_collection(\n    collection_name=\"papers\",\n    dimension=768,        # must match the embedding model\n    auto_id=True,\n    metric_type=\"COSINE\",\n)\n\nclient.insert(collection_name=\"papers\", data=[\n    {\"vector\": v, \"title\": t, \"year\": y} for v, t, y in rows\n])\n\nhits = client.search(\n    collection_name=\"papers\",\n    data=[query_vector],\n    limit=5,\n    filter=\"year >= 2023\",\n    output_fields=[\"title\", \"year\"],\n)\nprint([(h[\"entity\"][\"title\"], round(h[\"distance\"], 3)) for h in hits[0]])",{"type":109,"content":160},[161],"The simplified client hides schema, index parameters and dynamic fields, and that is the right level for a prototype. Production has to make these choices explicitly: metric type, index type, quantisation, mmap, partition keys for tenancy, and a consistency level per request.",{"type":163,"variant":164,"title":165,"body":166},"callout","note","Self-hosted is never one process",[167],[168],"A Milvus deployment needs etcd for metadata, object storage for segments and indexes, and a WAL layer such as Woodpecker, Kafka or Pulsar. A single-node install still carries that surface, and the distributed mode expects Kubernetes.",{"type":116,"level":117,"id":93,"text":94},{"type":109,"content":171},[172],"Milvus keeps dense vectors, learned sparse vectors and BM25 output in the same collection, so one request can run several vector searches and merge them. Reranking moved into the server with 3.0: the Function Chain API composes score transformation, model-based reranking and candidate trimming inside a single search call, and weighted reciprocal-rank fusion arrived in 3.0.1.",{"type":122,"ordered":123,"items":174},[175,177,179,181],[176],"BM25 is computed server-side from raw text, so the application never ships tokens to the database and back.",[178],"Sparse search in 3.0 is rebuilt around SINDI, with Block-Max WAND and Block-Max MaxScore selectable per workload.",[180],"Faceted search on the ANN path returns the top facet values with COUNT and AVG in the same request instead of an over-fetch in the client.",[182],"TEXT fields keep values under 64 KB inline and larger ones in partition-level LOB files, so source text and vectors are read from one store.",{"type":109,"content":184},[185],"The 3.0.0 release notes report two internal numbers: the compressed BM25 index is roughly three times smaller than the 2.6 sparse index at comparable recall, and SINDI reaches up to about ten times the QPS of MaxScore on learned sparse embeddings. Both are the vendor’s own measurements. The more informative figure sits in 3.0.2, where an atomic refcount hotspot that accounted for around 48% of leaf CPU time in search was removed: filtered search had been paying that tax, and most production vector workloads are filtered.",{"type":163,"variant":187,"title":188,"body":189},"warn","Numbers travel with their methodology",[190],[191],"Ask for the harness, the filter selectivity and the recall target before quoting any vector-database benchmark, including the ones above. Recall at 10 ms with a 1% filter and recall at 10 ms with a 90% filter are different products.",{"type":116,"level":117,"id":96,"text":97},{"type":109,"content":194},[195],"Self-hosting Milvus means owning coordinator failover, replica placement, compaction behaviour and index-build capacity. Zilliz Cloud sells the same engine with those decisions taken off the table, and its pricing pages are explicit about what is metered.",{"type":122,"ordered":123,"items":197},[198,200,202,204,206],[199],"Free tier: 5 GB of storage, 2.5 million vCUs per month and up to 5 collections, with community support only.",[201],"Dedicated serving compute lists at $0.273 per CU-hour for performance- and capacity-optimised clusters, and at $0.41 for tiered-storage clusters.",[203],"Storage lists at $0.025 per GB-month for dedicated clusters and is billed hourly; backups are also $0.025 per GB-month.",[205],"Enterprise starts at $197 per month with a 99.95% uptime SLA, audit logs, SSO and VPC peering.",[207],"On-demand compute for lake-scale query and index jobs lists at $0.41 per CU-hour and is billed by the CU-minute.",{"type":209,"head":210,"rows":219},"table",[211,213,215,217],[212],"Plan",[214],"Compute",[216],"Storage",[218],"Positioned for",[220,229,238,247],[221,223,225,227],[222],"Free",[224],"2.5M vCUs per month included",[226],"5 GB",[228],"learning and small prototypes",[230,232,234,236],[231],"Standard, serverless",[233],"usage-based, system-managed scaling",[235],"usage-based",[237],"prototypes and test environments",[239,241,243,245],[240],"Standard, dedicated",[242],"$0.273 per CU-hour",[244],"$0.025 per GB-month",[246],"steady production load",[248,250,252,253],[249],"Enterprise",[251],"from $197 per month",[244],[254],"production with an SLA and SSO",{"type":163,"variant":164,"title":256,"body":257},"Suspending is not free",[258],[259],"The list-price FAQ states that a suspended cluster stops vector-database charges but keeps billing storage until the cluster is deleted, and that data-transfer charges apply to search, query and audit-log forwarding.",{"type":116,"level":117,"id":99,"text":100},{"type":109,"content":262},[263],"The weaknesses come first. Milvus is a distributed system with a coordinator, a WAL, an object store and index workers, and that surface shows up as operational work long before it shows up as capability. Schema changes, index rebuilds and compaction tuning are ordinary tasks with ordinary failure modes; 3.0.2 alone ships fixes for a replica whose channels all landed on one query node and left it unserviceable, and for WAL fencing that stalled writes for 45 to 60 seconds.",{"type":122,"ordered":123,"items":265},[266,268,270,272],[267],"Setup cost: the distributed mode is a Kubernetes deployment with operators, not a docker run.",[269],"Small workloads pay for the architecture: below tens of millions of vectors, a single-binary store is simpler and usually quicker to query.",[271],"Version skew is expensive: 2.6 and 3.0 are maintained in parallel, Storage V3 is off by default, and enabling it removes the rollback path to 2.6.",[273],"The public comparison set is mostly vendor material; independent numbers at a fixed recall target are scarce.",{"type":209,"head":275,"rows":284},[276,278,280,282],[277],"System",[279],"Deployment",[281],"Hybrid retrieval",[283],"Operational burden",[285,293,302,311],[286,287,289,291],[25],[288],"Lite file, Docker, or a Kubernetes cluster",[290],"dense, sparse and BM25 in one collection",[292],"coordinator, WAL and object storage to run",[294,296,298,300],[295],"Qdrant",[297],"a single container or its own cloud",[299],"HNSW plus sparse vectors and payload filters",[301],"one stateful service",[303,305,307,309],[304],"pgvector",[306],"an extension inside an existing Postgres",[308],"vectors next to SQL, no native BM25",[310],"nothing beyond the database",[312,314,316,318],[313],"Pinecone",[315],"managed only, no self-hosting",[317],"dense and sparse vectors on the service",[319],"nothing to run",{"type":109,"content":321},[322],"Read that table as a comparison of attention, not of features. Milvus wins when the workload is large, filtered and multi-tenant, and loses everywhere else, because the coordinator, the WAL and the index workers all need someone on call.",{"type":116,"level":117,"id":102,"text":103},{"type":109,"content":325},[326],"Milvus is the right engine for a team that already runs distributed systems and has a workload that justifies them. It is the wrong first choice for a product still finding its retrieval quality, where iteration speed matters more than tail latency.",{"type":122,"ordered":147,"items":328},[329,331,333,335,337],[330],"Take it when you need hundreds of millions of vectors, strict tenant isolation, or dense and sparse retrieval in one store.",[332],"Take it self-hosted only if someone on the team already operates stateful Kubernetes services; otherwise start on Zilliz Cloud and keep the migration path open.",[334],"Skip it for a RAG prototype under a few million chunks: Lite for the experiment, then a single-binary store for production.",[336],"Skip it if Postgres already holds the data and vector search is a side feature; pgvector keeps one backup story and one set of credentials.",[338],"Whichever way you go, pin the version and read the release notes: 3.0 changed storage-format defaults and the new indexes are opt-in.",{"type":340,"content":341},"quote",[342],"A vector database you cannot operate is not a cheaper database. It is an unpaid operations contract with an index attached.",{"type":116,"level":117,"id":105,"text":106},{"type":122,"ordered":147,"items":345},[346,350,353,356,359,362],[347],{"tag":348,"href":36,"children":349},"a",[35],[351],{"tag":348,"href":39,"children":352},[38],[354],{"tag":348,"href":42,"children":355},[41],[357],{"tag":348,"href":45,"children":358},[44],[360],{"tag":348,"href":48,"children":361},[47],[363],{"tag":348,"href":51,"children":364},[50],[366,440,497,555],{"slug":367,"published":368,"minutes":369,"category":7,"tags":370,"keywords":374,"about":387,"sources":397,"cover":434,"og":435,"expertise":54,"locales":436,"lang":56,"title":437,"description":438,"coverAlt":439},"embedding-model-selection-2026","2026-10-17",9,[371,13,372,9,373],"Embeddings","MTEB","Model selection",[375,376,377,378,379,380,381,382,383,384,385,386],"best embedding model 2026","how to choose an embedding model","embedding model comparison","MTEB leaderboard explained","RTEB benchmark","open source embedding model","multilingual embedding model","voyage-4 vs openai embeddings","Qwen3-Embedding","EmbeddingGemma","embedding model for RAG","switching embedding models re-embed",[388,391,394],{"name":389,"url":390},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":392,"url":393},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":395,"url":396},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[398,401,404,407,410,413,416,419,422,425,428,431],{"title":399,"url":400},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":402,"url":403},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":405,"url":406},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":408,"url":409},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":411,"url":412},"Voyage AI: The Voyage 4 model family, shared embedding space with MoE architecture (Jan 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F01\u002F15\u002Fvoyage-4\u002F",{"title":414,"url":415},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":417,"url":418},"Voyage AI: Pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":420,"url":421},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":423,"url":424},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":426,"url":427},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":429,"url":430},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":432,"url":433},"Google Developers Blog: Introducing EmbeddingGemma (Sep 2025)","https:\u002F\u002Fdevelopers.googleblog.com\u002Fen\u002Fintroducing-embeddinggemma\u002F","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fog.jpg",[56,57,58],"Choosing an embedding model in 2026: leaderboards, costs and a bake-off on your own data","How to pick an embedding model for RAG in 2026: what MTEB and RTEB tell you, hosted vs open weights, prices, dimensions, and a one-week bake-off.","Three columns of stacked blocks, the middle tallest, each measured by a short bar and a wide bracket.",{"slug":441,"published":368,"minutes":6,"category":7,"tags":442,"keywords":446,"about":458,"sources":466,"cover":491,"og":492,"expertise":54,"locales":493,"lang":56,"title":494,"description":495,"coverAlt":496},"contextual-retrieval-late-chunking",[13,443,371,444,445],"Chunking","Contextual retrieval","Late chunking",[447,448,449,450,451,452,453,454,455,456,457],"contextual retrieval","anthropic contextual retrieval","late chunking","contextual chunk embeddings","contextual embeddings rag","contextual bm25","chunk context rag","voyage-context-3","voyage-context-4","late chunking vs contextual retrieval","rag chunking context loss",[459,460,463],{"name":31,"url":32},{"name":461,"url":462},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":464,"url":465},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[467,470,473,476,479,482,485,488],{"title":468,"url":469},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":471,"url":472},"Günther et al.: Late Chunking, Contextual Chunk Embeddings Using Long-Context Embedding Models (2024, rev. 2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2409.04701",{"title":474,"url":475},"Jina AI: Late Chunking in Long-Context Embedding Models (Aug 2024)","https:\u002F\u002Fjina.ai\u002Fnews\u002Flate-chunking-in-long-context-embedding-models\u002F",{"title":477,"url":478},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":480,"url":481},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":483,"url":484},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":486,"url":487},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":489,"url":490},"Qu, Tu and Bao: Is Semantic Chunking Worth the Computational Cost? (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.13070","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fog.jpg",[56,57,58],"Contextual retrieval and late chunking: giving RAG chunks back their context","Chunks lose their document. How contextual retrieval, late chunking and contextualized embedding models fix that, what each costs, and when to skip it.","Four loose square pieces gathered by a wide bracket below, each joined upward to a large sheet.",{"slug":498,"published":368,"minutes":369,"category":7,"tags":499,"keywords":503,"about":516,"sources":524,"cover":549,"og":550,"expertise":54,"locales":551,"lang":56,"title":552,"description":553,"coverAlt":554},"rag-access-control-permissions",[13,500,501,502,9],"Access control","Security","Multi-tenancy",[504,505,506,507,508,509,510,511,512,513,514,515],"rag access control","permission aware rag","document level security rag","rag multi tenancy","vector database access control","pgvector row level security","security trimming azure ai search","openfga rag authorization","qdrant multitenancy","pinecone namespaces multitenancy","owasp llm08 vector and embedding weaknesses","rag data leakage",[517,520,523],{"name":518,"url":519},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":521,"url":522},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":31,"url":32},[525,528,531,534,537,540,543,546],{"title":526,"url":527},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":529,"url":530},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":532,"url":533},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":535,"url":536},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":538,"url":539},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":541,"url":542},"Microsoft Learn: Document-level access control in Azure AI Search","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsearch-document-level-access-overview",{"title":544,"url":545},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":547,"url":548},"Morris et al.: Text Embeddings Reveal (Almost) As Much As Text (EMNLP 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2310.06816","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fog.jpg",[56,57,58],"Access control for RAG: permission-aware retrieval without leaking documents","How RAG assistants leak documents and how to stop it: ACLs on every chunk, pre-filtering, row-level security in pgvector, permission sync and leak tests.","Seven cards in a row, six with a lock badge, one bare card sending an arrow outward.",{"slug":556,"published":368,"minutes":6,"category":7,"tags":557,"keywords":562,"about":574,"sources":582,"cover":609,"og":610,"expertise":611,"locales":612,"lang":56,"title":613,"description":614,"coverAlt":615},"rag-product-catalog-pim-data",[13,558,559,560,561],"PIM","Product data","B2B e-commerce","Metadata filtering",[563,564,565,566,567,568,569,570,571,572,573],"rag product catalog","rag pim data","llm product data","product catalog chatbot","akeneo rag","pimcore ai search","rag structured data","metadata filtering rag","product attributes embeddings","b2b product assistant","etim classification ai",[575,578,579],{"name":576,"url":577},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":31,"url":32},{"name":580,"url":581},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[583,586,589,592,594,597,600,603,606],{"title":584,"url":585},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":587,"url":588},"Akeneo Help Center: What about products with variants?","https:\u002F\u002Fhelp.akeneo.com\u002Fserenity-take-the-power-over-your-products\u002Fserenity-what-about-products-with-variants",{"title":590,"url":591},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":593,"url":581},"ETIM International: Classification",{"title":595,"url":596},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":598,"url":599},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":601,"url":602},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":604,"url":605},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":607,"url":608},"Sui et al.: Table Meets LLM, can large language models understand structured table data? (WSDM 2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.13062","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fog.jpg","b2b-ecommerce-developer",[56,57,58],"RAG over product catalogues: turning PIM data into answers that hold","Product data is structured, so chunking it like PDFs fails. How to serialize PIM attributes, route spec questions to filters and keep answers exact.","A frame of nine squares with tiny symbols, funnelling down to one card.",1792261155910]