FULLTEXT search

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

dora
Junior Member
Mesaje: 38
Membru din: Joi Mai 22, 2003 12:36 pm

FULLTEXT search

Mesajde dora » Joi Iul 10, 2003 3:20 pm

Am o roblema la cautarea cu fulltext.
Am un tabel aro_at cu un camp plz care e text, FULLTEXT si totusi daca dau :

select * from aro_at where MATCH(plz) AGAINST('p1')

nu merge.

Ce e in AGAINST, adica in cazul meu p1, ar trebui sa caute daca e in vreo inregistrare din campul plz sau daca e vreo inregistrare din camp?
Oricum nu merge, am incercat ambele cazuri.Poate cineva sa-mi dea indicatii?
Mersi


Dora

Avatar utilizator
biban
Senior Member
Mesaje: 204
Membru din: Dum Apr 13, 2003 8:23 pm
Localitate: Giurgiu
Contact:

Mesajde biban » Dum Iul 13, 2003 8:20 pm

Nu prea stapanesc MATCH...AGAINST, dar nu cumva e justificata folosirea ei numai daca la MATCH foloseshti mai multe coloane nu doar una??
Alta chestie: cica merge doar de la versiunea de mysql 3.23.23 in sus; ai o versiune superioara??
Spune-ne ce vrei sa faci shi poate are cineva o solutzie, poate nu ai nevoie decat de un LIKE in loc de MATCH...AGAINST

dora
Junior Member
Mesaje: 38
Membru din: Joi Mai 22, 2003 12:36 pm

Mesajde dora » Lun Iul 14, 2003 8:59 am

Am mysql 3.23.34. Cu like merge, voiam sa vad cum functioneaza match. E tare ciudat. Pe aceeasi tabela imi gaseste sau nu stringul dat.
Mersi.
Dora

Avatar utilizator
biban
Senior Member
Mesaje: 204
Membru din: Dum Apr 13, 2003 8:23 pm
Localitate: Giurgiu
Contact:

Mesajde biban » Lun Iul 14, 2003 12:19 pm

Shi mie mi se pare ciudat.
Am respectat toate conditziile din documentatie in ceea ce priveste indexarea coloanelor dar am observat ca daca am un shir "ana are mere" (de exemplu) shi folosesc clauza AGAINST ("mere") o totul ok; daca folosesc AGAINST ("ana") nu intoarce nimic.
Asha se intampla de fiecare data cand solicit primul cuvant din shir (cred ca asha se intampla shi in cazult tau, p1 era probabil cuvant unic, deci primul).

Poate este cineva care ne explica chestia asta.
Poate asha trebuie sa functioneze sau e un BUG.

Ashteptam un ajutor!!! - Nu am nevoie in proiectele mele de clauza MATCH...AGAINST dar e bine de shtiut pentru viitor.

mikitu
PHPRomania Supporter
Mesaje: 9
Membru din: Lun Feb 24, 2003 11:00 am
Localitate: bucuresti
Contact:

Mesajde mikitu » Mar Iul 15, 2003 9:39 am

incearca sa folosesti asta:
AGAINST ('+ana' IN BOOLEAN MODE);

pentru mai multe detalii:
http://www.mysql.com/doc/en/Fulltext_Search.html

iugin
Average Member
Mesaje: 82
Membru din: Joi Mai 22, 2003 1:30 pm
Localitate: Oradea
Contact:

Mesajde iugin » Mar Iul 15, 2003 11:21 am

Salut dora,


Problema ta cred ca e la tabela mysql

De exemplu daca ai cauta dupa title si description care sa spunem is varchar atunci ar trebui sa ai definit la crearea tabelei:

title varchar(255) default '',
description varchar(255) default '',
fulltext (title,description),

Daca nu pui fulltext nu merge

Salut si spor la munca

Avatar utilizator
biban
Senior Member
Mesaje: 204
Membru din: Dum Apr 13, 2003 8:23 pm
Localitate: Giurgiu
Contact:

Mesajde biban » Mar Iul 15, 2003 11:47 am

Nu cred ca asta e problema.
M-am uitat mai bine pe documentatia MySQL shi am descoperit urmatoarele:
1. Sunt IGNORATE cuvintele cu mai putin de 3 caractere (inclusiv)
2. Deoarece MATCH...AGAINST calculeaza un scor, cu cat cuvantul apare in mai multe randuri(inregistrari) scorul este mai mic, astfel ca in cazul in care el se afla pe mai mult de jumatate din randuri scorul tinde la 0, deci este ignorat
3. Am testat cuvinte de 4 litere. Intr-o baza de date cu 12 inregistrari mi-a fost ignorat. Intr-o baza de date cu aprox. 48000 inregistrari a dat rezultate.
Ceea ce am scris mai inainte cu ignorarea primului cuvant cade, nu e bug, asha lucreaza.
In concluzie procedura nu e recomandata decat in cazul unor "motoare de cautare", sa zicem, cand faci o cautare shi afishezi rezultatele in ordinea scorului (calculat in functie de numarul de aparitzii in inregistrare shi altele).
Dezvoltatorii MYSQL atentzioneaza ca folosirea MATCH...AGAINST poate intoarce rezultate bizare.

iugin
Average Member
Mesaje: 82
Membru din: Joi Mai 22, 2003 1:30 pm
Localitate: Oradea
Contact:

Mesajde iugin » Mar Iul 15, 2003 11:56 am

Tot ce posibil dar sincer mie nu mia mers pana nu am pus in tabela din mysql fulltext. Imi dadea tot felul de erori, dupa aceea nimic. POate depinde si de versiunea de mysql, asta nu am mai facut, sa imi pun o gramada de versiuni ca ia timp ;)

Avatar utilizator
biban
Senior Member
Mesaje: 204
Membru din: Dum Apr 13, 2003 8:23 pm
Localitate: Giurgiu
Contact:

Mesajde biban » Mar Iul 15, 2003 12:05 pm

Bineinteles! Indexarea cu fulltext e neaparat necesara. Nici nu incape discutzie. Dar intr-un mesaj mai sus am spus ca deshi am respectat toate conditziile in ceea ce priveshte indexarea mi se parea suspicios.
Am citit mai bine shi am ajuns la concluzia de mai sus.
Referitor la folosirea AGAINST ('+ana' IN BOOLEAN MODE) daca imi amintesc bine e valabil de la versiunea Mysql 4 in sus. Nu mai shtiu bine dar parca asha spunea acolo.


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 10 vizitatori