
A program indítása előtt a Northwind adatbázisban lévő Employees táblában létrehozunk egy Full Text Catalog-ot. Ehhez indítsuk el az Enterprise Manager-t, nyissuk meg a Northwind adatbázist, majd ezen belül kattintsunk a jobb gombbal a Fill-Text Catalogs elemen. A megjelenő menüből válasszuk a New Full-Text Catalog menüpontot. Adjuk meg a katalógus nevét és elérési útvonalát (ez utóbbit hagyhatjuk az alapértelmezett értéken). A katalógus nevének bármit megadhatunk, lehet például „Catalog1”. Ha sikerült létrehoznunk a katalógust, akkor a Tables listában kattintsunk a jobb gombbal az Employees táblán, és válasszuk ki a Full-Text Index Table menü Deifne Full-text Indexing on a Table menüpontját.
Megjelenik egy Varázsló, itt kattintsunk a Tovább gombra, majd megint Tovább. A listában jelöljük ki azokat a mezőket, amelyeket fel akarunk venni a Full-Text katalógusba. Jelöljük ki a Notes mező előtti jelölőnégyzetet (megadhatnánk több, karakteres adatot tartalmazó mezőt is, de ezeket a példában nem használjuk). Ezután kattintsunk a Tovább gombra, majd megint Tovább, és Befejezés. Ezután a Full-Text catalogs listában kattintsunk a „Catalog1” (vagy a megadott nevű) elemre a jobb gombbal, és válasszuk a Start Full Population menüpontot. Ha a művelet befejeződött, a Full-Text Catalog készen áll a használatra.
A Full-Text Catalog nagy előnye, hogy akár memo mezőben is kereshetünk szavakat vagy kifejezéseket, ráadásul erre többféle lehetőségünk van:
- egyszerű keresés szóra vagy kifejezésre;
- szó- vagy kifejezés részletre keresés;
- olyan szavak vagy kifejezések keresése, amelyek egy másik szó vagy kifejezés közelében állnak;
- keresés szótőképzéssel (egy szó ragozott és normál változatát is megtalálja);
- a keresésnél a keresett szavak és kifejezések prioritásának megadása;
Az első két lehetőség ezek közül nem kifejezetten új lehetőség, ezeket meg lehet oldani a Full-Text Catalog használata nélkül is. Az utolsó három lehetőség viszont nagyon jól használható összetettebb kereséseknél, akár nagyobb szövegekben is.
A kereséshez a CONTAINS függvényt használhatjuk fel. Ennek első paramétere annak a mezőnek a neve, amiben keresünk. Természetesen csak olyan mező nevét adhatjuk meg, amelyik szerepel a Full-Text Index-ben. Ha minden mezőben keresünk, akkor a mező neve helyett a * karaktert kell használnunk.
SELECT * FROM Employees WHERE CONTAINS(Notes, ’German’);
A függvény formátuma tehát a következő:
CONTAINS(<column>, <contains_search_condition>)
A <contains_search_condition> a keresési feltétel. Ez lehet egy egyszerű szó, vagy kifejezés, de ha összetettebb lekérdezést akarunk létrehozni, akkor azt is megadhatjuk itt. Néhány példában nézzük meg, hogy milyen lehetőségeink vannak:
Az első példa egyértelmű, egyszerű szóra keresünk.
SELECT * FROM Employees WHERE CONTAINS(Notes, 'International');
A második példában már egy összetettebb feltételt adtunk meg, aminek hatása az lesz, hogy az eredményben csak azok a rekordok fognak szerepelni, amelyekben szerepel a „French” szó, és a „University” vagy a „College” szó.
SELECT * FROM Employees WHERE CONTAINS(Notes, ’(”University” OR „College”) AND „French”’);
A harmadik példában azokat a rekordokat kérdezzük le, amelyeknek Notes mezőjében olyan szavak találhatók, amelyek az „inter” karakterekkel kezdődnek (pl. „International”). A keresett szavakat egy Memo szövegben is megtalálja.
SELECT * FROM Employees WHERE CONTAINS(Notes, ’”inter*”’);
A negyedik példa azokat a rekordokat kérdezi le, amelyeknek Notes mezőjében a „French” és a „German” szó egymáshoz közel állnak. A NEAR kulcsszó helyett használhatjuk a ~ karaktert is.
SELECT * FROM Employees WHERE CONTAINS(Notes, ’French NEAR German’);
A negyedik példa a szótőképzéssel történő keresést mutatja be. Ennek módja az alábbi példából jól látszik. A példában azokat a rekordokat kérdezzük le, amelyeknek Notes mezőjében szerepel a „complete” szó valamelyik alakja (pl. „completing”, „completed”, stb.).
SELECT * FROM Employees WHERE CONTAINS(Notes, ’FORMSOF(INFLECTIONAL, Complete)’);
Az utolsó példában rangsoroljuk a keresett szavakat. Az ISABOUT kulcsszó után zárójelben adhatjuk meg a keresett szavakat. A szavak után a weight kulcsszó áll, utána pedig zárójelben egy 0 és 1 közötti szám. A szám a szó vagy kifejezés „súlyát” határozza meg. A nagyobb érték a fontosabb, a kisebb érték pedig a kevésbé fontos szavakhoz tartozik. Ennek hasznát igazán a CONTAINSTABLE függvénynél fogjuk látni, amelynek szintaxisa szinte teljesen megegyezik a CONTAINS függvényével. Erről a cikksorozat következő részében lesz szó.
SELECT * FROM Employees WHERE CONTAINS(Notes, ’ISABOUT('ISABOUT(University weight(0.8), French weight (0.4), College weight (0.1))');