C# - Full-Text Catalog létrehozása, használata

Transact SQL 24. rész

forráskód letöltése
Egy tábla szöveges mezőjében hagyományos módon többféleképpen is kereshetünk, akár tényleges adatra, akár csak egy részletre. Az MS SQL azonban tud egy olyan keresési módszert is, aminek segítségével a szöveges adatok keresésére szinte minden elképzelhető módszert felhasználhatunk. Ez a lehetőség a Full-Text Catalog használatával válik elérhetővé. A cikksorozatnak ebben a részében erről lesz szó.
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))');

Transact SQL cikksorozat

Transact SQL Referencia - Transact SQL 1. rész
Transact SQL további belső változói - Transact SQL 2. rész
Dátumkezelés a Transact SQL-ben - Transact SQL 3. rész
Sztringkezelés a Transact SQL-ben - Transact SQL 4. rész
Folyamatvezérlés eszközei a Transact SQL-ben - Transact SQL 5. rész
Összesítő függvények - Transact SQL 6. rész
Adatbázisok létrehozása, törlése - Transact SQL 7. rész
Adatbázis módosítás lehetőségei - Transact SQL 8. rész
Táblák létrehozása - Transact SQL 9. rész
Táblák módosítása, törlése - Transact SQL 10. rész
Rendszer funkciók - Transact SQL 11. rész
Adatkonvertálási lehetőségek - Transact SQL 12. rész
Tárolt eljárás létrehozása - TransactSQL 13. rész
Triggerek kezelése - Transact SQL 14. rész
Indexek létrehozása - Transact SQL 15. rész
Függvények definiálása - Transact SQL 16. rész
Függvények felüldefiniálása és törlése - Transact SQL 17. rész
Szabályok létrehozása - Transact SQL 18. rész
Alapértelmezett értékek megadása - Transact SQL 19. rész
Nézet táblák létrehozása - Transact SQL 20. rész
Nézettáblák módosítása - Transact SQL 21. rész
Adatbázis és tranzakciós napló mentése - Transact SQL 22. rész
Elmentett adatbázis és tranzakciós napló visszaállítása - Transact SQL 23. rész

Full-Text Catalog létrehozása, használata - Transact SQL 24. rész

Full-Text Catalog további lehetőségei - Transact SQL 25. rész
Tranzakció-kezelés az MS SQL-ben - Transact SQL 26. rész
Tranzakció-kezelés az MS SQL-ben - Transact SQL 27. rész
SET parancsok - Transact SQL 28. rész