Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Kako napraviti pretragu za sajt sa nasim slovima?

  • 27 odgovora
  • 9.305 pregleda

Najnovija ↓

Re: Kako napraviti pretragu za sajt sa nasim slovima? 08.02.2011. u 22:33 · pre 191 mesec #22
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 ?
Re: Kako napraviti pretragu za sajt sa nasim slovima? 09.02.2011. u 02:37 · pre 191 mesec #23
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 :)
Re: Kako napraviti pretragu za sajt sa nasim slovima? 09.02.2011. u 07:21 · pre 191 mesec #24
Citat:
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)

Nije istina da vrlo sporo radi kod 10.000 redova,ja imam u tabeli vise od 200.000 redova i radi brzo jos uvek.Jedan prijatelj koji se mnogo duze bavi programiranjem od mene je
rekao da se neko usporenje primeti tek kod ~2.000.000 redova.
Potpis
Sve na jednom mestu:
http://www.oxo.rs
Re: Kako napraviti pretragu za sajt sa nasim slovima? 09.02.2011. u 13:03 · pre 191 mesec
izmenjeno 1 put, poslednji put VladaSu 09.02.2011. u 13:15
  1. VladaSu09.02.2011. u 13:15zapis iz teksta poruke
#25
Ako neko trazi: šišarka, šisarka, sišarka, sisarka ti to uvek sa php prebacis u sisarka.

U bazi da imas jednu kolonu ili tabelu za pretrag gde ces staviti sve bitne reci koje ti trebaju. U ovom slucaju ubacices rec sisarka.

Pretraga ce raditi brze, bice fleksibilnije jer ces moci ubaciti i varijacije reci, npr sisarkE. sisarkOM, sisarkU, sve kolone ce biti u jednoj koloni...
Ali ti rece da ti se ne svidja zbog dupliranja sadrzaja. Sve zavisi. U nekim slucajevima moze biti dobro.

Mislim da se ovaj Mitketov primer svodi na to.

Druga nacin da ti utf8 bude u utf_8_general_ci koji ne pravi razliku izmedju č, ć i c, izmedju š i s.
Jedino đ i dj moze da ti bude problem ali sam search tekst mozes da pripremis da ti dj bude d a i ostavis original rec.

A ako ti nije utf_8_general_ci koristi nesto kao WHERE col LIKE 'šisarke ' COLLATE utf8_general_ci

Svaki collation ima svoj order i svoje slicne karaktere.
Potpis
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
Re: Kako napraviti pretragu za sajt sa nasim slovima? 09.02.2011. u 17:32 · pre 191 mesec #26
Pa da, secam se da sam jednom probavao nesto sa collation. Ali nisam bio siguran za kukice, pa jos niko ne pominje utf8_general_ci, reko bolje da priznam gresku nego da se ubedjujem kad nisam siguran. :)

@mitke013
To je dobro resenje, citao sam na dosta mesta da se savetuje upravo to. Daki je pomenuo tagove sto je vrlo slicno. Jednostavno je i fleksibilno. Tako sam odradjivao pretragu onako na brzinu.
Meni sa mojim maleckim iskustvom nije jos trebalo full text search u bazi (polja gde je taj text, ne tagovi). Izveo sam to preko lucene posto je bilo na dohvat ruke u zend-u. Tu se dobija i poredjenje rezultata pretrage, pa onda na vrhu budu relevantniji. Trebalo bi i da je brze nego baza, plus kod mnogo pretrage db server nije opterecen.
Ovo je tvoj sajt? Nisam sad u prilici, ali pogledacu. Vidi li se kod negde ili samo kako funkcionise?
Re: Kako napraviti pretragu za sajt sa nasim slovima? 09.02.2011. u 20:37 · pre 191 mesec #27
Citat:
strutter.poison:
Ovo je tvoj sajt? Nisam sad u prilici, ali pogledacu. Vidi li se kod negde ili samo kako funkcionise?


To je sajt koji radim za klijenta, bice gotov za par dana. Mozes da vidis samo kako funkcionise, kod i da ti posaljem ne verujem da ce ti nesto pomoci ako ne koristis Doctrine.
Re: Kako napraviti pretragu za sajt sa nasim slovima? 09.02.2011. u 22:37 · pre 191 mesec #28
Kada sam pravio program Pretraga tražio sam da vidim kakvih sve ima sličnih programa i sećam se da sam nalazio pograme koji su radili pretragu sajtova i izbacivali rezultate. Čini mi se i u nekom obliku koji se mogao koristiti ali se slabo sećam detalja...

Nemam nikakav link i ovo sam napisao samo po sećanju... a ne mogu da se setim ni kako sam ih pronalazio niti imam više neki kod sebe.
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme