[{"data":1,"prerenderedAt":695},["ShallowReactive",2],{"blog-unstructured-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":23,"sources":27,"cover":46,"og":47,"expertise":48,"locales":49,"lang":50,"title":53,"description":54,"coverAlt":55,"metaTitle":56,"takeaways":57,"faq":63,"toc":76,"blocks":101,"others":440},"unstructured","2026-05-21",11,"rag",[9,10,11,12,13],"Document parsing","RAG ingestion","PDF extraction","Chunking","ETL",[15,16,17,18,19,20,21,22],"unstructured.io","unstructured library python","unstructured vs llamaparse","document parsing for rag","pdf partitioning hi_res","unstructured pricing","chunk by title","document ingestion pipeline",[24],{"name":25,"url":26},"Unstructured","https:\u002F\u002Funstructured.io\u002F",[28,31,34,37,40,43],{"title":29,"url":30},"Unstructured documentation: pipelines overview","https:\u002F\u002Fdocs.unstructured.io\u002Fwelcome",{"title":32,"url":33},"Unstructured documentation: transform quickstart","https:\u002F\u002Fdocs.unstructured.io\u002Fapi-reference\u002Ftransform\u002Fquickstart\u002Foverview",{"title":35,"url":36},"Unstructured pricing: free pages, rate per page and plans","https:\u002F\u002Funstructured.io\u002Fpricing",{"title":38,"url":39},"Unstructured benchmarks: 1,000+ enterprise pages against other parsers","https:\u002F\u002Funstructured.io\u002Fbenchmarks",{"title":41,"url":42},"Unstructured library on GitHub","https:\u002F\u002Fgithub.com\u002FUnstructured-IO\u002Funstructured",{"title":44,"url":45},"Unstructured partition endpoint container","https:\u002F\u002Fgithub.com\u002FUnstructured-IO\u002Funstructured-api","\u002Fimages\u002Fblog\u002Funstructured\u002Fcover.webp","\u002Fimages\u002Fblog\u002Funstructured\u002Fog.jpg","ai-engineer",[50,51,52],"en","de","hu","Unstructured review: parsing documents for RAG","Unstructured turns PDFs, Word files and images into typed elements for RAG: an Apache-2.0 library plus a platform at $0.015 per page after 10,000 free pages.","Three differently shaped sheets entering a machine frame, equal small squares leaving along a rail.","Unstructured review: parsing, chunking, price · Balázs Csorba",[58,59,60,61,62],"Unstructured is an Apache-2.0 Python library that turns PDFs, Word files and images into typed elements such as titles, tables and lists, with a hosted platform that adds connectors and the VLM strategy.","The platform charges $0.015 per page after the first 10,000 free pages, while the library runs locally with no page count.","In the vendor's own benchmark over 1,000 enterprise pages the open-source build reaches 0.426 table-cell content accuracy against 0.820 for the best platform pipeline.","Table structure and reading order fail without an error, so a sample of the corpus should be read before the embedding model is chosen.","Telemetry can be switched off with DO_NOT_TRACK and SCARF_NO_ANALYTICS; with the library the documents themselves never leave the machine.",[64,67,70,73],{"q":65,"a":66},"Is the unstructured library free to use?","Yes. The library is Apache-2.0, installed from PyPI, and runs without an account or a page limit. What is paid is the hosted platform: 10,000 free pages to start and $0.015 per page after that.",{"q":68,"a":69},"What is the difference between the library and the platform?","The library partitions, chunks and stages data inside your own process. The platform adds managed jobs, more than 40 maintained connectors, change detection so only new or modified files run, the VLM partitioning strategy and the compliance certifications. In the vendor's benchmark that shows up as 0.426 against 0.820 table-cell content accuracy.",{"q":71,"a":72},"Which partitioning strategy should be used?","auto is the default and picks per file, fast reads the embedded text and is the cheapest, hi_res runs layout detection and OCR and is the choice for scans and tables, and ocr_only handles pages with no text layer. The VLM strategy exists only in the platform.",{"q":74,"a":75},"How much does a large document set cost to process?","Beyond the first 10,000 free pages, $0.015 per page means a 500-page scan costs $7.50 on the pay-as-you-go plan. Self-hosting the library costs compute only, which is why large archives are usually parsed locally and only difficult documents go to the platform.",[77,80,83,86,89,92,95,98],{"id":78,"title":79},"what-it-is","What it is",{"id":81,"title":82},"how-it-works","How it works",{"id":84,"title":85},"getting-started","Getting started",{"id":87,"title":88},"performance","Performance and cost",{"id":90,"title":91},"pricing","Pricing",{"id":93,"title":94},"where-it-shingles","Where it shingles",{"id":96,"title":97},"verdict","Verdict",{"id":99,"title":100},"sources","Sources",[102,110,113,116,151,189,190,202,208,211,212,215,217,223,230,231,243,291,294,308,311,312,315,325,326,329,374,381,394,395,398,414,418,419],{"type":103,"content":104},"paragraph",[105,106],"Unstructured is the document-parsing layer most retrieval pipelines start with: an Apache-2.0 Python library that turns PDFs, Word files, HTML, images and spreadsheets into typed elements, titles, tables, lists and prose, plus a hosted platform that adds connectors, change detection and the strategies the library does not ship. ",{"tag":107,"children":108},"strong",[109],"The library is the right starting point for nearly everyone; the platform is worth paying for only when tables or scanned archives decide whether the pipeline works at all.",{"type":103,"content":111},[112],"It sits at the front of the stack, before chunking, embedding and retrieval, and it competes with LlamaParse, Docling, Reducto, Azure Document Intelligence and the parsing endpoints of the large cloud vendors. Its advantage is not that it wins every benchmark, its own published results say otherwise for the open-source build, but that the core runs locally under a permissive licence, so nothing in this layer forces a vector database, a chunker or a hosting choice.",{"type":114,"level":115,"id":78,"text":79},"heading",2,{"type":103,"content":117},[118,119,123,124,127,128,131,132,135,136,135,139,142,143,146,147,150],"Install with ",{"tag":120,"children":121},"code",[122],"pip install \"unstructured[all-docs]\"",", call ",{"tag":120,"children":125},[126],"partition()"," on a file and get back a list of element objects, each with a type, text and metadata such as page number and bounding box. The ",{"tag":120,"children":129},[130],"strategy"," argument picks the pipeline: ",{"tag":120,"children":133},[134],"auto",", ",{"tag":120,"children":137},[138],"fast",{"tag":120,"children":140},[141],"hi_res"," and ",{"tag":120,"children":144},[145],"ocr_only"," in the library, with ",{"tag":120,"children":148},[149],"vlm"," added by the platform to route pages through a vision model. Around that sits a chain, partition, chunk, enrich, embed and load, which the platform runs as a job and the library runs as ordinary functions.",{"type":152,"ordered":153,"items":154},"list",false,[155,157,159,161,175,177,179],[156],"Licence and ownership: Apache-2.0 for the library; the platform is a commercial product of Unstructured with a free tier, pay-as-you-go and a custom tier.",[158],"Coverage: the pricing page lists 45+ supported file types and 40+ connectors, split across more than 20 sources and more than 20 destinations.",[160],"Output: typed elements such as Title, NarrativeText, Table, ListItem and Image, carrying page numbers, coordinates and element metadata rather than one wall of text.",[162,163,135,165,135,167,142,169,171,172,174],"Strategies: ",{"tag":120,"children":164},[134],{"tag":120,"children":166},[138],{"tag":120,"children":168},[141],{"tag":120,"children":170},[145]," locally, plus ",{"tag":120,"children":173},[149]," and the enrichment steps in the platform.",[176],"Chunking: by title, by page, by character and by similarity, with contextual chunking offered as a platform feature.",[178],"Benchmarks: Unstructured publishes results over 1,000+ enterprise pages against Reducto, LlamaParse, Docling, Snowflake, Databricks and NVIDIA.",[180,181,184,185,188],"Telemetry: the library reports anonymous usage data unless ",{"tag":120,"children":182},[183],"DO_NOT_TRACK"," or ",{"tag":120,"children":186},[187],"SCARF_NO_ANALYTICS"," is set.",{"type":114,"level":115,"id":81,"text":82},{"type":103,"content":191},[192,193,195,196,198,199,201],"A run reads the file, renders pages when the strategy needs pixels, then classifies regions into elements. ",{"tag":120,"children":194},[138]," takes the embedded text and labels it; ",{"tag":120,"children":197},[141]," runs layout detection and OCR over the page image, which is why it is slower, why it needs the model stack installed, and why it is the strategy that still produces tables worth keeping; ",{"tag":120,"children":200},[145]," is the fallback when a page has no text layer at all. Chunking then groups elements under a character budget while trying not to separate a heading from the section it introduces.",{"type":203,"src":204,"alt":205,"wide":206,"caption":207},"image","\u002Fimages\u002Fblog\u002Funstructured\u002Fdiagram-7.webp","How a document becomes retrievable text Source files enter at the top and are split into typed elements by the partition step, which reads layout and runs OCR. The elements are grouped into chunks by title, page or size, enriched with metadata and table structure, embedded into vectors, and loaded into one of more than twenty destinations.",true,"Every stage is a separate call in the library and a separate step in the platform, so a pipeline can be re-run from the middle without re-parsing the whole corpus.",{"type":103,"content":209},[210],"What makes or breaks the output is the element boundary. A table that comes out as HTML with its header row intact chunks into one useful node; the same table read as prose becomes several chunks that each carry half a number. That is the whole argument for caring about this layer, and also the whole reason to read the parser output before changing the embedding model.",{"type":114,"level":115,"id":84,"text":85},{"type":103,"content":213},[214],"The library quickstart is a single function call. The snippet below parses a PDF with the high-resolution strategy, keeps table structure, chunks by title and writes the result as JSON.",{"type":120,"code":216},"from unstructured.partition.auto import partition\nfrom unstructured.chunking.title import chunk_by_title\nfrom unstructured.staging.base import elements_to_json\n\n# strategy: auto, fast, hi_res or ocr_only; hi_res is the one that keeps table structure\nelements = partition(\n    filename=\"report.pdf\",\n    strategy=\"hi_res\",\n    infer_table_structure=True,\n)\nchunks = chunk_by_title(elements, max_characters=1_200, combine_under=300)\n\nelements_to_json(chunks, filename=\"report.elements.json\")\nprint(len(elements), \"elements,\", len(chunks), \"chunks\")",{"type":103,"content":218},[219,220,222],"For anything beyond a local experiment, the platform is the maintained path: the same partition step behind an API or a scheduled job, connectors to S3, SharePoint, Google Drive and the rest, change detection so only new or modified files are processed, and the ",{"tag":120,"children":221},[149]," strategy. The library remains where the parsing code itself lives, and the documentation is written around it.",{"type":224,"variant":225,"title":226,"body":227},"callout","tip","Read the elements before touching the embeddings",[228],[229],"Partition a hundred pages of your own corpus and read the output: element types, table structure, reading order. The failure at this layer is silent, a parser that drops half a table still returns clean JSON, and every metric downstream will blame the retriever instead.",{"type":114,"level":115,"id":87,"text":88},{"type":103,"content":232},[233,234,236,237,239,240,242],"The platform bills pages: 10,000 free to start and $0.015 per page after that, so a 400-page scanned archive is six dollars of parsing before anyone has written a query. The library bills in CPU and wall time instead: ",{"tag":120,"children":235},[138]," is close to I\u002FO-bound, ",{"tag":120,"children":238},[141]," runs a layout model and OCR per page, and the ",{"tag":120,"children":241},[149]," strategy moves the bill from compute to model tokens.",{"type":244,"head":245,"rows":254},"table",[246,248,250,252],[247],"Pipeline",[249],"Adjusted CCT",[251],"Tokens added",[253],"Table cell content",[255,264,273,282],[256,258,260,262],[257],"Unstructured platform",[259],"0.880",[261],"0.051",[263],"0.820",[265,267,269,271],[266],"Unstructured open source",[268],"0.715",[270],"0.119",[272],"0.426",[274,276,278,280],[275],"LlamaParse VLM",[277],"0.835",[279],"0.069",[281],"0.522",[283,285,287,289],[284],"Docling default",[286],"0.716",[288],"0.135",[290],"0.657",{"type":103,"content":292},[293],"These numbers come from Unstructured's own benchmark of 1,000+ enterprise pages, scanned invoices, nested tables and handwriting, and a vendor-run comparison is marketing, so the useful signal is the gap inside a single product: 0.426 against 0.820 table-cell content between the open-source build and the best platform pipeline, and 0.715 against 0.880 on adjusted text accuracy. Element alignment, whether a region was labelled as heading, table or paragraph, is where every tool in that table clusters between 0.53 and 0.61, which is the honest difficulty of this layer.",{"type":152,"ordered":153,"items":295},[296,298,306],[297],"Parse once and keep the element JSON: re-partitioning the same corpus while experimenting with chunking is the most common way this layer burns money.",[299,300,302,303,305],"Pick the strategy per document type rather than per corpus: ",{"tag":120,"children":301},[138]," for born-digital text, ",{"tag":120,"children":304},[141]," for scans and anything with tables.",[307],"Count pages rather than files, because a per-page price makes one 400-page PDF the budget item and not the number of documents.",{"type":103,"content":309},[310],"None of this is specific to this vendor, every parser trades recall against compute. What is specific is that the numbers are published at all, in a table with competitor names attached, which is more than most of the field discloses.",{"type":114,"level":115,"id":90,"text":91},{"type":103,"content":313},[314],"Two products share one name. The library is Apache-2.0 and free: install it, run it on your own machine, no account and no page count. The platform is the same parsing wrapped in managed jobs, connectors and compliance, metered by the page.",{"type":152,"ordered":153,"items":316},[317,319,321,323],[318],"Library: Apache-2.0, installed from PyPI, unlimited pages, your own hardware.",[320],"Free: 10,000 pages to start, no card required, all features included.",[322],"Pay-as-you-go: $0.015 per page after the first 10,000 pages, all features included.",[324],"Business: custom pricing for a dedicated instance, VPC or bare-metal deployment, multi-user accounts, role-based access control and the vendor's compliance certifications.",{"type":114,"level":115,"id":93,"text":94},{"type":103,"content":327},[328],"Start with the weaknesses. The open-source build is the weaker parser and the vendor's own table says so: 0.426 table-cell content against 0.820 for the best platform pipeline, 0.119 invented tokens against 0.051. The price is per page, which rewards born-digital PDFs and punishes scans, and a page is a poor unit of work when one page holds a paragraph and the next holds a 400-cell table. The features that make the platform worth renting, VLM partitioning, incremental change detection, 40+ maintained connectors and the compliance story, are exactly what the licence does not contain. And output still needs spot checks: reading order and table structure are the two fields that fail without an error.",{"type":244,"head":330,"rows":338},[331,333,334,336],[332],"Tool",[79],[335],"Where it wins",[337],"What you give up",[339,347,356,365],[340,341,343,345],[25],[342],"Library plus hosted platform",[344],"Local run under Apache-2.0 with a published quality benchmark",[346],"Per-page billing, and the strong numbers need the paid pipeline",[348,350,352,354],[349],"LlamaParse",[351],"Hosted parser from the LlamaIndex team",[353],"Fast setup and tight LlamaIndex integration",[355],"Hosted only, so every page leaves your network",[357,359,361,363],[358],"Docling",[360],"IBM's open-source parser",[362],"One dependency, MIT licence, strong table output",[364],"Fewer file types and no managed connector layer",[366,368,370,372],[367],"Reducto",[369],"Hosted parsing API with layout controls",[371],"Table accuracy and layout controls as a service",[373],"API only: no local run and no library to extend",{"type":103,"content":375},[376,377,380],"The real decision is who pays for quality. If the corpus is born-digital text and adequate output is enough, the library with ",{"tag":120,"children":378},[379],"strategy=\"fast\""," costs nothing per page and is the right size for the job. If tables, scans or regulated data decide whether the pipeline works, the platform or a specialist parser is the purchase, and the only test that matters is a hundred pages of your own documents scored on the fields you actually read.",{"type":224,"variant":382,"title":383,"body":384},"warn","Telemetry and what leaves your machine",[385],[386,387,142,390,393],"With the library the documents stay local, but the package reports anonymous usage data by default; ",{"tag":120,"children":388},[389],"DO_NOT_TRACK=1",{"tag":120,"children":391},[392],"SCARF_NO_ANALYTICS=1"," switch that off. The platform by design sends pages to a hosted service, and the security pages list encryption in transit, zero data retention and dedicated inference for teams that cannot do that.",{"type":114,"level":115,"id":96,"text":97},{"type":103,"content":396},[397],"Unstructured is the safest default at the front of a retrieval pipeline because it is boring, local and measurable: one function that returns typed elements, a benchmark you can argue with, and a paid tier you can move to without rewriting ingestion. What is actually being decided is how much parsing quality the product needs, and the vendor's own numbers say the free build is not the paid one.",{"type":152,"ordered":206,"items":399},[400,402,404,406,412],[401],"Use the library if a pipeline already exists and needs typed elements rather than raw text; it is Apache-2.0, runs locally and can be replaced without touching the rest of the stack.",[403],"Use the platform when pages arrive from S3, SharePoint or Confluence and need connectors, change detection and an audit trail.",[405],"Do not accept it as the parser of record for financial tables without scoring your own documents; the gap between strategies inside one product is larger than the gap between vendors.",[407,408,411],"Do not choose it where a heavy local dependency tree is unacceptable, because ",{"tag":120,"children":409},[410],"unstructured[all-docs]"," pulls in the OCR and layout stack while Docling or a hosted API is much lighter.",[413],"Budget in pages from the start; a per-page price is easy to model and easy to exceed with scanned archives.",{"type":415,"content":416},"quote",[417],"Treat document parsing as a measured step rather than plumbing: choose the strategy on a sample of your own pages, keep the element JSON, and change the parser only when the table-cell numbers move.",{"type":114,"level":115,"id":99,"text":100},{"type":152,"ordered":206,"items":420},[421,425,428,431,434,437],[422],{"tag":423,"href":30,"children":424},"a",[29],[426],{"tag":423,"href":33,"children":427},[32],[429],{"tag":423,"href":36,"children":430},[35],[432],{"tag":423,"href":39,"children":433},[38],[435],{"tag":423,"href":42,"children":436},[41],[438],{"tag":423,"href":45,"children":439},[44],[441,517,576,634],{"slug":442,"published":443,"minutes":444,"category":7,"tags":445,"keywords":451,"about":464,"sources":474,"cover":511,"og":512,"expertise":48,"locales":513,"lang":50,"title":514,"description":515,"coverAlt":516},"embedding-model-selection-2026","2026-10-17",9,[446,447,448,449,450],"Embeddings","RAG","MTEB","Vector search","Model selection",[452,453,454,455,456,457,458,459,460,461,462,463],"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",[465,468,471],{"name":466,"url":467},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":469,"url":470},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":472,"url":473},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[475,478,481,484,487,490,493,496,499,502,505,508],{"title":476,"url":477},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":479,"url":480},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":482,"url":483},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":485,"url":486},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":488,"url":489},"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":491,"url":492},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":494,"url":495},"Voyage AI: Pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":497,"url":498},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":500,"url":501},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":503,"url":504},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":506,"url":507},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":509,"url":510},"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",[50,51,52],"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":518,"published":443,"minutes":519,"category":7,"tags":520,"keywords":523,"about":535,"sources":545,"cover":570,"og":571,"expertise":48,"locales":572,"lang":50,"title":573,"description":574,"coverAlt":575},"contextual-retrieval-late-chunking",10,[447,12,446,521,522],"Contextual retrieval","Late chunking",[524,525,526,527,528,529,530,531,532,533,534],"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",[536,539,542],{"name":537,"url":538},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":540,"url":541},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":543,"url":544},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[546,549,552,555,558,561,564,567],{"title":547,"url":548},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":550,"url":551},"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":553,"url":554},"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":556,"url":557},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":559,"url":560},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":562,"url":563},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":565,"url":566},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":568,"url":569},"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",[50,51,52],"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":577,"published":443,"minutes":444,"category":7,"tags":578,"keywords":582,"about":595,"sources":603,"cover":628,"og":629,"expertise":48,"locales":630,"lang":50,"title":631,"description":632,"coverAlt":633},"rag-access-control-permissions",[447,579,580,581,449],"Access control","Security","Multi-tenancy",[583,584,585,586,587,588,589,590,591,592,593,594],"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",[596,599,602],{"name":597,"url":598},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":600,"url":601},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":537,"url":538},[604,607,610,613,616,619,622,625],{"title":605,"url":606},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":608,"url":609},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":611,"url":612},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":614,"url":615},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":617,"url":618},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":620,"url":621},"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":623,"url":624},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":626,"url":627},"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",[50,51,52],"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":635,"published":443,"minutes":519,"category":7,"tags":636,"keywords":641,"about":653,"sources":661,"cover":688,"og":689,"expertise":690,"locales":691,"lang":50,"title":692,"description":693,"coverAlt":694},"rag-product-catalog-pim-data",[447,637,638,639,640],"PIM","Product data","B2B e-commerce","Metadata filtering",[642,643,644,645,646,647,648,649,650,651,652],"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",[654,657,658],{"name":655,"url":656},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":537,"url":538},{"name":659,"url":660},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[662,665,668,671,673,676,679,682,685],{"title":663,"url":664},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":666,"url":667},"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":669,"url":670},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":672,"url":660},"ETIM International: Classification",{"title":674,"url":675},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":677,"url":678},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":680,"url":681},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":683,"url":684},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":686,"url":687},"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",[50,51,52],"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.",1792261156619]