27. august 2011 - 00:57Der er
13 kommentarer og 1 løsning
Finde ligende poster i mysql
på nogle sider er der følgende funktion. an stiller et spørgsmål til support og inden spørgsmålet sende kommer en side op med spørgsmål som ligner det som er skrevet.
Jeg har fundet frem til det muligvis er full text søgning som bruges og har forsøgt med følgende, hvor $soge_streng er det som der skal sammenlignes med.
$sql = "SELECT * FROM test WHERE MATCH (tekst) AGAINST ('+$soge_streng' IN BOOLEAN MODE)";
Der kommer dog en del resultater ud som ikke har relevans, så er der nogen som ved hvad jeg kan gøre anderledes.
Ideen er at $sogestreng indeholder en teskt på x antal ord og denne skal sammenlignes i mysql feltet tekst
Ifølge SoftwareOne ligger de reelle AI-gevinster gemt i områder af central betydning for forretningen.
Slettet bruger
27. august 2011 - 08:44#1
Er du sikker på at du overhovedet HAR et problem - ikke bare har set dig blind på ét eksempel ? - Der bør ikke retureres noget, som ikke indeholder mindst ét af ordene i søgestrengen..
Hvis der bare er for mange hits, kan du "stramme op" ved at sætte + foran de enkelte ord i strengen. - Men det vil så betyde at ALLE ord i strengen SKAL findes. Hvilket nok er usandsynligt..
Du ku' måske nøjes med at sætte + foran det første ord, eller de 2 længste ?
Det er mig som har stirret mig blind på det. Den henter de rigtige poster ud, men hvis nu jeg kun vil have hentet dem ud hvor de to tekster er 60% ens.
Med similar_text("Hello World","Hello Peter",$percent); kan man sammenligne tekster procentvis, men hvordan gør jeg det med fulltext søgning
har forsøgt med $sql = "SELECT vits, MATCH (tekst) AGAINST ('$soge_streng') AS relevance FROM test WHERE MATCH (tekst) AGAINST ('+$soge_streng' IN BOOLEAN MODE)"; men det er nogle mærkelige relevance tal som kommer ud. f.eks. laver simelar_text: 96.296296296296 mens min sql relevans giver: 31.617755889892578
Synes godt om
Slettet bruger
27. august 2011 - 21:56#3
De kan ikke sammenlignes, fulltext-søgning er ligeglad med rækkefølge, men glad for gentagelser.
Hvis du bruger 2 forskellige MODES skal fulltext-søgningen udføres 2 gange.. - det ER fristende til sorteringen (lyder ikke som en high-performance-app. ("vits"))
En anden idé: Du kan tælle ordene i strengen på forhånd (dem > 3 tegn og ikke i stop-listen..) - og så, hvis der er 2 eller flere ord, kræve at relevansen skal være mindst 50% af dette tal:
select vits, MATCH(tekst) AGAINST('kartofler dansker svensker tysker' IN BINARY MODE) where MATCH(tekst) AGAINST('kartofler dansker svensker tysker' IN BINARY MODE) >= 2
Det virker som en fornuftig løsning. Jeg kunne dog ikke få din sql
select vits, MATCH(tekst) AGAINST('kartofler dansker svensker tysker' IN BINARY MODE) where MATCH(tekst) AGAINST('kartofler dansker svensker tysker' IN BINARY MODE) >= 2
til at virke selvom jeg huskede FROM test inden WHERE mener du istedet
$sql = "SELECT vits, MATCH(tekst) AGAINST('$soge_streng' IN BOOLEAN MODE) FROM test WHERE MATCH(tekst) AGAINST('$soge_streng' IN BOOLEAN MODE) >= 2";
eller kan du se fejlen i den du postede?
Synes godt om
Slettet bruger
30. august 2011 - 02:06#7
Næh.. tror faktisk bare det var "FROM test" der manglede, sorry.
Men, medmindre du har hundreder af samtidige søgninger, så er en blanding af mit og dit første forslag (med mixed modes) nok det bedste:
SELECT vits, MATCH(tekst) AGAINST('$soge_streng') as score FROM test WHERE MATCH(tekst) AGAINST('$soge_streng' IN BOOLEAN MODE) >= $halvdelen ORDER BY score DESC
Giver større sandsynlighed for at den "samme vits" kommer øverst. - folk (stemmekvæg) ser sjældent dybere end de første 3-4 hits..
$halvdelen (50%) er dog nok i overkanten hvis der er mange ord..
Synes godt om
Slettet bruger
30. august 2011 - 02:06#8
Næh.. tror bare det var "FROM test" der manglede, sorry.
Men, medmindre du har hundreder af samtidige søgninger, så er en blanding af mit og dit første forslag (med blandede modes) nok det bedste:
SELECT vits, MATCH(tekst) AGAINST('$soge_streng') as score FROM test WHERE MATCH(tekst) AGAINST('$soge_streng' IN BOOLEAN MODE) >= 2 ORDER BY score DESC
Giver større sandsynlighed for at de mest "nært beslægtede" vitser kommer øverst.
jeg håber at få det færdigt i aften. pt har jeg kun haft det til at køre på en simpel test side, så skal lige have det indsat rigtigt på siden. Det bliver lagt op på http://jokes.magiske-michael.dk når man tilføjer jokes
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.