Clara Jiménez Recio
tinyurl.com/gatos-mongo
1
Búsqueda Textual
True Origins
1
Búsqueda Textual
1
Búsqueda Textual
True Origins
{
"name": "True Origins Pure Adult",
"description": "Alimento completo True Origins Pure Adult para gatos esterilizados",
"composition": "Proteína de pollo deshidratada (30%), Pollo fresco (26%), Patata (14%), Proteína de guisante,...",
"characteristics": [
"Este pienso refuerza el sistema muscular de tu gato.",
"Contiene taurina que mejora el funcionamiento del corazón.",
"Contiene un alto nivel vitamínico.",
"Alimento completo para tus mininos.",
...
]
}
👌
2
MongoDB Atlas Search
3
Search Index
{
"name": {
"type": "String"
}
}
{
"name": {
"type": ["String"]
}
}
{
"analyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"name": {
"type": "string"
}
}
}
}
string, array of strings
3
Search Index
{
"translations": [
{
"lang": {
"type": "String"
},
"name": {
"type": "String"
}
}
]
}
{
"analyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"translations": {
"dynamic": false,
"type": "embeddedDocuments",
"fields": {
"name": {
"type": "string"
}
}
}
}
}
}
array of objects
3
Search Index
{
"analyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"translations": {
"type": "document",
"fields": {
"es": {
"type": "document",
"fields": {
"name": {
"type": "string"
}
}
},
"en": {
"type": "document",
"fields": {
"name": {
"type": "string"
}
}
}
...
}
}
}
}
}
{
"translations": {
"es": {
"name": {
"type": "String"
}
},
"en": {
"name": {
"type": "String"
}
}
...
}
}
dictionary
4
Analyzers
pienso
gatos
esterilizados
pienso
especial
para
gatos
esterilizados
🔎 Pienso gatos esterilizados
{
"description": "Pienso especial para gatos ESTERILIZADOS"
}
Analyzer
Analyzer
Tokens
🕵️♀️
🕵️♀️
4
Analyzers
Analyzer | Separator | Transformation | Case sensitive | Only exact matches |
---|---|---|---|---|
Standard | word boundaries (language-neutral) | lowercase | No | No |
Simple | non-letter characters | lowercase | No | No |
Whitespace | whitespaces | none | Yes | No |
Keyword | none | none | Yes | Yes |
4
Analyzers
Name | Standard | Simple | Whitespace | Keyword |
---|---|---|---|---|
True Origins | true, origins | true, origins | True, Origins | True Origins |
Nature's Variety | nature's, variety | nature, s, variety | Nature's, Variety | Nature's Variety |
Forza 10 | forza, 10 | forza | Forza, 10 | Forza 10 |
Tokens 🇦🇧🇨
4
Analyzers
Analyzer | Tokens | Matches |
---|---|---|
Standard | true, origins | ✅ |
Simple | true, origins | ✅ |
Whitespace | True, Origins | ✅ |
Keyword | True Origins | ✅ |
🔎 True Origins
4
Analyzers
Analyzer | Tokens | Matches |
---|---|---|
Standard | true, origins | ✅ |
Simple | true, origins | ✅ |
Whitespace | True, Origins | ❌ |
Keyword | True Origins | ❌ |
🔎 true origins
4
Analyzers
Analyzer | Tokens | Matches |
---|---|---|
Standard | nature's, variety | ✅ |
Simple | nature, s, variety | ✅ |
Whitespace | Nature's, Variety | ✅ |
Keyword | Nature's Variety | ✅ |
🔎 Nature's Variety
4
Analyzers
Analyzer | Tokens | Matches |
---|---|---|
Standard | nature's, variety | ✅ |
Simple | nature, s, variety | ✅ |
Whitespace | Nature's, Variety | ✅ |
Keyword | Nature's Variety | ❌ |
🔎 Nature's
4
Analyzers
🔎 Forza 10
Analyzer | Tokens | Matches |
---|---|---|
Standard | forza, 10 | ✅ |
Simple | forza | ✅ |
Whitespace | Forza, 10 | ✅ |
Keyword | Forza 10 | ✅ |
4
Analyzers
🔎 10
Analyzer | Tokens | Matches |
---|---|---|
Standard | forza, 10 | ✅ |
Simple | forza | ❌ |
Whitespace | Forza, 10 | ✅ |
Keyword | Forza 10 | ❌ |
5
Search Query
Operators:
text
phrase
compound
embeddedDocument
autocomplete
{
"$search": {
"autocomplete": {
"query": "Pien",
"path": "name",
"fuzzy": {
"maxEdits": 1,
"maxExpansions": 10,
"prefixLength": 2
}
}
}
}
{
"$search": {
"text": {
"query": "Pienso",
"path": ["name", "description"],
"fuzzy": {
"maxEdits": 1,
"maxExpansions": 10,
"prefixLength": 0
}
}
}
}
{
"$search": {
"phrase": {
"query": "Pienso gatos esterilizados",
"path": ["name", "description"],
"slop": 2
}
}
}
{
"$search": {
"embeddedDocument": {
"path": "translations",
"operator": {
"text": {
"path": "translations.name",
"query": "Pienso"
}
}
}
}
}
{
"$search": {
"compound": {
"must": [
{
"text": {
"query": "Pienso",
"path": "name"
}
}
],
"should": [
{
"phrase": {
"query": "Pienso gatos esterilizados",
"path": "description",
"slop": 2
}
}
]
}
}
}
6
Autocomplete
6
Autocomplete
{
"analyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"name": {
"type": "autocomplete",
"tokenization": "edgeGram",
"minGrams": 2,
"maxGrams": 8,
"foldDiacritics": true
}
}
}
}
standard → pienso, para, gatos
edgeGram
pi, pie, pien, piens, pienso, pienso[space], pienso p, pa, par, para, para[space], para g, para ga, para gat, ga, gat, gato, gatos
rightEdgeGram
os, tos, atos, gatos, [space]gatos, a gatos, ra gatos, ra, ara, para, [space]para, o para, so para, nso para, so, nso, enso, ienso, pienso
nGram
pi, pie, pien, piens, pienso, pienso[space], pienso p, ie, ien, iens, ienso, ienso[space], ienso p, ienso pa, en, ens, enso, enso[space], enso p, enso pa, enso par, ns, nso, nso[space], nso p, nso pa, nso par, nso para,... 😵
Autocomplete Index (string, array of strings)
6
Autocomplete
{
"analyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"translations": {
"dynamic": false,
"type": "embeddedDocuments",
"fields": {
"name": {
"type": "autocomplete",
"tokenization": "edgeGram",
"minGrams": 2,
"maxGrams": 8,
"foldDiacritics": true
}
}
}
}
}
}
Autocomplete Index (array of objects)
6
Autocomplete
{
"analyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"translations": {
"type": "document",
"fields": {
"es": {
"type": "document",
"fields": {
"name": {
"type": "autocomplete",
"tokenization": "edgeGram",
"minGrams": 2,
"maxGrams": 8,
"foldDiacritics": true
}
}
},
...
}
}
}
}
}
{
"$search": {
"autocomplete": {
"query": "Pien",
"path": ["translations.es.name", "translations.en.name", ...]
}
}
}
🇪🇸🇫🇷🇩🇪🇺🇲🏴🇵🇹🇳🇱🇨🇳
😶🌫️
Autocomplete Index (dictionary)
compound 😵💫
6
Autocomplete
Name | Standard | Simple | Whitespace | Keyword |
---|---|---|---|---|
True Origins | tr, tru, true, true[space], true o, true or, true ori, or, ori, orig, origi, origin, origins | tr, tru, true, true[space], true o, true or, true ori, or, ori, orig, origi, origin, origins | Tr, Tru, True, True[space], True O, True Or, True Ori, Or, Ori, Orig, Origi, Origin, Origins | Tr, Tru, True, True[space], True O, True Or, True Ori |
Nature's Variety | na, nat, natu, natur, nature, nature', nature's, va, var, vari, varie, variet, variety | na, nat, natu, natur, nature, nature', nature's, va, var, vari, varie, variet, variety | Na, Nat, Natu, Natur, Nature, Nature', Nature's, Va, Var, Vari, Varie, Variet, Variety | Na, Nat, Natu, Natur, Nature, Nature', Nature's |
Forza 10 | fo, for, forz, forza, forza[space], forza 1, forza 10, 10 | fo, for, forz, forza | Fo, For, Forz, Forza, Forza[space], Forza 1, Forza 10, 10 | Fo, For, Forz, Forza, Forza[space], Forza 1, Forza 10 |
Tokens 🇦🇧🇨
(usando edgeGram)
7
"No es un bug, es una feature"
{
"$search": {
"autocomplete": {
"query": "Pienso",
"path": "name"
}
}
}
{
"$search": {
"autocomplete": {
"query": "Pienso gatos",
"path": "name"
}
}
}
7
"No es un bug, es una feature"
{
"$search": {
"compound": {
"must": [
{
"autocomplete": {
"query": "Pienso",
"path": "name"
}
},
{
"autocomplete": {
"query": "gatos",
"path": "name"
}
}
]
}
}
}
7
"No es un bug, es una feature"
{
"$search": {
"autocomplete": {
"query": "Pienso gatos",
"path": "name",
"tokenOrder": "sequential",
}
}
}
7
"No es un bug, es una feature"
8
Búsqueda Semántica
¿Qué pienso tiene más proteína de origen animal? También quiero que tenga l-carnitina y taurina
8
Búsqueda Semántica
8
Búsqueda Semántica
8
Búsqueda Semántica
{
"name": "True Origins Pure Adult",
"description": "Alimento completo True Origins Pure Adult para gatos esterilizados",
"composition": "Proteína de pollo deshidratada (30%), Pollo fresco (26%), Patata (14%), Proteína de guisante,...",
"characteristics": [
"Este pienso refuerza el sistema muscular de tu gato.",
"Contiene taurina que mejora el funcionamiento del corazón.",
"Contiene un alto nivel vitamínico.",
"Alimento completo para tus mininos.",
...
]
}
¿Qué pienso tiene más proteína de origen animal? También quiero que tenga l-carnitina y taurina
🤔
8
Búsqueda Semántica
{
"name": "True Origins Pure Adult",
"description": "Alimento completo True Origins Pure Adult para gatos esterilizados",
"composition": "Proteína de pollo deshidratada (30%), Pollo fresco (26%), Patata (14%), Proteína de guisante,...",
"characteristics": [
"Este pienso refuerza el sistema muscular de tu gato.",
"Contiene taurina que mejora el funcionamiento del corazón.",
"Contiene un alto nivel vitamínico.",
"Alimento completo para tus mininos.",
...
]
}
¿Qué pienso tiene más proteína de origen animal? También quiero que tenga l-carnitina y taurina
🤔
8
Búsqueda Semántica
{
"name": "True Origins Pure Adult",
"description": "Alimento completo True Origins Pure Adult para gatos esterilizados",
"composition": "Proteína de pollo deshidratada (30%), Pollo fresco (26%), Patata (14%), Proteína de guisante,...",
"characteristics": [
"Este pienso refuerza el sistema muscular de tu gato.",
"Contiene taurina que mejora el funcionamiento del corazón.",
"Contiene un alto nivel vitamínico.",
"Alimento completo para tus mininos.",
...
]
}
¿Qué pienso tiene más proteína de origen animal? También quiero que tenga l-carnitina y taurina
🤔
9
MongoDB Atlas Vector Search
[0.9, 0.02, 0.1,...]
🔎 Question
[0.9, 0.08, 0.1,...]
MongoDB Atlas
Embedding
1
Store (& Index)
2
Embedding
3
$vectorSearch
4
¿Qué pienso tiene más proteína de origen animal? También quiero que tenga l-carnitina y taurina
composition_emb
composition
5
Matched Documents
Approximate Nearest Neighbors (ANN)
9
MongoDB Atlas Vector Search
Query Vector
Nearest Neighbor
9
MongoDB Atlas Vector Search
Entry Point
Query Vector
Nearest Neighbor
9
MongoDB Atlas Vector Search
Query Vector
Entry Point
Nearest Neighbor
9
MongoDB Atlas Vector Search
{
"fields": [
{
"type": "vector",
"path": "composition_emb",
"numDimensions": 2048,
"similarity": "euclidean | cosine | dotProduct"
},
{
"type": "filter",
"path": "price"
},
...
]
}
✅
9
MongoDB Atlas Vector Search
{
"fields": [
{
"type": "vector",
"path": "composition_emb",
"numDimensions": 2048,
"similarity": "euclidean | cosine | dotProduct"
},
{
"type": "filter",
"path": "price"
},
...
]
}
9
MongoDB Atlas Vector Search
{
"$vectorSearch": {
"index": "index_name",
"path": "composition_emb",
"queryVector": [0.9, 0.08, 0.1,...],
"numCandidates": 20,
"limit": 1,
"filter": {
price: { $lt: 50 }
}
}
}
efSearch
[0.9, 0.02, 0.1,...]
🔎 Question
[0.9, 0.08, 0.1,...]
MongoDB Atlas
Embedding
1
2
Embedding
3
$vectorSearch
4
¿Qué pienso tiene más proteína de origen animal? También quiero que tenga l-carnitina y taurina
composition_emb
composition
Answer
Retrieval-augmented generation (RAG)
6
7
5
5
Context Documents
Prompt
LLM
10
MongoDB Atlas Vector Search + LLM
Store (& Index)
10
MongoDB Atlas Vector Search + LLM
OpenAI
LangChain
LlamaIndex
Hugging Face
Cohere
Nomic
Clara Jiménez Recio
(aka )
Nita