Hogyan készíts full-text keresőt a MongoDB Atlas Search segítségével?

Üdvözlünk a modern alkalmazásfejlesztés világában, ahol a felhasználók elvárják, hogy pillanatok alatt megtalálják, amit keresnek. Legyen szó e-kereskedelmi termékekről, dokumentumokról, blogbejegyzésekről vagy tudásbázisokról, egy hatékony keresőmotor elengedhetetlen a jó felhasználói élményhez. De valljuk be, egy robusztus, skálázható és intelligens full-text kereső felépítése a nulláról óriási feladat lehet. Szerencsére létezik egy elegáns megoldás: a MongoDB Atlas Search.

Ebben a részletes útmutatóban lépésről lépésre bemutatjuk, hogyan hozhatsz létre egy erőteljes full-text keresőt a MongoDB Atlas Search segítségével. Nem csupán az alapokat vesszük át, hanem betekintést nyerünk a haladóbb funkciókba és a bevált gyakorlatokba is, hogy a keresési élményt a következő szintre emelhesd.

Miért épp a MongoDB Atlas Search?

Amikor a keresésről van szó, sokan gondolnak különálló rendszerekre, mint az Elasticsearch vagy a Solr. Ezek kiváló eszközök, de integrálásuk egy meglévő MongoDB alapú alkalmazásba extra komplexitást és karbantartási terheket jelenthet. Itt jön képbe az Atlas Search!

A MongoDB Atlas Search nem más, mint egy natív, beépített keresési motor, amely közvetlenül a MongoDB Atlasban fut. Apache Lucene alapokra épül, így örökli annak robusztusságát és teljesítményét, miközben zökkenőmentesen integrálódik a MongoDB adatmodelljével és aggregációs pipeline-jával.

Néhány kulcsfontosságú előnye:

* **Natív integráció:** Nincs szükség külön infrastruktúra beállítására vagy adatszinkronizációra. Az adataid már a MongoDB-ben vannak, az Atlas Search pedig közvetlenül rajtuk dolgozik.
* **Egyszerűség és hatékonyság:** Felhőalapú, menedzselt szolgáltatásként az infrastruktúra kezelésével kapcsolatos terhek leesnek a válladról. Kevesebb üzemeltetési gond, több fejlesztési idő.
* **Erőteljes funkcionalitás:** Különböző operátorokat és beállításokat kínál a precíz és releváns keresési eredményekért, beleértve a full-text keresést, rangsorolást, facetinget, autocompletiont és még sok mást.
* **Skálázhatóság:** Az Atlas platform része, így könnyedén skálázható az igényeidnek megfelelően.

Előkészületek: Mire lesz szükséged?

Mielőtt belevágnánk a kódolásba és a konfigurálásba, győződj meg róla, hogy az alábbiakkal rendelkezel:

1. **MongoDB Atlas fiók:** Ha még nincs, regisztrálj ingyenesen az Atlas weboldalán.
2. **MongoDB Atlas Cluster:** Hozz létre egy ingyenes (M0 Sandbox) vagy fizetős (M10+) cluster-t az Atlasban.
3. **Mintaadatok:** A gyakorlati példákhoz ideális, ha van egy kis adatbázisod. Az Atlasban könnyedén betölthetsz beépített mintaadatokat (pl. `sample_mflix` filmadatbázisát) a cluster-edbe a „Load Sample Dataset” funkcióval. Ezt fogjuk használni a cikkben.

Az Atlas Search Magja: Keresőindexek

A MongoDB Atlas Search nem közvetlenül a nyers adatokon keres, hanem egy keresőindexet használ. Ez az index optimalizálja az adatokat a gyors és releváns keresési lekérdezésekhez, hasonlóan ahhoz, ahogy egy könyv tartalomjegyzéke segít megtalálni egy adott fejezetet.

Mielőtt elkezdenél keresni, létre kell hoznod egy vagy több indexet a gyűjteményeidhez. Az index határozza meg, hogy mely mezők legyenek kereshetők, hogyan legyenek elemezve (pl. szétválasztva szavakra, kisbetűsítve stb.), és milyen típusú keresési operátorokat használhatsz rajtuk.

Főbb fogalmak az indexekkel kapcsolatban:

* **Analyzers (Elemzők):** Ezek felelnek az adatok feldolgozásáért indexelés előtt és a keresési lekérdezések feldolgozásáért futásidőben. Egy elemző szétszedi a szöveget tokenekre (szavakra), eltávolítja a stop szavakat (pl. „a”, „az”, „és”), kisbetűsít, és elvégezhet stemminget (szavak tőre való visszavezetését).
* `standard` analyzer: Alapértelmezett, jól működik a legtöbb szöveges tartalomhoz.
* `keyword` analyzer: A teljes mező tartalmát egyetlen tokenként kezeli, hasznos ID-k vagy pontos egyezésekhez.
* Egyéb beépített elemzők és custom analyzers (egyedi elemzők) létrehozásának lehetősége.
* **Mappings (Leképezések):** Meghatározzák, hogy az index melyik mezőket tartalmazza a gyűjteményből, és hogyan legyenek ezek indexelve.
* `dynamic` mapping: Automatikusan indexeli az összes szöveges mezőt. Gyors és egyszerű, de kevésbé finomhangolható.
* `static` mapping: Pontosan megadod, melyik mezőket és milyen beállításokkal indexelje. Ez a precízebb és ajánlottabb módszer komplexebb esetekben.
* **Alias:** Lehetővé teszi, hogy egy indexet egy alias néven hivatkozz. Ez rendkívül hasznos index frissítésekor vagy A/B tesztelésnél, mivel az alkalmazásodnak csak az alias nevet kell ismernie.

Lépésről lépésre: Keresőmotor építése

Most pedig lássuk a gyakorlatban, hogyan hozhatunk létre egy keresőmotort a `sample_mflix.movies` gyűjteményhez.

1. MongoDB Atlas Cluster beállítása és Adatok betöltése

Ha még nem tetted meg, hozz létre egy cluster-t az Atlasban. Miután ez kész, navigálj a cluster „…” menüjére, és válaszd a „Load Sample Dataset” opciót. Ez betölti többek között a `sample_mflix` adatbázist a `movies` gyűjteménnyel, ami ideális a gyakorlásra.

2. Keresőindex létrehozása

Navigálj a MongoDB Atlas UI-ban a bal oldali menüben a **”Search”** fülre.

1. Kattints a **”Create Search Index”** gombra.
2. Válaszd az **”Atlas Search”** (az alapértelmezett opció) lehetőséget, majd kattints a „Next” gombra.
3. Válaszd ki az adatbázist és a gyűjteményt:
* **Database:** `sample_mflix`
* **Collection:** `movies`
4. Válaszd a **”JSON Editor”** lehetőséget, ami nagyobb kontrollt biztosít az index felett.
5. A megadott JSON mezőbe illessz be a következő index definíciót. Ez az index a filmek `title` (cím), `plot` (cselekmény) és `genres` (műfajok) mezőin engedélyezi a full-text keresést:

„`json
{
„mappings”: {
„dynamic”: false,
„fields”: {
„genres”: {
„type”: „string”
},
„plot”: {
„type”: „text”
},
„title”: {
„type”: „text”
}
}
}
}
„`
* Itt beállítottuk a `dynamic: false` értéket, ami azt jelenti, hogy explicit módon meg kell adnunk minden mezőt, amit indexelni szeretnénk.
* A `title` és `plot` mezőket `text` típusúra állítottuk. Ez azt jelenti, hogy ezeken a mezőkön a szöveges adatok elemződnek (szétválnak szavakra, kisbetűsödnek stb.), így lehetővé téve a releváns full-text keresést.
* A `genres` (műfajok) mezőt `string` típusúra állítottuk. Ez azt jelenti, hogy a teljes érték egyetlen entitásként lesz indexelve, ami pontos egyezésekhez vagy szűrőkhöz ideális. Például, ha valaki „Comedy” műfajra keres, pontosan a „Comedy” műfajú filmeket kapja meg, nem pedig azokat, amelyekben a „Comedy” szó más szövegkörnyezetben szerepel.

6. Nevezd el az indexet `default` néven (ez egy gyakori konvenció, de bármi lehet).
7. Kattints a **”Create Index”** gombra.

Az index létrehozása eltarthat néhány percig, az adatok mennyiségétől függően. Ezalatt az Atlas Search indexeli a `movies` gyűjteményben található dokumentumok releváns mezőit.

3. Keresési lekérdezések végrehajtása

Miután az index elkészült, elkezdhetünk kereséseket végezni a MongoDB aggregation pipeline-on keresztül a `$search` operátor használatával.

Nyisd meg a **”Query Your Data”** fület a „Search” oldalon, vagy a MongoDB Shell-t/Compass-t a cluster-edhez csatlakozva.

Alap full-text keresés (`text` operátor)

Keresünk filmeket, amelyek címében vagy cselekményében szerepel a „space” szó.

„`javascript
db.collection(‘movies’).aggregate([
{
$search: {
index: ‘default’, // Az általunk létrehozott index neve
text: {
query: ‘space’,
path: [‘title’, ‘plot’]
}
}
},
{
$project: {
_id: 0,
title: 1,
plot: 1,
genres: 1,
score: { $meta: ‘searchScore’ } // A keresési relevancia pontszáma
}
},
{
$limit: 5 // Csak az első 5 találatot jelenítjük meg
}
]).toArray()
„`
Ez a lekérdezés visszaadja azokat a filmeket, ahol a „space” szó megtalálható a `title` vagy `plot` mezőben. A `score` mező mutatja, mennyire releváns a találat.

Több mezőn történő keresés (`compound` operátor)

A `compound` operátor lehetővé teszi, hogy több keresési feltételt kombináljunk logikai operátorokkal (AND, OR, NOT).

Keresünk filmeket, amelyekben a „bank” szó szerepel a cselekményben ÉS a „Comedy” a műfajok között van:

„`javascript
db.collection(‘movies’).aggregate([
{
$search: {
index: ‘default’,
compound: {
must: [ // Ezeknek a feltételeknek MINDENKÉPP teljesülniük kell
{
text: {
query: ‘bank’,
path: ‘plot’
}
},
{
text: {
query: ‘Comedy’,
path: ‘genres’
}
}
]
}
}
},
{
$project: {
_id: 0,
title: 1,
plot: 1,
genres: 1,
score: { $meta: ‘searchScore’ }
}
},
{
$limit: 5
}
]).toArray()
„`

Autocompletion és javaslatok

Az `autocomplete` operátor kiválóan alkalmas keresési javaslatok nyújtására, ahogy a felhasználó gépel. Ehhez először egy külön indexet kell létrehoznod, vagy frissítened kell a meglévőt egy `autocomplete` típusú mezővel.

Példa index bővítésre (új index vagy `default` index frissítése):

„`json
{
„mappings”: {
„dynamic”: false,
„fields”: {
„genres”: {
„type”: „string”
},
„plot”: {
„type”: „text”
},
„title”: {
„type”: „text”,
„analyzer”: „lucene.standard”,
„searchAnalyzer”: „lucene.standard”
},
„title_autocomplete”: { // Új mező az autocompletionhöz
„type”: „autocomplete”
}
}
}
}
„`
A `title_autocomplete` mező automatikusan kitöltésre kerül a `title` mező alapján. Ha már van index, szerkeszd, ha nincs, hozz létre újat. Miután az index frissült, futtathatsz autocompletion lekérdezéseket:

„`javascript
db.collection(‘movies’).aggregate([
{
$search: {
index: ‘default’, // Vagy az új indexed neve
autocomplete: {
query: ‘star w’, // A felhasználó által begépelt rész
path: ‘title_autocomplete’,
fuzzy: { // Enyhe elgépelések kezelése
maxEdits: 1,
prefixLength: 2
}
}
}
},
{
$project: {
_id: 0,
title: 1,
score: { $meta: ‘searchScore’ }
}
},
{
$limit: 5
}
]).toArray()
„`
Ez a lekérdezés „star w” beírására olyan címeket javasolhat, mint „Star Wars”, „Star Trek” stb.

Highlighting (kiemelés)

A highlighting segít a felhasználóknak gyorsan megtalálni a keresett kifejezéseket az eredmények között.

„`javascript
db.collection(‘movies’).aggregate([
{
$search: {
index: ‘default’,
text: {
query: ‘king’,
path: [‘title’, ‘plot’],
// Highlighting beállítása
„highlight”: {
„path”: [„title”, „plot”]
}
}
}
},
{
$project: {
_id: 0,
title: 1,
plot: 1,
genres: 1,
score: { $meta: ‘searchScore’ },
highlights: { $meta: ‘searchHighlights’ } // A kiemelt részeket tartalmazó mező
}
},
{
$limit: 1
}
]).toArray()
„`
Az eredmények között megjelenik egy `highlights` mező, ami a kiemelt szövegrészeket tartalmazza `` tagekkel formázva.

Haladó funkciók és optimalizációk

Az Atlas Search képességei messze túlmutatnak az alapvető full-text keresésen. Íme néhány további funkció, amit érdemes megismerni:

* **Faceting:** Lehetővé teszi, hogy a keresési eredményeket kategóriák szerint csoportosítsd és szűrjed, hasonlóan az e-kereskedelmi oldalakon található szűrőkhöz (pl. szűrés árkategória, márka vagy szín szerint).
* **Synonyms (Szinonimák):** Meghatározhatsz szinonima kollekciókat, hogy a keresőmotor megértse, hogy bizonyos szavak vagy kifejezések felcserélhetőek (pl. „mobiltelefon” és „okostelefon”). Ez jelentősen javítja a keresési eredmények relevanciáját.
* **Custom Analyzers (Egyedi elemzők):** Ha a beépített elemzők nem felelnek meg az igényeidnek (pl. specifikus nyelvi sajátosságok vagy domain-specifikus terminológia miatt), létrehozhatsz saját elemzőket.
* **Ranges és Dates (Tartományok és dátumok):** Kereshetsz numerikus vagy dátum tartományokon belül.
* **Relevancia finomhangolása:** Különböző operátorokhoz és mezőkhöz adhatsz `score` (rangsorolási) súlyokat, hogy befolyásold az eredmények sorrendjét.

Bevált gyakorlatok az Atlas Search-hez

Ahhoz, hogy a lehető legjobban kihasználd az Atlas Search-et, érdemes figyelembe venned a következőket:

1. **Gondosan tervezd meg az indexeidet:** Ne indexelj mindent! Csak azokat a mezőket indexeld, amelyekre ténylegesen keresni fogsz. Minél kisebb az index, annál gyorsabb és hatékonyabb a keresés.
2. **Válaszd ki a megfelelő elemzőket:** A `text` mezőkhez általában a `standard` elemző jó kiindulópont, de néha specifikusabb nyelvi elemzőkre vagy egyedi elemzőkre lehet szükség.
3. **Teszteld a lekérdezéseidet:** Használd a „Query Your Data” fület az Atlasban, vagy a Compass aggregációs builderét a lekérdezések teszteléséhez és finomhangolásához.
4. **Figyeld a teljesítményt:** Az Atlas monitorozási eszközei segítenek nyomon követni a keresési lekérdezések teljesítményét és az index méretét.
5. **Használj index aliasokat:** Ha az indexed sémája változik, létrehozhatsz egy új indexet az új sémával, majd átválthatod az alias-t az újra. Ez minimalizálja az állásidőt.
6. **Optimalizáld a lekérdezéseket:** Használj `$limit` és `$skip` operátorokat a lapozáshoz, és a `$project` operátorral csak azokat a mezőket kérd le, amire szükséged van.

Felhasználási esetek

A MongoDB Atlas Search szinte bármilyen alkalmazásban megállja a helyét, ahol hatékony keresésre van szükség:

* **E-kereskedelmi platformok:** Termékek keresése cím, leírás, márka, kategória és egyéb attribútumok alapján.
* **Dokumentumkezelő rendszerek:** Dokumentumok tartalmában való keresés, metaadatok alapján történő szűrés.
* **Hír- és blogoldalak:** Cikkek, bejegyzések keresése cím, szerző, kulcsszavak vagy tartalom alapján.
* **Tudásbázisok és GYIK:** Kérdések és válaszok gyors megtalálása.
* **Social média alkalmazások:** Bejegyzések, profilok, hashtagek keresése.

Összefoglalás

A MongoDB Atlas Search egy rendkívül erőteljes és felhasználóbarát eszköz, amely forradalmasítja a full-text keresőmotorok létrehozását MongoDB alapú alkalmazásokban. Ahelyett, hogy heteket vagy hónapokat töltenél egy komplex keresési infrastruktúra kiépítésével és karbantartásával, az Atlas Search segítségével percek alatt működőképes, skálázható és intelligens keresést implementálhatsz.

Reméljük, hogy ez az útmutató segített megérteni az alapokat, és inspirációt adott a saját keresési megoldásaid kiépítéséhez. Ne habozz kipróbálni, kísérletezni a különböző operátorokkal és beállításokkal – a lehetőségek tárháza végtelen!

CIKK CÍME:
MongoDB Atlas Search: Készíts Full-Text Keresőt Percek Alatt!

Leave a Reply

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük