Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Slične teme, kao na ES-u ?

[es] :: PHP :: Slične teme, kao na ES-u ?

[ Pregleda: 2350 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Jezdimir Lončar
Aka Blazeme
PHP/jQuery Dev, BildStudio
Crna Gora / Pljevlja

Član broj: 74833
Poruke: 674
*.crnagora.net.

Jabber: jezdonet@gmail.com


+4 Profil

icon Slične teme, kao na ES-u ?22.12.2007. u 11:37 - pre 200 meseci
Pozdrav svima!
Ja evo pravim neki forumčić po 1000 put, ali sad sam riješio da projekat dovedem do kraja.
Sad mene zanima, kako su na ESu napravljene "slične teme" ?
Naime, ja sam to uradio ovako:
Code:

function slicnitopici($title,$limit=5,$path="") {
$q = mysql_query("SELECT * FROM posts WHERE title LIKE '%$title%' AND tid=0 AND title!='$title' ORDER BY addedon DESC LIMIT $limit") or die(mysql_error());
while($r=mysql_fetch_array($q)) {
$string .= date("j. n. Y.",$r["addedon"])." <a href='".$path."viewtopic.php?id=".$r["id"]."'>".$r["title"]."</a><br />";
}
if(mysql_num_rows($q)==0) {
$string = "<em>Nema sličnih tema.</em>";
}
return $string;
}

Međutim, šta je problem?
Problem je u tome što mi ne vraća željene rezultate.
Ja recimo imam teme:
Test
Test att
E sad, ja kad sam na temi Test, u sličnim temama mi vraća Test att temu, ALI kad sam u temi Test att, temu Test mi ne vraća i vrati mi "Nema sličnih tema." .
Sad, mene zanima da li postoji neki MySQL query da ovo sredim?
Mislim, pretpostavljam da bih mogao da idem preko similar_text() i da ako vati recimo više od 50% da vratim rezultat i sl, ali mislim da je ovako mnogo lakše.
I da, ako bi neko mogao da mi kaže na kom je principu to urađeno na EliteSecurity-ju .

Hvala u naprijed.
Jezdimir Lončar.
“I never think of the future - it comes soon enough.” - Albert Anštajn (Albert Einstein)
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
77.46.198.*



+35 Profil

icon Re: Slične teme, kao na ES-u ?22.12.2007. u 13:30 - pre 200 meseci
He, he pa ni na ES-u ne funkcionise bas bajno, valjda ce nam flylord odati neke detalje, ako nije neki top-secret :)
 
Odgovor na temu

Jezdimir Lončar
Aka Blazeme
PHP/jQuery Dev, BildStudio
Crna Gora / Pljevlja

Član broj: 74833
Poruke: 674
*.crnagora.net.

Jabber: jezdonet@gmail.com


+4 Profil

icon Re: Slične teme, kao na ES-u ?22.12.2007. u 13:44 - pre 200 meseci
Nadam se da hoće, ili on ili Gojko..
A znam da ne funkcioniše baš najsjanije ali radi posao bolje nego moja f-ja...
: )
“I never think of the future - it comes soon enough.” - Albert Anštajn (Albert Einstein)
 
Odgovor na temu

japan

Član broj: 34328
Poruke: 480
*.bvcom.net.



+13 Profil

icon Re: Slične teme, kao na ES-u ?22.12.2007. u 14:19 - pre 200 meseci
tvoja funkcija nije uopste dobro resenje za to, jer ce ti vracati slicne teme ako postoji samo jedna rec zajednicka, sto ne mora uvek da znaci da su teme slicne.

ali ako vec hoces tako da radis, onda prvo uradi explode(" ", $title), pa u query-ju poredi po svakom clanu niza koji si ovako dobio.
 
Odgovor na temu

Jezdimir Lončar
Aka Blazeme
PHP/jQuery Dev, BildStudio
Crna Gora / Pljevlja

Član broj: 74833
Poruke: 674
*.crnagora.net.

Jabber: jezdonet@gmail.com


+4 Profil

icon Re: Slične teme, kao na ES-u ?22.12.2007. u 14:24 - pre 200 meseci
Pao mi je i explode sa razmakom na pamet, međutim, to mi nije nekako elegantno rešenje, ako mislimo na istu stvar.
(Da explode-ujem title sa razmakom, pa da vršim query tipa SELECT * FROM posts WHERE title LIKE '%$t%' s tim što foreachujem rezultat explode-a)
Citat:
japan: tvoja funkcija nije uopste dobro resenje za to, jer ce ti vracati slicne teme ako postoji samo jedna rec zajednicka, sto ne mora uvek da znaci da su teme slicne.

Pa meni je trenutno problem u tome što NEĆE da mi vrati sličnu temu ako ima 1 riječ zajedničku (moj primjer sa Test i Test att u prvom postu).
Ali ne vjerujem da je to sa explodeom urađeno na ESu jer mi u slične teme vraća ovde na esu:
Code:

29.05.2006. athlon 3000+ msi k8n sli fi 2x512 mb zasto nece v..
24.08.2006. GeForce 6800 XTreme problem sa SLI
28.11.2006. NVIDIA 7600GS problem pri startovanju sistema
03.03.2007. Asus M2N4-sli vs MSI K9N Neo-F
04.03.2007. koja je bolja asus ili msi ploca
24.03.2007. Kupio sam procesor za koga se vise neproizvode ma..
08.06.2007. Da li ploca sa SLI modom ili ne..?
01.10.2007. SLI problem,2 kartice nece ni da cuju za SLI
21.11.2007. M2N-E Problem kako: iskljuciti sli iskljucen upzo..
12.12.2007. Napajanje za 8600gt SLI

A nijedna veze nema sa ovom.
“I never think of the future - it comes soon enough.” - Albert Anštajn (Albert Einstein)
 
Odgovor na temu

japan

Član broj: 34328
Poruke: 480
*.BVCOM.NET.



+13 Profil

icon Re: Slične teme, kao na ES-u ?22.12.2007. u 21:26 - pre 200 meseci
Citat:
Neohacker: Pao mi je i explode sa razmakom na pamet, međutim, to mi nije nekako elegantno rešenje, ako mislimo na istu stvar.
(Da explode-ujem title sa razmakom, pa da vršim query tipa SELECT * FROM posts WHERE title LIKE '%$t%' s tim što foreachujem rezultat explode-a)


ne bih ja pustao query za svaku rec iz title, ja bih to ovako nekako:

Code:

$chunks = explode(" ", $title);
$query = "SELECT * FROM posts WHERE title LIKE " . $chunks[0]
for($i = 1; $i < count($chunks); $i++) {
  $query .= " OR title LIKE " . $chunks[$i];
}

// i sta treba dalje...


Citat:
Pa meni je trenutno problem u tome što NEĆE da mi vrati sličnu temu ako ima 1 riječ zajedničku (moj primjer sa Test i Test att u prvom postu).


nece za "Test" da ti vrati slicnu temu "Test att" iz prostog razloga sto LIKE u SQL-u ne funkcionise na taj nacin, tj. "Test att" NIJE LIKE "Test", dok obrnuto jeste... razmisli malo, prilicno je logicno.


Citat:

Ali ne vjerujem da je to sa explodeom urađeno na ESu jer mi u slične teme vraća ovde na esu:
Code:

29.05.2006. athlon 3000+ msi k8n sli fi 2x512 mb zasto nece v..
24.08.2006. GeForce 6800 XTreme problem sa SLI
28.11.2006. NVIDIA 7600GS problem pri startovanju sistema
03.03.2007. Asus M2N4-sli vs MSI K9N Neo-F
04.03.2007. koja je bolja asus ili msi ploca
24.03.2007. Kupio sam procesor za koga se vise neproizvode ma..
08.06.2007. Da li ploca sa SLI modom ili ne..?
01.10.2007. SLI problem,2 kartice nece ni da cuju za SLI
21.11.2007. M2N-E Problem kako: iskljuciti sli iskljucen upzo..
12.12.2007. Napajanje za 8600gt SLI

A nijedna veze nema sa ovom.


upravo o tome ti pricam :) los algoritam...
 
Odgovor na temu

Jezdimir Lončar
Aka Blazeme
PHP/jQuery Dev, BildStudio
Crna Gora / Pljevlja

Član broj: 74833
Poruke: 674
*.crnagora.net.

Jabber: jezdonet@gmail.com


+4 Profil

icon Re: Slične teme, kao na ES-u ?22.12.2007. u 21:35 - pre 200 meseci
Citat:
japan: ne bih ja pustao query za svaku rec iz title, ja bih to ovako nekako:
Code:

$chunks = explode(" ", $title);
$query = "SELECT * FROM posts WHERE title LIKE " . $chunks[0]
for($i = 1; $i < count($chunks); $i++) {
  $query .= " OR title LIKE " . $chunks[$i];
}

// i sta treba dalje...


Ovo ću morati da probam pa ću da javim rezultate..
Citat:
japan: nece za "Test" da ti vrati slicnu temu "Test att" iz prostog razloga sto LIKE u SQL-u ne funkcionise na taj nacin, tj. "Test att" NIJE LIKE "Test", dok obrnuto jeste... razmisli malo, prilicno je logicno.

Aha, pa dobro...

Btw, hvala na pomoći...
“I never think of the future - it comes soon enough.” - Albert Anštajn (Albert Einstein)
 
Odgovor na temu

Jezdimir Lončar
Aka Blazeme
PHP/jQuery Dev, BildStudio
Crna Gora / Pljevlja

Član broj: 74833
Poruke: 674
*.crnagora.net.

Jabber: jezdonet@gmail.com


+4 Profil

icon Re: Slične teme, kao na ES-u ?22.12.2007. u 22:57 - pre 200 meseci
Code:

function slicnitopici($title,$limit=5,$path="") {
$chunks = explode(" ", $title);
$query = "SELECT * FROM posts WHERE title LIKE '" . $chunks[0] . "'";
for($i = 1; $i < count($chunks); $i++) {
  $query .= " OR title LIKE '" . $chunks[$i] . "'";
}
$query .= " AND tid=0 AND title!='$title' ORDER BY addedon DESC LIMIT $limit";
// i sta treba dalje...
$q = mysql_query($query) or die(mysql_error());
while($r=mysql_fetch_array($q)) {
$string .= date("j. n. Y.",$r["addedon"])." <a href='".$path."viewtopic.php?id=".$r["id"]."'>".$r["title"]."</a><br />";
}
if(mysql_num_rows($q)==0) {
$string = "<em>Nema slicnih topica.</em>";
}
return $string;
}

Evo, skrpio sam novu f-ju.
Radi, manje - više slično onoj, međutim, nisam ni mogao da primjetim neku razliku sa 2 topica ;)
Ja još čekam da se javi neko od ovih ljudi što su kodirali ES pa da čujem kako su oni to uradili, međutim, ne vjerujem da ce od toga biti ista..
Hvala na odgovorima.
Btw, ako još ko ima kakvu ideju, npr, kako da ORDER-ujem teme po sličnosti, neka ostavi ovde post..
Iskreno,
Jezdimir Lončar.
“I never think of the future - it comes soon enough.” - Albert Anštajn (Albert Einstein)
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: Slične teme, kao na ES-u ?23.12.2007. u 12:54 - pre 200 meseci
Mnogo vremena treba uloziti da bi se napravio neki stvarno dobar algoritam tako da sam se ja za sada zadovoljio poredjenjem subject-a sa subject+message ostalih poruka. Prvo se malo isprocesira subject i izbace glupe reci i znaci, fulltext pretragu podesis da indeksira reci od 3 ili vise karaktera (ft_min_word_len=3 valjda bese).

I onda nesto poput:

Code:
"SELECT Subject, TopicID, MATCH (subject,message) AGAINST ('$subject') AS score
                                        FROM `t_messages`
                                        WHERE MATCH (subject,message) AGAINST ('$subject')
                                        AND firstmessage=1 AND TopicID<>$row[0]
                                  AND BoardID NOT IN ($skipboards)
                                        GROUP BY TopicID ORDER BY score DESC LIMIT 10";


U ovom slucaju ako korisnici ne koriste prave kljucne reci u subjectu, slabo ce to raditi. A mislim da ne radi i sa nasim slovima kako treba, zbog verzije mysql-a.

Moze i bolje al' eto pitao si kako je trenutno ovde...

I naravno, ovo se ne radi pri svakom ucitavanju stranice vec se cuvaju rezultati, posto na vecim bazama ova fulltext pretraga zna dosta da opterecuje i svaki query traje prilicno. Tako da to ide lagano u pozadini, a i moderatori imaju ajax dugmence da refreshuju rezultate... a ako lista nije generisana, svi korisnici vide isto takvo malo dugmence koje generise listu i belezi je tako da su rezultati dostupni za svako sledece ucitavanje stranice. I treba periodicno raditi refresh svih tema na sajtu posto se pojavom novih menjaju rezultati i za stare.
 
Odgovor na temu

Jezdimir Lončar
Aka Blazeme
PHP/jQuery Dev, BildStudio
Crna Gora / Pljevlja

Član broj: 74833
Poruke: 674
85.94.123.*

Jabber: jezdonet@gmail.com


+4 Profil

icon Re: Slične teme, kao na ES-u ?23.12.2007. u 13:06 - pre 200 meseci
Prvo, hvala na odgovoru.
Drugo, probaću taj query koliko je danas. Samo me zanima gdje se podešava taj param. za fulltext pretragu?
A što se catch-ovanja rezultata tiče i opterećivanja servera, to sam planirao za kasnije da uradim.
Trenutno nemam sistem cache-ovanja stranica, jer ne planiram da imam mnogo posjetilaca, bar ne dok forum ne izađe iz ALFA faze.

Iskreno,
Jezdimir Lončar.
“I never think of the future - it comes soon enough.” - Albert Anštajn (Albert Einstein)
 
Odgovor na temu

Jezdimir Lončar
Aka Blazeme
PHP/jQuery Dev, BildStudio
Crna Gora / Pljevlja

Član broj: 74833
Poruke: 674
85.94.123.*

Jabber: jezdonet@gmail.com


+4 Profil

icon Re: Slične teme, kao na ES-u ?23.12.2007. u 13:36 - pre 200 meseci
Ok.
Evo uradio sam funkciju za pretragu sličnih tema:
Code:

function slicnitopici($title,$limit=5,$path="") {
$query = "SELECT title, id, addedon, MATCH (title,body) AGAINST ('$title') AS score

                                       FROM `posts`

                                       WHERE MATCH (title,body) AGAINST ('$title')
                                       
                                       AND title != '$title'
                                       
                                       GROUP BY id ORDER BY score DESC LIMIT ".$limit;
$q = mysql_query($query) or die(mysql_error());
while($r=mysql_fetch_array($q)) {
$string .= date("j. n. Y.",$r["addedon"]).": <a href='".$path."viewtopic.php?id=".$r["id"]."'>".$r["title"]."</a><br />";
}
if(mysql_num_rows($q)==0) {
$string = "<em>Nema slicnih topica.</em>";
}
return $string;
}

Radi skroz OK ali sam morao da dodam fulltext index na tabelu:
Code:
CREATE fulltext index main ON posts( title,body );


Hvala svima!
Evo ako hoće neko da vidi kako sam uradio ovaj BB, link je sledeći:
http://www.jezdo.net/blazebb/
Nemojte ovo shvatiti kao spam ili reklamu ili bilo šta, jer mi to nije bila namjera.
Inače, forum još nije pušten u rad tako da...
;)
“I never think of the future - it comes soon enough.” - Albert Anštajn (Albert Einstein)
 
Odgovor na temu

[es] :: PHP :: Slične teme, kao na ES-u ?

[ Pregleda: 2350 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.