EmbeddingGemma v1 vs v2: v1 ranked better in our text-search test

TL;DR

If you’re choosing an embedding model for text search, the older of Google’s two EmbeddingGemma models ranked the relevant passages higher in our test. We call them EmbeddingGemma v1, Google’s EmbeddingGemma (embeddinggemma:300m in Ollama), and EmbeddingGemma v2, the new EmbeddingGemma 2 (embeddinggemma-2:270m).

Ask both “What is the longest snake in the world?” over English Wikipedia. v1 puts first a passage from List of largest snakes that names the reticulated python. v2 puts first a line about a sea snake, from Hydrophis spiralis, and ranks a passage that MIRACL’s annotators judged relevant 4th (Example 1).

Averaged over MIRACL’s Korean, Chinese and English sets, 1,405 questions in all, the scores point the same way. Searching by vectors alone, with both models at bf16 (16-bit weights), v1 scored 61.1 nDCG@10 and v2 55.5. nDCG@10 runs from 0 to 100, and higher is better: the relevant passages sit nearer the top of the first ten results. v1’s lead was 5.6 points, with a 95% interval of 4.2 to 7.0. Hybrid search, which adds keyword search to the vectors, brought the two within about a point.

Google reports v2 ahead on code and adds images, audio and video [1, 2]; we tested none of those. For text in these languages, v1 is the better pick on our sets. If you run v2 for text, pull its bf16 or 8-bit build rather than Ollama’s 4-bit default, send its prompts, and set any distance cutoff for it again.

6:18 Prefer watching? The benchmark walkthrough Real search examples, precision checks, and what changes when you add keyword search. Watch on YouTube

1. What Google says, and what we tested

Google released EmbeddingGemma 2, our v2, on 6 October 2026 under Apache 2.0. It maps text, images, audio and video into one 768-dimension space and reads up to 8,192 tokens [1, 2]. Google compares it with the first EmbeddingGemma, our v1: 78.68 against 68.76 on MTEB Code, about 14% better, and 61.36 against 61.15 on MTEB Multilingual, which the launch post calls matching its predecessor’s multilingual text performance [1, 2].

An embedding model turns a text into a list of numbers, a vector, so that texts with similar meanings land close together; search returns the passages closest to the question. MTEB Multilingual averages many kinds of task, from classification and clustering to sentence similarity and retrieval [4]. We measured one of them, retrieval: given a question, put the passages that answer it at the top. That’s the job of a search box, and the first step when an LLM answers from your documents, often called RAG. Our result covers that job on these sets, so it doesn’t contradict Google’s average.

2. What we ran

We searched the way Stuga, our open-source document workspace, searches: its prompts, vector width, keyword search and fusion. We have no relationship with Google, Ollama or any other vendor whose model we tested, and we paid list price for every hosted call.

Sets. Two public benchmarks whose questions and relevant passages were marked by people:

Table 1. The test sets.
SetQuestionsPassagesWhat it is
MIRACL Korean21343,293Wikipedia, hard negatives
MIRACL Chinese39381,309Wikipedia, hard negatives
MIRACL English799178,768Wikipedia, hard negatives
BRIGHT StackOverflow117107,081Technical questions, documentation and forum pages

A check on the Chinese result, on four C-MTEB sets, is in section 3.

Models. Ten models: nine on MIRACL, six of them local through Ollama and three hosted on Amazon Bedrock, as served on 7 October 2026, and OpenAI’s text-embedding-3-large on BRIGHT only.

Table 2. The lineup. Precision as each Ollama 0.40.0 tag reports it, except v2’s bf16 tag, known by its name. bf16, BF16 and F16 are 16-bit formats; mxfp8 and Q8_0 are 8-bit; nvfp4 is 4-bit.
ModelRun asPrecisionWidthSets
EmbeddingGemma v2Ollama embeddinggemma-2:270mnvfp4 (default)768MIRACL ko zh en, BRIGHT, C-MTEB
EmbeddingGemma v2Ollama embeddinggemma-2:270m-bf16-textbf16768MIRACL ko zh en, BRIGHT
EmbeddingGemma v2Ollama embeddinggemma-2:270m-mxfp8-textmxfp8768MIRACL ko zh en
EmbeddingGemma v2, no promptsOllama embeddinggemma-2:270mnvfp4768MIRACL ko zh en
EmbeddingGemma v2sentence-transformers google/embeddinggemma-2bf16768MIRACL ko
EmbeddingGemma v1Ollama embeddinggemma:300mBF16768MIRACL ko zh en, BRIGHT, C-MTEB
bge-m3Ollama bge-m3F161,024MIRACL ko zh en, BRIGHT
nomic-embed-text-v2-moeOllama nomic-embed-text-v2-moeF16768MIRACL ko zh en
Snowflake Arctic Embed 2Ollama snowflake-arctic-embed2F161,024MIRACL ko zh en
Qwen3-Embedding 0.6BOllama qwen3-embedding:0.6bQ8_01,024MIRACL ko zh en
Cohere Embed Multilingual v3Bedrock cohere.embed-multilingual-v3hosted1,024MIRACL ko zh en, BRIGHT
Cohere Embed v4Bedrock us.cohere.embed-v4:0hosted1,024MIRACL ko zh en, BRIGHT
Amazon Titan Text Embeddings V2Bedrock amazon.titan-embed-text-v2:0hosted1,024MIRACL ko zh en, BRIGHT, C-MTEB
OpenAI text-embedding-3-largeOpenAI text-embedding-3-largehosted1,024BRIGHT

How each model was called. Each model got what a Stuga node sends it:

Scoring.

3. MIRACL: Korean, Chinese and English

3.1 One question

Example 1 shows the first three passages each model returned for one question, both at bf16 with vectors alone.

QuestionWhat is the longest snake in the world?

EmbeddingGemma v1bf16, vectors alone

  1. 1
    List of largest snakes Judged relevant

    “Although it is generally accepted that the reticulated python is the world's longest living snake, most length estimates longer than 6.35 m (20 ft 10 in) have…”

  2. 2

    “The King Cobra is the world's longest venomous snake.”

  3. 3
    Reticulated python Judged relevant

    “The reticulated python ("Python reticulatus") is a species of python found in South Asia and Southeast Asia. They are the world's longest snakes and longest…”

First relevant passage: 1st

EmbeddingGemma v2bf16, vectors alone

  1. 1
    Hydrophis spiralis Not judged

    “This is perhaps the longest species of seasnake, up to .”

  2. 2
    Snake Not judged

    “The now extinct "Titanoboa cerrejonensis" snakes found were in length. By comparison, the largest extant snakes are the reticulated python, which measures…”

  3. 3
    Titanoboa Not judged

    “The only known species is "Titanoboa cerrejonensis", the largest snake ever discovered, which supplanted the previous record holder, "Gigantophis".”

First relevant passage: 4th

Example 1. MIRACL English. Highlighted: judged relevant by MIRACL's annotators. A passage marked "not judged" wasn't rated and may still answer the question, as v2's second one does. v2's first passage is as MIRACL stores it, with the length missing. Text from MIRACL (CC BY-SA 4.0), from the Wikipedia articles named.

3.2 Every question

Table 3. MIRACL hard negatives, 1,405 questions over 303,370 passages, sorted by nDCG@10 with vectors alone. Compare models within a column.
ModelVectors alone, nDCG@10higher is betterHybridhigher is better
AllkozhennDCG@10Recall@24
bge-m363.970.263.757.856.384.8
Cohere Embed Multilingual v361.666.160.957.756.083.6
nomic-embed-text-v2-moe61.266.661.555.553.382.0
EmbeddingGemma v1, bf1661.164.463.055.854.483.0
Snowflake Arctic Embed 260.666.261.354.354.582.7
Cohere Embed v460.262.360.957.554.781.9
Qwen3-Embedding 0.6B56.757.658.753.953.279.5
EmbeddingGemma v2, bf1655.561.754.750.153.481.7
EmbeddingGemma v2, 8-bit (mxfp8)55.461.754.749.753.381.7
EmbeddingGemma v2, 4-bit (nvfp4), Ollama's default54.159.753.549.053.081.7
Amazon Titan Text Embeddings V251.355.849.249.051.879.5
BM25 alone27.934.319.629.7——
MIRACL’s hard negatives were picked partly by BM25, and a passage nobody judged counts as not relevant, which may work against the keyword half of hybrid search. Hybrid scored below vectors alone for every model here except Amazon Titan Text Embeddings V2.

3.3 Where keywords help

On MIRACL, adding keyword search lowered most scores (Table 3), yet it can still find what vectors miss, such as a name. Example 2 is one question, with v2 at bf16.

QuestionHow old was Christian von Ehrenfels when he died?

Vectors aloneEmbeddingGemma v2, bf16

  1. 1
    Christian Stauffer Not judged

    “A few months after his exile, (April 6, 1672) Christian died of old age in Dirmstein, Germany. He was 93 years old.”

  2. 2

    “He died at the age of 55.”

  3. 3

    “There he studied philosophy, was a pupil of Franz Brentano and Alexius Meinong, promoted under supervision of Meinong, following him after his move to the…”

First relevant passage: 16th

Hybrid: vectors and keywordsEmbeddingGemma v2, bf16, with BM25

  1. 1

    “Christian von Ehrenfels was born on 20 June 1859 in Rodaun near Vienna and grew up at his father's castle Brunn am Walde in Lower Austria. He joined secondary…”

    vectors alone 10th · keywords 2nd

  2. 2
    Christian von Ehrenfels Judged relevant

    “Christian von Ehrenfels (also "Maria Christian Julius Leopold Freiherr von Ehrenfels"; 20 June 1859 – 8 September 1932) was an Austrian philosopher, and is…”

    vectors alone 16th · keywords 1st

  3. 3
    Christian Stauffer Not judged

    “A few months after his exile, (April 6, 1672) Christian died of old age in Dirmstein, Germany. He was 93 years old.”

    vectors alone 1st · keywords 46th

First relevant passage: 2nd

Example 2. MIRACL English. Highlighted: judged relevant by MIRACL's annotators; "not judged" passages weren't rated. Under each hybrid result, where each half of the search ranked it. Text from MIRACL (CC BY-SA 4.0), from the Wikipedia articles named.

By meaning alone, v2 put two other men called Christian first and the relevant passage 16th. Keyword search ranked it 1st, on the words Christian, von and Ehrenfels, and the fused list put it 2nd. This is one of 20 English questions where hybrid search lifted v2’s first relevant passage from below 10th into the top 3. The reverse, a relevant passage in the top 3 by vectors pushed below 10th by hybrid search, happened on 36. v1 had this passage first with vectors alone.

3.4 A second Chinese check

To test the Chinese result on text other than Wikipedia, and on passages that weren’t pooled from BM25, we ran four C-MTEB retrieval sets [11], about 100,000 passages each. v2 ran there only as Ollama’s default tag, not its bf16 build, so the comparison is with the 4-bit build. With vectors alone, v1 scored higher on three of them and the test couldn’t tell the two apart on e-commerce. Each of those gaps was smaller than MIRACL Chinese’s against the same tag (Table 4).

Table 4. Chinese sets, v1 against Ollama’s default tag of v2 (nvfp4), nDCG@10. Differences are v1 minus v2, with 95% intervals from 2,000 resamples of each set’s questions. MIRACL Chinese, against the same tag, for comparison.
SetTextQuestionsVectors alone, nDCG@10higher is betterHybrid differenceabove zero: v1 ahead
v1v2Differenceabove zero: v1 ahead
C-MTEB DuRetrievalWeb search2,00078.875.5+3.3 [2.6, 4.0]+1.0 [0.6, 1.4]
C-MTEB EcomRetrievalE-commerce1,00059.959.90.0 [−1.6, 1.6]+1.5 [0.4, 2.5]
C-MTEB MedicalRetrievalMedical1,00049.943.1+6.8 [5.1, 8.5]+2.9 [1.7, 4.0]
C-MTEB CovidRetrievalCOVID-19 news94978.575.8+2.7 [1.2, 4.0]+1.2 [0.2, 2.3]
MIRACL ChineseWikipedia39363.053.5+9.5 [7.1, 12.2]+1.4 [−0.1, 3.0]

4. Precision and prompts

4.1 Ollama’s 4-bit default

Table 5. v2 by build on MIRACL Korean, 213 questions, with v1 below.
ModelRun asnDCG@10higher is betterRecall@100higher is betterHybrid nDCG@10higher is better
EmbeddingGemma v2sentence-transformers, bf1662.497.461.9
EmbeddingGemma v2Ollama, bf1661.797.461.9
EmbeddingGemma v2Ollama, mxfp861.797.461.9
EmbeddingGemma v2Ollama, nvfp4 (default)59.796.261.4
EmbeddingGemma v1Ollama, BF1664.496.962.0

Through sentence-transformers, v2 scored 62.4 on Korean, +0.7 [0.2, 1.3] against Ollama’s bf16 tag, with the same Recall@100: Ollama’s bf16 build came close to it. We checked Korean only, and the check doesn’t tell us where the gap to v1 comes from.

Over the three languages, with vectors alone:

If you run v2 in Ollama for text search, pull embeddinggemma-2:270m-bf16-text or embeddinggemma-2:270m-mxfp8-text.

4.2 Send the prompts

Google’s model card says omitting the prefix “still works but reduces precision” [2]. Example 3 is one question, on Ollama’s default tag of v2, sent with its prompts and as raw text.

QuestionWhat is a civil war?

With its promptsEmbeddingGemma v2, Ollama's default tag

task: search result | query: What is a civil war?
  1. 1
    Civil war Judged relevant

    “James Fearon, a scholar of civil wars at Stanford University, defines a civil war as "a violent conflict within a country fought by organized groups that aim…”

  2. 2
    Civil War Not judged

    “A civil war is an armed conflict within a nation. It is also commonly used is titles or subjects of publication and other works of art, and sometimes in local…”

  3. 3
    Civil war Not judged

    “A civil war is a high-intensity conflict, often involving regular armed forces, that is sustained, organized and large-scale. Civil wars may result in large…”

First relevant passage: 1st

Raw textThe same tag, no prompts

What is a civil war?
  1. 1
    Civil War Not judged

    “Civil War may specifically refer to:”

  2. 2
    Civil War Not judged

    “A civil war is an armed conflict within a nation. It is also commonly used is titles or subjects of publication and other works of art, and sometimes in local…”

  3. 3
    Civil war Not judged

    “The Geneva Conventions do not specifically define the term "civil war"; nevertheless, they do outline the responsibilities of parties in "armed conflict not of…”

First relevant passage: 4th

Example 3. MIRACL English. Passages got "title: none | text: " in front with the prompts, and nothing without. Highlighted: judged relevant by MIRACL's annotators; "not judged" passages weren't rated. Text from MIRACL (CC BY-SA 4.0), from the Wikipedia articles named.

Sent raw, a list’s lead-in came first, and the definition MIRACL judged relevant fell to 4th, though an unjudged one-line definition stayed 2nd in both lists. This is one of 53 English questions where the prompts put a relevant passage first and raw text put its first relevant passage 3rd to 10th; the reverse happened on 13. Exploratory: sent raw, a passage under 80 characters came first on 173 questions, against 60 with the prompts.

Over the three languages, raw text scored 50.5 against 54.1 with the prompts, −3.6 [−4.7, −2.4]. English fell most, from 49.0 to 42.8; MIRACL Chinese from 53.5 to 49.3; Korean from 59.7 to 59.3. In hybrid search the difference was −1.4 [−2.1, −0.7]. If your code embeds raw text, add the prefixes yourself.

5. BRIGHT StackOverflow (exploratory)

Table 6. BRIGHT StackOverflow, 117 questions over 107,081 passages, sorted by nDCG@10 with vectors alone. No paired intervals.
ModelnDCG@10higher is betterRecall@100higher is betterHybrid nDCG@10higher is better
EmbeddingGemma v1, bf1616.461.019.2
Cohere Embed Multilingual v315.952.416.3
Amazon Titan Text Embeddings V212.853.018.4
Cohere Embed v412.748.116.7
OpenAI text-embedding-3-large12.754.418.0
EmbeddingGemma v2, 4-bit (nvfp4), Ollama's default10.547.017.0
EmbeddingGemma v2, bf1610.446.917.2
bge-m310.244.714.3
BM25 alone14.0——

6. Switching models moves the distances (exploratory)

Many apps drop a match by meaning when it’s too far from the question. Cosine distance is one minus the cosine similarity of two vectors: 0 when they point the same way, larger as texts grow less alike, so lower is closer. How far is too far depends on the model.

Keeping that cutoff when you switch from v1 to v2 lets nearly every random passage through. Set a cutoff for each model from that model’s own distances.

8. In Stuga

Semantic search adds search by meaning to Stuga’s keyword search, and Settings suggests a model for it from this benchmark. In Stuga 0.1.12:

AI is off until a node administrator sets it up, and with Ollama on the same machine the text stays there.

9. Limitations

10. Reproduce

The code, the commands and every result file are in stuga-dev/experiments. The sets download at pinned revisions. The vectors aren’t committed, so a fresh checkout embeds every set before it scores. scripts/examples.ts picks the examples from the same vectors and writes results/2026-10-07/examples.json, with the questions it passed over.

References

  1. Google. EmbeddingGemma 2: an open, lightweight multimodal embedding model. 6 October 2026.
  2. Google DeepMind. EmbeddingGemma 2 model card. Hugging Face, 2026.
  3. X. Zhang, N. Thakur, O. Ogundepo, E. Kamalloo, D. Alfonso-Hermelo, X. Li, Q. Liu, M. Rezagholizadeh, J. Lin. MIRACL: A Multilingual Retrieval Dataset Covering 18 Diverse Languages. TACL 11, 2023.
  4. K. Enevoldsen et al. MMTEB: Massive Multilingual Text Embedding Benchmark. arXiv:2502.13595, 2025.
  5. H. Su et al. BRIGHT: A Realistic and Challenging Benchmark for Reasoning-Intensive Retrieval. arXiv:2407.12883, 2024.
  6. K. Järvelin, J. Kekäläinen. Cumulated Gain-Based Evaluation of IR Techniques. ACM Transactions on Information Systems 20(4), 2002.
  7. S. Robertson, H. Zaragoza. The Probabilistic Relevance Framework: BM25 and Beyond. Foundations and Trends in Information Retrieval 3(4), 2009.
  8. G. V. Cormack, C. L. A. Clarke, S. Büttcher. Reciprocal Rank Fusion Outperforms Condorcet and Individual Rank Learning Methods. SIGIR, 2009.
  9. B. Efron, R. J. Tibshirani. An Introduction to the Bootstrap. Chapman & Hall, 1993.
  10. N. Reimers, I. Gurevych. Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks. EMNLP, 2019.
  11. S. Xiao, Z. Liu, P. Zhang, N. Muennighoff, D. Lian, J.-Y. Nie. C-Pack: Packed Resources For General Chinese Embeddings. SIGIR, 2024.