C# - Full-Text Catalog további lehetőségei

Transact SQL 25. rész

forráskód letöltése
Ebben a részben a Full-Text Catalog használatának további lehetőségeiről lesz szó, konkrétan a CONTAINSTABLE függvény használatáról. Ezzel a függvénnyel hasonló keresést valósíthatunk meg, mint az előző részben bemutatott CONTAINS függvénnyel, de itt az eredmény egy olyan tábla lesz, amelyben a lekérdezett rekordok egyedi kulcsai, valamint egy rang érték található. A rang azt határozza meg, hogy az adott rekord milyen mértékben felelt meg a lekérdezés feltételeinek. Az eredmény táblát ugyanúgy használhatjuk lekérdezéseknél, mint egy normál táblát.
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 CONTAINSTABLE segítségével rangsorolhatjuk a megtalált rekordokat annak megfelelően, hogy a keresett adatok mennyire felelnek meg a rekordban tárolt adatoknak. Ha a keresett adat nem szerepel az adott rekordban, akkor nyilvánvalóan az eredmény táblában sem fog. Az a rekord kap nagyobb rangot, amelyben a keresett adat többször, vagy pontosabban fordul elő, illetve a keresett adatokat is elláthatjuk egy ún. súlyszámmal, ami szintén a rangsort befolyásolja.
A CONTAINSTABLE függvény formátuma következő:
CONTAINSTABLE(table, column, <contains_search_conditions>, <top_n_by_rank>)
Az első paraméter annak a táblának a neve, amelyben a szavakat vagy kifejezéseket keressük. A tábla név nem tartalmazhatja a szerver nevét, és nem lehet más szerverekhez tartozó lekérdezés. A függvény leggyakoribb felhasználási módja az alábbi lekérdezésben figyelhető meg:
SELECT * FROM EMPLOYEES
INNER JOIN
CONTAINSTABLE(Employees, Notes, 'German') AS KEY_TABLE
ON Employees.EmployeeID = KEY_TABLE.[Key];
A második paraméter annak a mezőnek a neve, amelyben a szavakat vagy kifejezéseket keressük. A mezőnek szerepelnie kell az Full-Text Index-ben. Ha minden mezőben akarunk keresni, akkor az oszlop neve helyett a * karaktert adjuk meg.
A harmadik paraméter a keresett szó vagy kifejezés, amelyet ugyanúgy kell megadnunk, mint a cikksorozat előző részében bemutatott CONTAINS függvénynél. A CONTAINS függvénynél nem volt sok értelme a keresett szavaknak illetve kifejezéseknek súlyszámot adni, itt viszont annál inkább van. Nézzünk erre egy példát:
SELECT KEY_TABLE.Rank, FirstName+' '+LastName AS EmpName, Title, Notes
FROM Employees
INNER JOIN CONTAINSTABLE(Employees, Notes, 'ISABOUT(University weight(0.8), French weight (0.4), College weight (0.1))') AS KEY_TABLE
ON Employees.EmployeeID = KEY_TABLE.[Key]
ORDER BY KEY_TABLE.Rank DESC
A CONTAINSTABLE által visszaadott táblának két mezője van. Az első a Key, ami annak a rekordnak az egyedi azonosítóját tartalmazza, amelyben a szavakat kerestük. Full-Text Catalog Index-et csak olyan táblára lehet létrehozni, aminek van legalább egy olyan mezője, ami egyedi adatot tartalmaz. Az eredmény tábla második mezője a Rank, ami a rekord rangszámát tartalmazza.
A fenti példában három szót keresünk: „University”, „French” és „College”. A szavakat különböző súlyszámmal láttuk el, az elsőt a legnagyobbal, az utolsót pedig a legkisebbel. A súlyszám egy 0 és 1 közötti érték.
A kifejezés tehát a következőt jelenti: az eredmény táblában azok a rekordok fognak szerepelni, amelyek Notes mezőjében a fenti három szó szerepel. A rekordok közül az kapja a legnagyobb rangszámot, amiben szerepel az „University” szó, illetve amelyikben többször szerepel. A legkisebb rangszámot az a rekord fogja kapni, amelyben csak a „College” szó szerepel, az is csak a legkisebb számban.
Az eredmény táblát egy INNER JOIN-nal hozzákapcsoljuk az eredeti táblához az EmployeeID és a Key mezőkkel, a rekordokat pedig a rangszám szerint rendezzük csökkenő sorrendben.

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