 |
|
 |
 | Cautare Fulltext cu MySQL |  |
Trimis: 19/07/2007 17:30 |
|
|
| Ad_Infinitum |
| Administrator |

 |
 |
| Data inscrierii: 23/Iun/2007 |
| Mesaje: 212 |
|
|
|
 |
 |
 |
|
Bazele de date MySQL au o optiune nu atit de des folosita cind vine vorba de cautare in cimpuri text sau varchar: cautare fulltext.
Sa zicem ca avem o tabela asa:
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
PRIMARY KEY(id)
)
De obicei cautarea intr-un cimp de tip text sau varchar se poate face asa:
SELECT * FROM articles WHERE body LIKE '%cuvint_cheie%'
Asta returneaza inregistratile care contin 'cuvint_cheie'. Insa ce te faci cind vine vorba de 2 cuvinte cheie sau de cautat in 2 cimpuri sau alte optiuni? Pentru asta exista fulltext.
Pentru asta trebuie modificata structura tabelei, fapt care poate dura destul de mult pt. o tabela existenta (cu multe inregistrari):
ALTER TABLE articles ADD FULLTEXT(body, title);
Sau direct la crearea tabelei se poate scrie:
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
PRIMARY KEY(id),
FULLTEXT (title,body)
)
Apoi o sa puteti selecta inregistrarile care contin anumite cuvinte cheie astfel:
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('cuvint_cheie');
Sau se poate obtine un scor al fiecarei inregistrari gasite, in functie de cit de relevante sint cuvintele cheie pentru inregistrarea respectiva:
SELECT *, MATCH(title, body) AGAINST ('cuvint_cheie') AS score FROM articles
WHERE MATCH(title, body) AGAINST('cuvint_cheie')
Scorul o sa fie tinut in cimpul 'score'.
O problema cu aceste cautari este ca nu o sa fie returnate nimic pentru cuvinte cheie prezente in mai mult din 50% din inregistrari. De exemplu intr-o baza de date cu articole despre MySQL si care contine in aproximativ fiecare inregistrare cuvintul 'MySQL' nu o sa fie returnat nimci la cautarea acestuia. Si la fel se intimpla cu cuvinte foarte scurte si deosebit de des utilizate.
Exista apoi cautari logice in care trebuie sa fie incluse unele cuvinte sau excluse altele, insa despre asta in alt articol.
Pentru alte informatii vedeti manualul MySQL.
http://dev.mysql.com/doc/mysql/en/fulltext-search.html |
|
|
|
|
|
|
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
|
|