Ce face Index text și $text
Indexul text împarte textul în cuvinte, elimină cuvintele foarte comune (de legătură) și reduce cuvintele la rădăcină, după limba aleasă. MongoDB acceptă și româna: default_language: 'romanian'. Căutarea nu ține cont de majuscule și nici de diacritice (versiunea 3 a indexului).
$text: { $search: 'caiet pix' } găsește documentele cu oricare dintre cuvinte. O expresie între ghilimele caută fraza exactă, iar -cuvant exclude documentele care îl conțin. Pentru ordonarea după relevanță, proiectează și sortează după { $meta: 'textScore' }. Pentru căutare avansată (autocomplete, toleranță la greșeli) există Atlas Search.
Parametri
| Parametru | Descriere |
|---|---|
camp: 'text' |
Câmpurile incluse în indexul text. |
default_language |
Limba pentru rădăcini și cuvinte ignorate ('romanian', 'english', 'none'). |
weights |
Importanța fiecărui câmp, de exemplu { titlu: 10, descriere: 1 }. |
$search |
Cuvintele căutate; "fraza exacta", -exclus. |
Ce returnează
createIndex: numele indexului. find cu $text: documentele care conțin termenii.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
use magazin
db.produse.insertMany([
{ _id: 1, titlu: 'Caiet dictando A5', descriere: 'Caiet cu 80 de file' },
{ _id: 2, titlu: 'Pix albastru', descriere: 'Pix cu gel, scriere fină' },
{ _id: 3, titlu: 'Rucsac școlar', descriere: 'Rucsac cu buzunar pentru caiet' }
])
Exemplul 1: Index text pe titlu și descriere
Titlul cântărește mai mult decât descrierea la calculul relevanței.
db.produse.createIndex({ titlu: 'text', descriere: 'text' }, { default_language: 'romanian', weights: { titlu: 10, descriere: 1 } })
Ieșire în mongosh
titlu_text_descriere_text
Exemplul 2: Căutarea unui cuvânt
„caiet” apare în primul produs și în descrierea rucsacului; majusculele nu contează.
db.produse.find({ $text: { $search: 'CAIET' } }, { titlu: 1 }).sort({ _id: 1 })
Ieșire în mongosh
[
{ _id: 1, titlu: 'Caiet dictando A5' },
{ _id: 3, titlu: 'Rucsac școlar' }
]
Exemplul 3: Excluderea unui cuvânt
-rucsac elimină rezultatele care conțin „rucsac”.
db.produse.find({ $text: { $search: 'caiet -rucsac' } }, { titlu: 1 })
Ieșire în mongosh
[ { _id: 1, titlu: 'Caiet dictando A5' } ]
Greșeli frecvente
- O colecție poate avea un singur index text; dacă vrei mai multe câmpuri, pune-le pe toate în același index.
$textgăsește cuvinte întregi (după rădăcină), nu bucăți de cuvânt: „cai” nu găsește „caiet”. Pentru prefixe folosește$regexancorat sau Atlas Search.- Fără sortare după
textScore(sau alt câmp), ordinea rezultatelor nu este garantată.
Comenzi înrudite
$regex: Operatorul $regex caută șiruri de caractere care se potrivesc unei expresii regulate (PCRE), cu opțiuni ca i pentru majuscule.getIndexes(): Listează indexurile unei colecții, cu câmpurile, numele și opțiunile fiecăruia (unique, expireAfterSeconds etc.).Index compus: Un index compus pe mai multe câmpuri accelerează interogările care filtrează și sortează după aceste câmpuri, în ordinea lor.