[{"data":1,"prerenderedAt":774},["ShallowReactive",2],{"blog-reranking-models-compared-en":3},{"slug":4,"published":5,"updated":6,"minutes":7,"category":8,"tags":9,"keywords":15,"about":26,"sources":36,"cover":73,"og":74,"expertise":75,"locales":76,"lang":77,"title":80,"description":81,"coverAlt":82,"metaTitle":83,"takeaways":84,"faq":90,"toc":106,"blocks":134,"others":522},"reranking-models-compared","2026-09-30","2026-10-01",8,"rag",[10,11,12,13,14],"Reranking","RAG","Search","Cross-encoders","Evaluation",[16,17,18,19,20,21,22,23,24,25],"cross-encoder reranker comparison","Cohere Rerank 4 pricing","bge-reranker-v2-m3","Voyage rerank-3","Jina reranker v3.5","ColBERT late interaction vs reranker","LLM as reranker","reciprocal rank fusion vs reranker","reranking top-k evaluation","self-hosted reranker ONNX CPU",[27,30,33],{"name":28,"url":29},"Learning to rank","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLearning_to_rank",{"name":31,"url":32},"BERT (language model)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBERT_%28language_model%29",{"name":34,"url":35},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",[37,40,43,46,49,52,55,58,61,64,67,70],{"title":38,"url":39},"Sentence-BERT (arXiv 1908.10084)","https:\u002F\u002Farxiv.org\u002Fabs\u002F1908.10084",{"title":41,"url":42},"Sentence Transformers: retrieve and re-rank","https:\u002F\u002Fsbert.net\u002Fexamples\u002Fsentence_transformer\u002Fapplications\u002Fretrieve_rerank\u002FREADME.html",{"title":44,"url":45},"BAAI\u002Fbge-reranker-v2-m3 model card","https:\u002F\u002Fhuggingface.co\u002FBAAI\u002Fbge-reranker-v2-m3",{"title":47,"url":48},"Cohere docs: reranking best practices","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Freranking-best-practices",{"title":50,"url":51},"Cohere pricing","https:\u002F\u002Fcohere.com\u002Fpricing",{"title":53,"url":54},"Voyage AI blog: rerank-3 (30 Sep 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F09\u002F30\u002Frerank-3\u002F",{"title":56,"url":57},"Voyage AI docs: pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":59,"url":60},"Jina AI: Reranker v3.5 (3 Aug 2026)","https:\u002F\u002Fjina.ai\u002Fnews\u002Fjina-reranker-v3-5-faster-listwise-reranking-hybrid-attention-self-distillation\u002F",{"title":62,"url":63},"ColBERTv2 (arXiv 2112.01488)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2112.01488",{"title":65,"url":66},"Elasticsearch docs: reciprocal rank fusion","https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Freference\u002Felasticsearch\u002Frest-apis\u002Freciprocal-rank-fusion",{"title":68,"url":69},"Azure AI Search: semantic ranking overview","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsemantic-search-overview",{"title":71,"url":72},"RankGPT (arXiv 2304.09542)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2304.09542","\u002Fimages\u002Fblog\u002Freranking-models-compared\u002Fcover.webp","\u002Fimages\u002Fblog\u002Freranking-models-compared\u002Fog.jpg","ai-engineer",[77,78,79],"en","de","hu","Cross-encoder rerankers compared: Cohere, bge, Voyage, Jina and late interaction (2026)","Rerankers in October 2026: pointwise, listwise and late interaction, Cohere, Voyage, bge, Qwen3, Jina and mxbai, prices, self-hosting and choosing k.","A funnel narrows many cards to five, and one card is lifted to the front.","Cross-encoder rerankers compared · Balázs Csorba",[85,86,87,88,89],"A reranker scores query and document together, which is accurate but too slow for a whole corpus, so it reorders the top k from a fast first stage.","Three architectures compete: pointwise cross-encoders, listwise rerankers that read all candidates at once, and late interaction with stored token vectors; RRF needs no model at all.","As of October 2026, hosted prices are per search for Cohere ($2.00 to $2.50 per 1,000) and per token for Voyage ($0.02 to $0.05 per million); open models such as bge-reranker-v2-m3 and Qwen3-Reranker are Apache-2.0.","Added latency grows linearly with k, so start from a vendor default such as Azure’s top 50 and tune with a small labelled eval, not with leaderboard numbers.","Vendor benchmark claims are not independent; a 50-query eval on your own data decides the model, the k and whether you need a reranker at all.",[91,94,97,100,103],{"q":92,"a":93},"What does a reranker do in RAG?","It takes the top candidates from a fast first-stage retriever, scores each one together with the query, and reorders them so the most relevant chunks reach the model. Because it reads query and document jointly, it is more accurate than embedding similarity, but too slow to run on a whole corpus.",{"q":95,"a":96},"Which reranker should I use in 2026?","For a hosted API, Cohere Rerank 4 and Voyage rerank-3 are the current lines as of October 2026. For self-hosting, bge-reranker-v2-m3 (0.6B, Apache-2.0) is a common multilingual default, with Qwen3-Reranker, Jina Reranker v3.5 and mxbai-rerank-v2 as alternatives. Pick by running a small eval on your own queries.",{"q":98,"a":99},"How much does reranking cost?","Cohere charges $2.00 per 1,000 searches for Rerank 4 Fast and $2.50 for Rerank 4 Pro, where a search is one query with up to 100 documents. Voyage charges $0.05 per million tokens for rerank-3 and $0.02 for rerank-3-lite. Self-hosting costs the compute for scoring k pairs per query.",{"q":101,"a":102},"How many documents should I rerank?","Start with 50 to 100 candidates and return 5 to 20. Azure AI Search reranks the top 50 by default. Latency grows linearly with the number of pairs, so measure recall at your chosen k and the added latency, and stop increasing k when recall stops improving.",{"q":104,"a":105},"Is reciprocal rank fusion a replacement for a reranker?","Not usually. RRF merges ranked lists from several retrievers with rank arithmetic and no model, which is cheap and robust. A reranker reads the text and can fix the order within the fused list. Many systems use RRF to fuse BM25 and vector results and then a reranker on the top of that list.",[107,110,113,116,119,122,125,128,131],{"id":108,"title":109},"what-a-reranker-buys","What a reranker buys you, and what it costs",{"id":111,"title":112},"pointwise-listwise-late-interaction","How rerankers score: pairs, lists and token vectors",{"id":114,"title":115},"models-compared-2026","The 2026 line-up",{"id":117,"title":118},"pricing-and-self-hosting","Prices: per search, per token, or your own CPU",{"id":120,"title":121},"late-interaction-alternatives","Late interaction as an alternative",{"id":123,"title":124},"llm-as-reranker-and-rrf","LLM rerankers, and when RRF alone is enough",{"id":126,"title":127},"choosing-k-and-evaluating","Picking k and the model with a small eval",{"id":129,"title":130},"trade-offs-and-checklist","When not to add a reranker, and a checklist",{"id":132,"title":133},"sources","Sources",[135,144,153,156,168,174,181,184,185,188,192,199,200,223,333,353,360,363,364,373,379,387,388,406,407,418,433,434,441,443,450,451,454,471,483,484],{"type":136,"content":137},"paragraph",[138,139,143],"A ",{"tag":140,"children":141},"strong",[142],"reranker"," reads a query and a candidate document together and returns a relevance score, which makes it more accurate than comparing two embeddings and far too slow to run on a whole corpus. That is why retrieval is built in two stages: a fast retriever finds 50 to 250 candidates, and a cross-encoder reorders them so the best few reach the model. The decision is which reranker, how many candidates, and whether the gain is worth the latency.",{"type":136,"content":145},[146,147,152],"This article compares the scoring architectures, the models available as of October 2026, hosted prices and self-hosting, late interaction and LLM rerankers as alternatives, and a small evaluation to choose k. Where reranking sits in the full pipeline is covered in ",{"tag":148,"to":149,"children":150},"link","\u002Fblog\u002Frag-pipeline-chunking-hybrid-search-reranking",[151],"RAG pipelines: chunking, hybrid search and reranking",".",{"type":154,"level":155,"id":108,"text":109},"heading",2,{"type":136,"content":157},[158,159,163,164,167],"A reranker buys precision at the top of the list and costs latency proportional to k. The reason it cannot replace retrieval is arithmetic: the Sentence-BERT paper notes that finding the most similar pair in 10,000 sentences takes about 50 million BERT inference computations, roughly 65 hours, which “makes it unsuitable for semantic similarity search” (",{"tag":160,"href":39,"children":161},"a",[162],"SBERT","). The documented production shape is therefore a bi-encoder that retrieves candidates and a cross-encoder that re-ranks them (",{"tag":160,"href":42,"children":165},[166],"Sentence Transformers",").",{"type":169,"src":170,"alt":171,"wide":172,"caption":173},"image","\u002Fimages\u002Fblog\u002Freranking-models-compared\u002Fdiagram-4.webp","Two-stage retrieval with a reranker Five steps from left to right: the query; hybrid retrieval with BM25 and dense vectors returning 100 to 250 candidates in tens of milliseconds; reciprocal rank fusion merging the lists; the cross-encoder scoring k query-document pairs, the main added latency, which grows linearly with k; and the top 5 to 20 results passed to the answer.",true,"The first stage is cheap and wide; the reranker is expensive and narrow, and its cost is set by k.",{"type":136,"content":175},[176,177,152],"The two numbers to know before adding one are the recall of your first stage at k and the added latency of scoring k pairs. If the right document is not in the top 100, no reranker will find it; if it is at position 30 and you show five results, a reranker is exactly the fix. Product search with part numbers and long German compound descriptions is a typical case where the right item is retrieved but ranked too low, see ",{"tag":148,"to":178,"children":179},"\u002Fblog\u002Fsemantic-product-search-b2b",[180],"semantic product search for B2B",{"type":136,"content":182},[183],"The second number matters as much as the first. Every candidate is one more forward pass for a pointwise model, so going from 50 to 200 candidates roughly quadruples the reranking time. In an interactive search box the user notices that; in a background RAG answer that already waits seconds for generation, it may not matter at all. Write the latency budget down before you compare models, because it decides which half of the table below is even eligible.",{"type":154,"level":155,"id":111,"text":112},{"type":136,"content":186},[187],"There are three architectures, plus fusion without a model. A pointwise cross-encoder concatenates the query and one document and outputs one relevance logit, so k candidates mean k forward passes. A listwise reranker puts the query and all candidates into one context window and orders them in a single pass. Late interaction stores a vector per token at index time and matches query tokens against them with MaxSim, which moves most of the work out of the query path.",{"type":169,"src":189,"alt":190,"wide":172,"caption":191},"\u002Fimages\u002Fblog\u002Freranking-models-compared\u002Fdiagram-9.webp","Four ways to score candidates Four columns. Pointwise cross-encoder: the query and one document are concatenated and the model returns one relevance score; compute happens per pair at query time. Listwise reranker: the query and all candidates share one long context; compute happens once per list at query time. Late interaction: per-token vectors are stored at index time and matched with MaxSim at query time; compute is split between indexing and query. RRF: only rank positions are combined; no model runs.","Cross-encoders and listwise rerankers spend compute at query time, late interaction moves part of it to indexing, and RRF spends almost none.",{"type":136,"content":193},[194,195,198],"Jina Reranker v3 is the clearest listwise example: a 0.6B model that reads the query and every candidate in one window, described by Jina as “last but not late interaction.” Its v3.5 release in August 2026 keeps 0.6B parameters, extends the context to 131K tokens and reports reranking up to 1.56 times faster than v3 (",{"tag":160,"href":60,"children":196},[197],"Jina","). Listwise models see the candidates relative to each other, which helps with near-duplicates, but the whole list has to fit in context.",{"type":154,"level":155,"id":114,"text":115},{"type":136,"content":201},[202,203,207,208,211,212,207,215,218,219,222],"As of October 2026 the hosted lines are Cohere Rerank 4, released in December 2025 as ",{"tag":204,"children":205},"code",[206],"rerank-v4.0-pro"," and ",{"tag":204,"children":209},[210],"rerank-v4.0-fast"," with a 32k context, and Voyage ",{"tag":204,"children":213},[214],"rerank-3",{"tag":204,"children":216},[217],"rerank-3-lite",", released on 30 September 2026, also with 32k. Voyage reports rerank-3 at 2.72 percent above Cohere Rerank 4 Pro across 95 datasets (",{"tag":160,"href":54,"children":220},[221],"Voyage","); that is a vendor claim on a vendor suite, not an independent result. The open models are licensed for commercial self-hosting.",{"type":224,"head":225,"rows":236},"table",[226,228,230,232,234],[227],"Model (Oct 2026)",[229],"Architecture",[231],"Size \u002F context",[233],"Hosted price",[235],"License \u002F notes",[237,248,257,265,274,283,292,303,312,322],[238,240,242,244,246],[239],"Cohere Rerank 4 Pro",[241],"cross-encoder",[243],"32k",[245],"$2.50 \u002F 1,000 searches",[247],"API, multilingual",[249,251,252,253,255],[250],"Cohere Rerank 4 Fast",[241],[243],[254],"$2.00 \u002F 1,000 searches",[256],"API, low latency",[258,259,260,261,263],[19],[241],[243],[262],"$0.05 \u002F 1M tokens",[264],"API, released Sep 2026",[266,268,269,270,272],[267],"Voyage rerank-3-lite",[241],[243],[271],"$0.02 \u002F 1M tokens",[273],"API, cheaper tier",[275,276,277,279,281],[18],[241],[278],"0.6B \u002F 8k",[280],"self-host",[282],"Apache-2.0",[284,286,288,290,291],[285],"Qwen3-Reranker-8B",[287],"LLM-based cross-encoder",[289],"8B",[280],[282],[293,295,297,299,301],[294],"Jina Reranker v3.5",[296],"listwise",[298],"0.6B \u002F 131K",[300],"API or self-host",[302],"check license and price",[304,306,307,309,310],[305],"mxbai-rerank-large-v2",[241],[308],"1.5B",[280],[311],"Apache-2.0, 100+ languages",[313,315,317,319,320],[314],"ColBERTv2",[316],"late interaction",[318],"token vectors",[280],[321],"storage-heavy index",[323,325,327,329,331],[324],"RRF",[326],"rank fusion",[328],"no model",[330],"free",[332],"built into Elasticsearch",{"type":136,"content":334},[335,338,339,342,343,345,346,348,349,167],{"tag":204,"children":336},[337],"BAAI\u002Fbge-reranker-v2-m3"," is the common open default: a 0.6B multilingual cross-encoder on an XLM-RoBERTa base, Apache-2.0, with more than 15 million downloads in the last month (",{"tag":160,"href":45,"children":340},[341],"Hugging Face","). ",{"tag":204,"children":344},[285]," is the heavyweight open option from the Qwen3 Embedding series, and mixedbread’s ",{"tag":204,"children":347},[305]," sits between them at 1.54B parameters, about 3.09 GB in FP16, covering more than 100 languages (",{"tag":160,"href":350,"children":351},"https:\u002F\u002Fhuggingface.co\u002Fmixedbread-ai\u002Fmxbai-rerank-large-v2",[352],"mixedbread",{"type":354,"variant":355,"title":356,"body":357},"callout","warn","Vendor numbers are vendor numbers",[358],[359],"Voyage’s comparison against Cohere and Qwen3, Jina’s BEIR gains and Cohere’s own quality claims are all measured by the company selling the model, on test suites it chose. None of them has been reproduced independently in the sources here, and the public MTEB reranking leaderboard changes too often to quote. Use these numbers to build a shortlist, never to make the final choice.",{"type":136,"content":361},[362],"Two practical differences matter more than a point of nDCG. Context length decides whether a long product datasheet or contract clause fits as one document or has to be split; Cohere’s v4 models split documents at 32,764 tokens and keep the highest chunk score. Language coverage decides whether German and Hungarian queries work as well as English ones, which is why the multilingual bge, mxbai and Cohere models are the usual candidates for European content.",{"type":154,"level":155,"id":117,"text":118},{"type":136,"content":365},[366,367,369,370,167],"Hosted rerankers are priced in two different units, which makes them hard to compare at a glance. Cohere charges per search: $2.00 per 1,000 for Rerank 4 Fast and $2.50 for Rerank 4 Pro, where a search is one query with up to 100 documents and documents over 500 tokens count as several (",{"tag":160,"href":51,"children":368},[50],"). Voyage charges per token: $0.05 per million for rerank-3 and $0.02 for rerank-3-lite (",{"tag":160,"href":57,"children":371},[372],"Voyage pricing",{"type":136,"content":374},[375,376,167],"Turn both into the same arithmetic before choosing. With 100 candidates of about 300 tokens each, one query is roughly 30,000 tokens: about $0.0015 on rerank-3 and $0.0025 on Rerank 4 Pro. The ratio flips with longer chunks, because Cohere counts per document and Voyage per token. Cohere also documents limits worth knowing: a 2,048-token query cap and a recommendation against sending more than 1,000 documents per request (",{"tag":160,"href":48,"children":377},[378],"Cohere",{"type":136,"content":380},[381,382,386],"Self-hosting turns the price into compute. On CPU, size is the practical limit: FastEmbed’s ONNX rerankers range from 0.08 GB for ms-marco-MiniLM-L-6-v2 to 1.11 GB for jina-reranker-v2-base-multilingual, which is licensed for non-commercial use only (",{"tag":160,"href":383,"children":384},"https:\u002F\u002Fqdrant.github.io\u002Ffastembed\u002Fexamples\u002FSupported_Models\u002F",[385],"FastEmbed","). I found no primary benchmark for per-pair CPU latency, so measure on your own hardware with your own chunk length before committing. On my own Nuxt site, where I run LLM features, the cheap path for this kind of problem is hybrid retrieval plus a small ONNX model on the server, not an LLM call per query.",{"type":154,"level":155,"id":120,"text":121},{"type":136,"content":389},[390,391,393,394,398,399,402,403,167],"Late interaction is a different trade-off rather than a better cross-encoder. ColBERTv2 keeps a vector per token, uses residual compression to cut the storage footprint of late-interaction models by six to ten times, and scores with cheap MaxSim at query time (",{"tag":160,"href":63,"children":392},[314],"). You pay in index size instead of query latency, which suits large k and high query volume. For page images, the same idea drives ColPali, covered in ",{"tag":148,"to":395,"children":396},"\u002Fblog\u002Fmultimodal-rag-colpali",[397],"multimodal RAG with ColPali",". The ",{"tag":204,"children":400},[401],"rerankers"," library wraps cross-encoders, APIs and late-interaction models behind one interface, which makes swapping them in an eval easy (",{"tag":160,"href":404,"children":405},"https:\u002F\u002Fgithub.com\u002FAnswerDotAI\u002Frerankers",[401],{"type":154,"level":155,"id":123,"text":124},{"type":136,"content":408},[409,410,413,414,417],"A general LLM can rerank, but it is rarely the cheapest way. RankGPT showed that properly instructed GPT-4 can be competitive with, or better than, supervised rerankers on IR benchmarks, and that a distilled 440M model beat a 3B supervised model on BEIR (",{"tag":160,"href":72,"children":411},[412],"RankGPT","). Voyage’s own study argues the other side, reporting purpose-built rerankers as up to 60 times cheaper and 48 times faster than LLMs (",{"tag":160,"href":415,"children":416},"https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F10\u002F22\u002Fthe-case-against-llms-as-rerankers\u002F",[221],"); both sources have a stake, so test on your data.",{"type":136,"content":419},[420,421,424,425,428,429,432],"Reciprocal rank fusion is the cheapest step and often the first one to add. It merges ranked lists from several retrievers using only their positions; Elasticsearch implements it with a ",{"tag":204,"children":422},[423],"rank_constant"," that defaults to 60 and a ",{"tag":204,"children":426},[427],"rank_window_size"," (",{"tag":160,"href":66,"children":430},[431],"Elastic","). RRF is enough when BM25 and vector search each find different good results and the top of the fused list is already right. Add a model on top when the right document is consistently in the fused top 50 but not in the top 5.",{"type":154,"level":155,"id":126,"text":127},{"type":136,"content":435},[436,437,440],"Start from a known default and let a small labelled set move it. Azure AI Search’s semantic ranker takes only the top 50 results forward and uses up to 2,000 tokens per document, starting from a BM25 or RRF result set (",{"tag":160,"href":69,"children":438},[439],"Azure","). That is a sensible starting k. Then label 50 real queries with the documents that should answer them and measure recall at 10 before and after reranking for k of 25, 50 and 100.",{"type":204,"code":442},"# A small reranker eval: 50 labelled queries, recall@k before and after reranking\nfrom sentence_transformers import CrossEncoder\n\nreranker = CrossEncoder(\"BAAI\u002Fbge-reranker-v2-m3\")\n\ndef recall_at(ranked_ids, relevant_ids, n):\n    return len(set(ranked_ids[:n]) & relevant_ids) \u002F len(relevant_ids)\n\nfor k in (25, 50, 100):\n    before, after = [], []\n    for q in labelled_queries:                       # [{\"text\": ..., \"relevant\": {...}}]\n        hits = first_stage(q[\"text\"], k=k)           # your hybrid search: [(id, text), ...]\n        scores = reranker.predict([(q[\"text\"], t) for _, t in hits])\n        reranked = [i for (i, _), _ in sorted(zip(hits, scores), key=lambda p: -p[1])]\n        before.append(recall_at([i for i, _ in hits], q[\"relevant\"], 10))\n        after.append(recall_at(reranked, q[\"relevant\"], 10))\n    print(k, sum(before) \u002F len(before), sum(after) \u002F len(after))",{"type":136,"content":444},[445,446,152],"Stop increasing k when recall at 10 stops improving, and weigh that against the latency you measured. Run the same script with two or three models and keep the cheapest one within a point of the best. Re-run it after every embedding model change, because the first stage decides what the reranker can see. How to keep such evals in a release process is covered in ",{"tag":148,"to":447,"children":448},"\u002Fblog\u002Fllm-evals-for-product-features",[449],"LLM evals for product features",{"type":154,"level":155,"id":129,"text":130},{"type":136,"content":452},[453],"Skip the reranker when the first stage already puts the right answer in the top few, when exact identifiers dominate the queries and BM25 finds them, or when the latency budget cannot absorb k extra forward passes. In those cases better chunking, metadata filters or RRF give more for less. Add one when the eval shows relevant documents sitting just below the cut.",{"type":455,"ordered":172,"items":456},"list",[457,459,461,463,465,467,469],[458],"Measure first-stage recall at k before choosing any reranker.",[460],"Fuse BM25 and vector results with RRF before adding a model.",[462],"Start with k of 50 and return 5 to 20 results.",[464],"Convert hosted prices to cost per query at your chunk length.",[466],"Check the license before self-hosting; some rerankers are non-commercial.",[468],"Measure added latency on your own hardware, not from published numbers.",[470],"Re-run the 50-query eval after every model or chunking change.",{"type":136,"content":472},[473,474,478,479,152],"If you are tuning retrieval for a RAG system or a product search and want the reranker decision backed by numbers, see my ",{"tag":148,"to":475,"children":476},"\u002Fexpertise\u002Fai-engineer",[477],"AI engineering work",". Vector store choices that sit under all of this are covered in ",{"tag":148,"to":480,"children":481},"\u002Fblog\u002Fqdrant",[482],"the Qdrant review",{"type":154,"level":155,"id":132,"text":133},{"type":455,"ordered":172,"items":485},[486,489,492,495,498,501,504,507,510,513,516,519],[487],{"tag":160,"href":39,"children":488},[38],[490],{"tag":160,"href":42,"children":491},[41],[493],{"tag":160,"href":45,"children":494},[44],[496],{"tag":160,"href":48,"children":497},[47],[499],{"tag":160,"href":51,"children":500},[50],[502],{"tag":160,"href":54,"children":503},[53],[505],{"tag":160,"href":57,"children":506},[56],[508],{"tag":160,"href":60,"children":509},[59],[511],{"tag":160,"href":63,"children":512},[62],[514],{"tag":160,"href":66,"children":515},[65],[517],{"tag":160,"href":69,"children":518},[68],[520],{"tag":160,"href":72,"children":521},[71],[523,595,655,713],{"slug":524,"published":525,"minutes":526,"category":8,"tags":527,"keywords":532,"about":545,"sources":553,"cover":589,"og":590,"expertise":75,"locales":591,"lang":77,"title":592,"description":593,"coverAlt":594},"embedding-model-selection-2026","2026-10-17",9,[528,11,529,530,531],"Embeddings","MTEB","Vector search","Model selection",[533,534,535,536,537,538,539,540,541,542,543,544],"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",[546,549,550],{"name":547,"url":548},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":34,"url":35},{"name":551,"url":552},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[554,557,560,563,566,569,572,574,577,580,583,586],{"title":555,"url":556},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":558,"url":559},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":561,"url":562},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":564,"url":565},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":567,"url":568},"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":570,"url":571},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":573,"url":57},"Voyage AI: Pricing",{"title":575,"url":576},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":578,"url":579},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":581,"url":582},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":584,"url":585},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":587,"url":588},"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",[77,78,79],"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":596,"published":525,"minutes":597,"category":8,"tags":598,"keywords":602,"about":614,"sources":624,"cover":649,"og":650,"expertise":75,"locales":651,"lang":77,"title":652,"description":653,"coverAlt":654},"contextual-retrieval-late-chunking",10,[11,599,528,600,601],"Chunking","Contextual retrieval","Late chunking",[603,604,605,606,607,608,609,610,611,612,613],"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",[615,618,621],{"name":616,"url":617},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":619,"url":620},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":622,"url":623},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[625,628,631,634,637,640,643,646],{"title":626,"url":627},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":629,"url":630},"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":632,"url":633},"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":635,"url":636},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":638,"url":639},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":641,"url":642},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":644,"url":645},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":647,"url":648},"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",[77,78,79],"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":656,"published":525,"minutes":526,"category":8,"tags":657,"keywords":661,"about":674,"sources":682,"cover":707,"og":708,"expertise":75,"locales":709,"lang":77,"title":710,"description":711,"coverAlt":712},"rag-access-control-permissions",[11,658,659,660,530],"Access control","Security","Multi-tenancy",[662,663,664,665,666,667,668,669,670,671,672,673],"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",[675,678,681],{"name":676,"url":677},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":679,"url":680},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":616,"url":617},[683,686,689,692,695,698,701,704],{"title":684,"url":685},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":687,"url":688},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":690,"url":691},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":693,"url":694},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":696,"url":697},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":699,"url":700},"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":702,"url":703},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":705,"url":706},"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",[77,78,79],"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":714,"published":525,"minutes":597,"category":8,"tags":715,"keywords":720,"about":732,"sources":740,"cover":767,"og":768,"expertise":769,"locales":770,"lang":77,"title":771,"description":772,"coverAlt":773},"rag-product-catalog-pim-data",[11,716,717,718,719],"PIM","Product data","B2B e-commerce","Metadata filtering",[721,722,723,724,725,726,727,728,729,730,731],"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",[733,736,737],{"name":734,"url":735},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":616,"url":617},{"name":738,"url":739},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[741,744,747,750,752,755,758,761,764],{"title":742,"url":743},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":745,"url":746},"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":748,"url":749},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":751,"url":739},"ETIM International: Classification",{"title":753,"url":754},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":756,"url":757},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":759,"url":760},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":762,"url":763},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":765,"url":766},"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",[77,78,79],"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.",1792342719105]