[{"data":1,"prerenderedAt":748},["ShallowReactive",2],{"blog-qdrant-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":22,"sources":32,"cover":72,"og":73,"expertise":74,"locales":75,"lang":76,"title":79,"description":80,"coverAlt":81,"metaTitle":82,"takeaways":83,"faq":89,"toc":102,"blocks":127,"others":497},"qdrant","2026-05-26",10,"rag",[9,10,11,12,13],"Vector search","HNSW","Quantisation","Hybrid search","Filtering",[4,15,16,17,18,19,20,21],"qdrant vs pinecone","vector database comparison","hnsw index","filtered vector search","vector quantisation","hybrid search rrf","rag vector store",[23,26,29],{"name":24,"url":25},"Vector database","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVector_database",{"name":27,"url":28},"Nearest neighbor search","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNearest_neighbor_search",{"name":30,"url":31},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",[33,36,39,42,45,48,51,54,57,60,63,66,69],{"title":34,"url":35},"Qdrant documentation","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002F",{"title":37,"url":38},"Qdrant: points","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fmanage-data\u002Fpoints\u002F",{"title":40,"url":41},"Qdrant: collections","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Fcollections\u002F",{"title":43,"url":44},"Qdrant: indexing","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fmanage-data\u002Findexing\u002F",{"title":46,"url":47},"Qdrant: quantisation","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fmanage-data\u002Fquantization\u002F",{"title":49,"url":50},"Qdrant: capacity planning","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fcapacity-planning\u002F",{"title":52,"url":53},"Qdrant: optimise performance","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fops-optimization\u002Foptimize\u002F",{"title":55,"url":56},"Qdrant: hybrid and multi-stage queries","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Fhybrid-queries\u002F",{"title":58,"url":59},"Qdrant: filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":61,"url":62},"Qdrant: security and access control","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fsecurity\u002F",{"title":64,"url":65},"Qdrant pricing","https:\u002F\u002Fqdrant.tech\u002Fpricing\u002F",{"title":67,"url":68},"Qdrant on GitHub","https:\u002F\u002Fgithub.com\u002Fqdrant\u002Fqdrant",{"title":70,"url":71},"Qdrant vector search benchmarks","https:\u002F\u002Fqdrant.tech\u002Fbenchmarks\u002F","\u002Fimages\u002Fblog\u002Fqdrant\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fqdrant\u002Fog.jpg","ai-engineer",[76,77,78],"en","de","hu","Qdrant: a vector database built around filtering","A review of Qdrant: filterable HNSW, four quantisation methods, the memory tiers in v1.19 and the operations nobody publishes any more.","A wide funnel with a row of small squares across its mouth, and three shelves holding fewer.","Qdrant review: the filter-first vector database · Balázs Csorba",[84,85,86,87,88],"The current release is 1.19.2, published 5 October 2026; the memory-tier parameter that drives every sizing decision arrived in 1.19.","Filtering is the reason to pick it: a payload index feeds the HNSW traversal, but payload indexes must exist before ingestion or the graph has to be rebuilt.","TurboQuant compresses up to 32 times, is asymmetric by default and rescores the top-k against full-precision vectors, which is a latency cost on every query.","A self-hosted instance is open to every network interface with no authentication until an API key, TLS and a network bind are configured by hand.","The vendor benchmark page still shows runs from January and June 2024, so its comparative numbers should not carry a purchase decision in 2026.",[90,93,96,99],{"q":91,"a":92},"Is Qdrant free to use in production?","Yes. The server is Apache-2.0 licensed, and self-hosting carries no licence fee, no feature gate and no call-home. The trade is operations: authentication, TLS, backups, shard rebalancing and upgrades all become your problem. Qdrant Cloud is the managed alternative, with a free tier limited to one node, 1GB RAM and 4GB disk.",{"q":94,"a":95},"Qdrant or pgvector?","Below a few million vectors, on a database you already run, pgvector wins on everything except throughput: it is one extension rather than a service. Qdrant earns its keep when a metadata filter sits on every query, because it can feed that filter into the HNSW traversal instead of retrieving candidates and discarding them.",{"q":97,"a":98},"How much does Qdrant Cloud cost?","The vendor publishes no entry price. Its pricing page describes hourly usage billing for vCPU, memory, storage, backup storage and inference tokens and links to a calculator; the free tier is 1GB RAM and 4GB disk, the Standard tier carries a 99.5% uptime SLA and the Premium tier adds SSO, private VPC links and 99.9%. The widely quoted figure of about $25 a month for the smallest paid cluster is a third-party estimate, not a published rate.",{"q":100,"a":101},"What happens when I turn quantisation on?","The compressed vectors are stored next to the originals, so nothing is destroyed and quantisation can be switched off. Rescoring of the top-k against full-precision vectors is on by default for binary quantisation and for TurboQuant at 1, 1.5 and 2 bits, and off for scalar and product quantisation. The production checklist tells you to re-benchmark retrieval quality afterwards, because some embedding models quantise badly.",[103,106,109,112,115,118,121,124],{"id":104,"title":105},"what-it-is","What it is",{"id":107,"title":108},"how-it-works","How a query actually runs",{"id":110,"title":111},"getting-started","Getting started",{"id":113,"title":114},"memory-and-quantisation","Memory and quantisation",{"id":116,"title":117},"self-hosting-and-security","Self-hosting and security",{"id":119,"title":120},"where-it-weakens","Where it weakens",{"id":122,"title":123},"verdict","Verdict",{"id":125,"title":126},"sources","Sources",[128,132,135,138,141,176,177,180,186,189,190,193,195,202,224,225,228,285,301,311,312,315,327,332,333,336,348,415,418,430,431,434,446,450,451],{"type":129,"content":130},"paragraph",[131],"Qdrant is a vector database written in Rust, released under Apache-2.0, and built around one decision most competitors treat as an afterthought: a metadata filter is not something you apply after retrieval, it is something the index is walked with. The result is the most convincing filtered-search story in the open-source world, and a genuinely simple deployment story — one container, one REST and gRPC API, official clients in six languages. The cost of that focus is that dense search has exactly one index implementation, HNSW, and that the managed tier is priced on metering rather than on a published rate. Recommended for filter-heavy retrieval, less so as a general-purpose store.",{"type":129,"content":133},[134],"It sits in the same layer as pgvector, Milvus, Weaviate and Pinecone, but the competing proposition is different. Weaviate sells an integrated AI-native store with built-in hybrid search and modules; Milvus sells horizontal scale to billions; Pinecone sells zero operations. Qdrant sells memory efficiency and filter throughput on a single node, which is a narrower claim and an easier one to hold to.",{"type":136,"level":137,"id":104,"text":105},"heading",2,{"type":129,"content":139},[140],"The data model is small on purpose. A point is a record with a vector and an optional JSON payload. A collection is a named set of points that share a dimensionality and a distance metric. Named vectors let one point hold several vectors with their own size and metric, which is how hybrid search is expressed. Everything else in the product is machinery for finding the nearest point faster without scanning.",{"type":142,"ordered":143,"items":144},"list",false,[145,147,154,156,166,168,174],[146],"Licence Apache-2.0, written in Rust, one repository with roughly 35,000 stars and 7,100 commits.",[148,149,153],"Current release 1.19.2, published 5 October 2026; release 1.19 added the ",{"tag":150,"children":151},"code",[152],"memory"," tiers that control where vectors, indexes and payloads live.",[155],"Distance metrics are dot product, cosine, Euclidean and Manhattan; cosine is implemented as a dot product over normalised vectors, normalised on upload.",[157,158,161,162,165],"Dense search uses HNSW only, with ",{"tag":150,"children":159},[160],"m"," defaulting to 16 and ",{"tag":150,"children":163},[164],"ef_construct"," to 100, both overridable per collection and per named vector.",[167],"Payload index types are keyword, integer, float, bool, geo, datetime, text and uuid, each created before ingestion for the filterable HNSW to use it.",[169,170,173],"Hybrid and multi-stage search arrived in 1.10 through the Query API: ",{"tag":150,"children":171},[172],"prefetch"," sub-requests fused with RRF or DBSF, and prefetches can nest.",[175],"Official clients exist for Python, TypeScript, Rust, Go, Java and .NET over REST on 6333 and gRPC on 6334.",{"type":136,"level":137,"id":107,"text":108},{"type":129,"content":178},[179],"The interesting engineering is in the query planner, and it splits into three cases. A filter so strict that it matches very little data is better served by a full scan than by a graph walk. A filter so weak that it matches most of the collection can use the HNSW graph as it is. Everything in between — which is where tenant-scoped and language-scoped retrieval lives — is the case a plain vector index plus post-filtering handles badly, and the case the filterable HNSW was built for.",{"type":181,"src":182,"alt":183,"wide":184,"caption":185},"image","\u002Fimages\u002Fblog\u002Fqdrant\u002Fdiagram-7.webp","Three paths a filtered query can take through Qdrant A query carrying a vector and a filter enters at the top and splits three ways. Left: the filter is strict and few points match, so the payload index is used for a full scan and the HNSW graph is skipped; the default full scan threshold is 10,000 kilobytes, where one kilobyte is one vector of size 256. Middle: the filter is weak and most points match, so the HNSW graph is used as it is and filtering happens afterwards. Right: the filter is in the middle, the case that matters in production, so the payload index feeds the HNSW walk, and the payload indexes have to exist before the data is ingested or the graph has to be rebuilt. A band below: with quantisation enabled the graph is walked over compressed vectors and the top candidates are rescored against the originals, with rescore and oversampling as per-query settings.",true,"The filter decides the execution path, and the default thresholds are configuration you inherit rather than choices you make.",{"type":129,"content":187},[188],"One operational detail in that middle column causes more downtime than any query tuning: payload indexes only help the HNSW graph if they existed before the data arrived. Add a tenant field to an existing collection and the graph has to be rebuilt to become filter-aware, which on a large collection is measured in hours. Design the payload schema before the first upsert, not after the first incident.",{"type":136,"level":137,"id":110,"text":111},{"type":129,"content":191},[192],"One container on 6333 with no authentication is enough to start, and that is also the single most important thing to fix before it leaves a laptop. The configuration below creates a collection with TurboQuant at one bit, indexes the tenant field before ingesting anything, and runs a filtered query through the Query API:",{"type":150,"code":194},"from qdrant_client import QdrantClient, models\n\nclient = QdrantClient(url=\"http:\u002F\u002Flocalhost:6333\")\n\nclient.create_collection(\n    collection_name=\"chunks\",\n    vectors_config=models.VectorParams(size=1024, distance=models.Distance.COSINE),\n    quantization_config=models.TurboQuantization(\n        turbo=models.TurboQuantQuantizationConfig(bits=models.TurboQuantBitSize.BITS1),\n    ),\n)\n\n# Before ingestion: the HNSW graph can only be filter-aware for\n# fields that already have a payload index.\nclient.create_payload_index(\n    collection_name=\"chunks\",\n    field_name=\"tenant\",\n    field_schema=models.PayloadSchemaType.KEYWORD,\n)\n\nclient.upsert(\n    collection_name=\"chunks\",\n    points=[models.PointStruct(id=1, vector=[0.1] * 1024, payload={\"tenant\": \"acme\"})],\n)\n\nhits = client.query_points(\n    collection_name=\"chunks\",\n    query=[0.1] * 1024,\n    query_filter=models.Filter(\n        must=[models.FieldCondition(key=\"tenant\", match=models.MatchValue(value=\"acme\"))],\n    ),\n    limit=10,\n    search_params=models.SearchParams(quantization=models.QuantizationSearchParams(oversampling=2.0)),\n).points\n",{"type":129,"content":196},[197,198,201],"Two things in that snippet are worth expanding. Quantisation is a collection setting applied at indexation time, and the compressed vectors live beside the originals, so the originals are still there for a rescore. The ",{"tag":150,"children":199},[200],"oversampling"," parameter asks the quantised index for twice the candidates before rescoring, which is the knob to turn when compressed search starts dropping results you know should be there.",{"type":203,"variant":204,"title":205,"body":206},"callout","note","Read the capacity page before the first node",[207],[208,209,212,213,216,217,219,220,223],"The vendor's own sizing rules are short enough to be worth memorising. Vectors and the HNSW indexes are ",{"tag":150,"children":210},[211],"cached"," by default, meaning pre-loaded but evictable; set them to ",{"tag":150,"children":214},[215],"cold"," to live on disk. Payloads default to ",{"tag":150,"children":218},[215],", payload indexes and quantised vectors to ",{"tag":150,"children":221},[222],"pinned",". Budget roughly twice the size of the indexed fields for payload indexes, and add 1.5 for payload storage overhead.",{"type":136,"level":137,"id":113,"text":114},{"type":129,"content":226},[227],"Quantisation is the single highest-leverage change before production, and Qdrant now offers four methods with genuinely different trade-offs rather than one binary switch. The production checklist calls it one of the three things worth doing first, alongside sizing RAM honestly and indexing the fields you filter on.",{"type":229,"head":230,"rows":241},"table",[231,233,235,237,239],[232],"Method",[234],"Compression",[236],"Rescores by default",[238],"Where it fits",[240],"Cost",[242,253,264,275],[243,245,247,249,251],[244],"TurboQuant",[246],"Up to 32x, 4 bits down to 1 bit",[248],"Yes, at 1, 1.5 and 2 bits",[250],"The default choice since 1.18",[252],"Asymmetric, so queries stay full precision",[254,256,258,260,262],[255],"Scalar",[257],"4x, float32 to int8",[259],"No",[261],"Lowest-risk compression",[263],"Needs a quantile to bound outliers",[265,267,269,271,273],[266],"Binary",[268],"Up to 32x, 1 to 2 bits per component",[270],"Yes",[272],"High-dimensional centred embeddings",[274],"Fails on distributions it was not built for",[276,278,280,281,283],[277],"Product",[279],"Up to 64x, 256 centroids per chunk",[259],[282],"Memory is the only goal",[284],"Largest accuracy loss of the four",{"type":129,"content":286},[287,288,290,291,293,294,297,298,300],"Beyond the method itself, 1.19 added a memory-tier parameter for the quantised copy, which is what makes quantisation usable as a RAM reduction rather than only a speed trick. Put the originals in the ",{"tag":150,"children":289},[215]," tier and the quantised vectors in ",{"tag":150,"children":292},[222],", and search touches disk only while rescoring the top candidates. The ",{"tag":150,"children":295},[296],"turbo4"," datatype, which stores each dimension on disk as four bits instead of a float, shrinks the disk side further at the price of recall. Inline storage in the HNSW index, available since 1.16, cuts I\u002FO further but only pays off with vectors and index in the ",{"tag":150,"children":299},[215]," tier and quantisation enabled; keep it to at most four bits per dimension or the index balloons.",{"type":203,"variant":302,"title":303,"body":304},"warn","Quantisation is a recall decision, not a storage decision",[305],[306,307,310],"The documentation is explicit that some embedding models cannot be quantised efficiently, and the production checklist asks you to re-benchmark retrieval quality after enabling it rather than assuming. Treat recall as an acceptance criterion with a number attached, and keep a way to turn quantisation off at query time: the ",{"tag":150,"children":308},[309],"ignore"," search parameter does exactly that without a collection rebuild.",{"type":136,"level":137,"id":116,"text":117},{"type":129,"content":313},[314],"The security documentation opens by saying that self-hosted open-source deployments are not secure by default and are not production-ready, and that a default instance is open to all network interfaces with no authentication configured. That is a more honest security page than most database vendors publish, and it comes with a specific checklist.",{"type":142,"ordered":143,"items":316},[317,319,321,323,325],[318],"Three API key types: admin, read-only for query-only services, and granular keys scoped per collection with read or write rights.",[320],"TLS for traffic in both directions, plus a network bind to a private interface; bind to 127.0.0.1 while developing locally.",[322],"Audit logging of API operations to a file, for forensics and compliance evidence rather than for insight.",[324],"Everything works the same on Qdrant Cloud, where these controls are on by default — which is the real argument for the managed tier.",[326],"Community, Standard and Premium support tiers differ in response time (four hours for a full outage on the free tier, one hour on Standard) rather than in features.",{"type":203,"variant":204,"title":328,"body":329},"Migration is a stated non-issue, mostly",[330],[331],"The company says a migration tool and documentation exist for moving from a self-hosted deployment to Qdrant Cloud, and that migrating the other way is just a matter of running the container. That is true of the vectors. It is not true of everything you built around the engine: the Query API's fusion strategies and your HNSW tuning are the parts worth writing down before you move.",{"type":136,"level":137,"id":119,"text":120},{"type":129,"content":334},[335],"Five weaknesses are worth stating plainly, because they are the ones that decide against it.",{"type":142,"ordered":143,"items":337},[338,340,342,344,346],[339],"One dense index. The documentation says Qdrant only uses HNSW for dense vectors. There is no IVF, no disk-based graph and no GPU index, so a corpus that will not fit a machine's RAM needs an architecture change rather than a setting.",[341],"Payload indexes are built before ingestion or not at all. Correctness of the optimisation depends on a migration you forget to schedule.",[343],"Horizontal scaling is real but not free. Sharding, replication factors and shard-key-aware reads add configuration that has to be right, and the capacity page asks you to decide all of it before provisioning.",[345],"The managed tier publishes no rate. Billing is hourly on vCPU, memory, storage, backups and inference tokens, with a calculator instead of a price list, and serverless is still listed as coming soon.",[347],"The public benchmark is stale. The vendor's comparison page is labelled January and June 2024, so its conclusion that Qdrant leads on throughput and latency describes software from two years ago.",{"type":229,"head":349,"rows":360},[350,352,354,356,358],[351],"Engine",[353],"Licence",[355],"Dense index options",[357],"Where filtering happens",[359],"Operational shape",[361,372,383,393,404],[362,364,366,368,370],[363],"Qdrant",[365],"Apache-2.0",[367],"HNSW only, filterable",[369],"Payload index feeds the graph walk",[371],"One container, or managed cloud",[373,375,377,379,381],[374],"pgvector",[376],"PostgreSQL Licence",[378],"HNSW, IVFFlat",[380],"SQL WHERE on the same table",[382],"An extension in a database you already run",[384,386,387,389,391],[385],"Milvus",[365],[388],"HNSW, IVF, DiskANN, SCANN, GPU",[390],"Scalar index inside the engine",[392],"Distributed services, heavy to operate",[394,396,398,400,402],[395],"Weaviate",[397],"BSD-3-Clause",[399],"HNSW, flat, dynamic",[401],"Inverted index, native BM25 hybrid",[403],"Single binary, optional cluster",[405,407,409,411,413],[406],"Pinecone",[408],"Proprietary, managed only",[410],"Proprietary serverless index",[412],"Server-side filtering on the service",[414],"Nothing to run, per-query billing",{"type":129,"content":416},[417],"The one-line version: pgvector if you already run Postgres and the corpus fits; Weaviate if native hybrid search is the requirement; Milvus when the numbers genuinely reach hundreds of millions; Pinecone when nobody will operate anything. Qdrant is the pick in between, where a metadata filter on every query matters more than the ceiling does.",{"type":203,"variant":302,"title":419,"body":420},"Measure your own recall",[421],[422,423,426,427,429],"Every comparison in this space is a vendor running its own harness, which is why the useful number is the one you produce: the fraction of true nearest neighbours returned at your ",{"tag":150,"children":424},[425],"ef"," and your ",{"tag":150,"children":428},[160],", with and without quantisation. The search API accepts an exact mode for precisely this comparison, and running it once against your own embeddings costs an afternoon and settles the argument.",{"type":136,"level":137,"id":122,"text":123},{"type":129,"content":432},[433],"Qdrant is the best open-source answer to filtered vector search, and its weaknesses are all in areas where it is not trying to win. If your queries carry a tenant, a language or a date — and in production they nearly always do — the filterable HNSW is a real architectural advantage rather than a feature checkbox. Choose it knowing that dense search has one index, that the payload schema has to be right on day one, and that you will be running the security checklist yourself.",{"type":142,"ordered":184,"items":435},[436,438,440,442,444],[437],"Choose it when a metadata filter is on essentially every query and the corpus fits on one machine with headroom.",[439],"Choose it when you want no licence conversation: Apache-2.0, no feature gate, no call-home, no usage reporting.",[441],"Choose it when your team can own an API key, a TLS certificate, a backup schedule and a version upgrade.",[443],"Do not choose it when the corpus will exceed RAM and you have no appetite for a migration to a distributed engine.",[445],"Do not choose it on a benchmark. Run the exact-mode recall check on your own embeddings, then decide.",{"type":447,"content":448},"quote",[449],"Self-hosted open-source deployments are not secure by default and are not production-ready. By default, all self-deployed Qdrant instances are open to all network interfaces and have no authentication configured.",{"type":136,"level":137,"id":125,"text":126},{"type":142,"ordered":184,"items":452},[453,457,460,463,467,471,474,477,480,484,487,491,494],[454],{"tag":455,"href":35,"children":456},"a",[34],[458],{"tag":455,"href":38,"children":459},[37],[461],{"tag":455,"href":41,"children":462},[40],[464],{"tag":455,"href":44,"children":465},[466],"Qdrant: indexing, payload indexes and the filterable HNSW",[468],{"tag":455,"href":47,"children":469},[470],"Qdrant: quantisation methods and memory tiers",[472],{"tag":455,"href":50,"children":473},[49],[475],{"tag":455,"href":53,"children":476},[52],[478],{"tag":455,"href":56,"children":479},[55],[481],{"tag":455,"href":59,"children":482},[483],"Qdrant: filtering clauses",[485],{"tag":455,"href":62,"children":486},[61],[488],{"tag":455,"href":65,"children":489},[490],"Qdrant pricing: free, standard and premium tiers",[492],{"tag":455,"href":68,"children":493},[67],[495],{"tag":455,"href":71,"children":496},[70],[498,573,630,688],{"slug":499,"published":500,"minutes":501,"category":7,"tags":502,"keywords":507,"about":520,"sources":530,"cover":567,"og":568,"expertise":74,"locales":569,"lang":76,"title":570,"description":571,"coverAlt":572},"embedding-model-selection-2026","2026-10-17",9,[503,504,505,9,506],"Embeddings","RAG","MTEB","Model selection",[508,509,510,511,512,513,514,515,516,517,518,519],"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",[521,524,527],{"name":522,"url":523},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":525,"url":526},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":528,"url":529},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[531,534,537,540,543,546,549,552,555,558,561,564],{"title":532,"url":533},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":535,"url":536},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":538,"url":539},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":541,"url":542},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":544,"url":545},"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":547,"url":548},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":550,"url":551},"Voyage AI: Pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":553,"url":554},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":556,"url":557},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":559,"url":560},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":562,"url":563},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":565,"url":566},"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",[76,77,78],"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":574,"published":500,"minutes":6,"category":7,"tags":575,"keywords":579,"about":591,"sources":599,"cover":624,"og":625,"expertise":74,"locales":626,"lang":76,"title":627,"description":628,"coverAlt":629},"contextual-retrieval-late-chunking",[504,576,503,577,578],"Chunking","Contextual retrieval","Late chunking",[580,581,582,583,584,585,586,587,588,589,590],"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",[592,593,596],{"name":30,"url":31},{"name":594,"url":595},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":597,"url":598},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[600,603,606,609,612,615,618,621],{"title":601,"url":602},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":604,"url":605},"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":607,"url":608},"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":610,"url":611},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":613,"url":614},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":616,"url":617},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":619,"url":620},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":622,"url":623},"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",[76,77,78],"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":631,"published":500,"minutes":501,"category":7,"tags":632,"keywords":636,"about":649,"sources":657,"cover":682,"og":683,"expertise":74,"locales":684,"lang":76,"title":685,"description":686,"coverAlt":687},"rag-access-control-permissions",[504,633,634,635,9],"Access control","Security","Multi-tenancy",[637,638,639,640,641,642,643,644,645,646,647,648],"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",[650,653,656],{"name":651,"url":652},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":654,"url":655},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":30,"url":31},[658,661,664,667,670,673,676,679],{"title":659,"url":660},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":662,"url":663},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":665,"url":666},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":668,"url":669},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":671,"url":672},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":674,"url":675},"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":677,"url":678},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":680,"url":681},"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",[76,77,78],"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":689,"published":500,"minutes":6,"category":7,"tags":690,"keywords":695,"about":707,"sources":715,"cover":741,"og":742,"expertise":743,"locales":744,"lang":76,"title":745,"description":746,"coverAlt":747},"rag-product-catalog-pim-data",[504,691,692,693,694],"PIM","Product data","B2B e-commerce","Metadata filtering",[696,697,698,699,700,701,702,703,704,705,706],"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",[708,711,712],{"name":709,"url":710},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":30,"url":31},{"name":713,"url":714},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[716,719,722,725,727,730,733,736,738],{"title":717,"url":718},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":720,"url":721},"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":723,"url":724},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":726,"url":714},"ETIM International: Classification",{"title":728,"url":729},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":731,"url":732},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":734,"url":735},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":737,"url":59},"Qdrant documentation: Filtering",{"title":739,"url":740},"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",[76,77,78],"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.",1792261156597]