Citat:
strutter.poison: Ah da, video sam taj clanak.
Nekao sam shvatio da su problem nasa mala/velika slova pa zato rekoh za utf8_general_ci. Verovatno sam jos nesto citao pa pobrkao.. Nebitno

Nego, kad sam vec tu, nije valjda da nema neki bolji nacin, neko custom poredjenje (kao sto je ci za o i O, tako nesto za kvacice i bez) nego mora kroz regex da se naznaci da su c, č, ć... isto ?
Ima jedno resenje, najbolje ali i najkomplikovanije: indeksiranje kljucnih reci.
Pogledaj kako to
izgleda u praksi.
Obrati paznju da je term za pretragu: 'Mičhael Jaćkson' i program je ipak nasao 'Michael Jackson'. Isto ce da radi i u suprotnom smeru; ako je title 'Mičhael Jaćkson' a ti upises 'Michael Jackson' za term, dobices iste rezultate.
Ako ces jos da se igras, ukucaj 'adagio for strings' u search polje. Ili 'kevin and perry go large', cisto da vidis kako to sve radi.
Prica iza toga je sledeca:
nema 'LIKE' komande; suvise je spora i neprakticna. Tabela song ima jos jednu pratecu tabelu 'song_index' gde se cuvaju kljucne reci za pretragu; u gornjem primeru, to su kolone 'title' i 'tags'. Tamo se upisuju 'ociscene' reci tj. 'Mičhael' postaje 'michael' i stavlja se referenca ka pesmi gde se ta rec nalazi. Pogledaj sliku, bice ti jasnije.
Program radi tako sto prvo protrci kroz 'song_index', pokupi id-eve pesama, a zatim vrati pesme po vaznosti pretrage. Tj. po zbiru reci koje se poklapaju.
E sad;
ja koristim Doctrine koji prljavi deo posla radi za mene. Da bi ti uradio ovako nesto, prouci
ovaj tekst . Videces da nije neki problem izvesti isto sa obicnim sql-om, programer je pokazao koji se SQL-ovi izvrsavaju.
Pros:
1. dobijam rezultate poredjane po vaznosti (relevance). Cak i ako neka rec nije pravilno upisana, program ce uraditi pretragu po ostalim recima
2.
daleko brza pretraga nego koriscenjem 'like'. Like radi tako sto prodje kroz SVE rezultate iz tabele, vrseci poredjenje bajt po bajt. Vrlo, vrlo sporo kod vecih tabela (recimo 10.000++ redova, verovatno i manje). Tek sa regexp-om se sve to uspori preko svake mere.
Cons:
ako ne koristis ORM, moraces rucno da napises ovako nesto. Zato sam ti dao link da shvatis kako to radi u pozadini, zapravo sam kod uopste nije ni toliko komplikovan. Vazna je ideja koju je autor Doctrine-a koristio.
Evo ti jos
'food for thoughts' , pogledaj 'related audios' dole desno. Prvih 6 rezultata je 'relevance search', donja 4 se drugacije racunaju (duga prica). Cela prica je veoma slicna youtube-u.
Note:
ovaj program je work-in-progress pa ako natrcis na prazan link, samo se vrati nazad i probaj neki drugi. If it is not a bug, it's a feature