Avatar billede horizon Nybegynder
13. juni 2009 - 10:58 Der er 7 kommentarer og
1 løsning

3 søgeresultater på æble, men kun 1 på "æble"

Jeg sidder og prøver mig med min første søgemaskine til et site og er stødt ind i et underligt problem synes jeg selv...

Jeg har prøvet at oprette en række i databasen som indeholder ordet æble

så har jeg andre rækker i tabellen der indeholder bogstavet æ i almindelig test

Hvis jeg søger på æble så får jeg 3 resultater (alle rækker der indeholder æ) men søger jeg på "æble" så får jeg kun det ene resultat som indeholder "æble"

Ifølge mit hoved vil det jo være logisk at den kun returnerede den ene række med ordet æble selvom jeg søgte på æble uden citatonstegn.

Er det mig der har lavet noget mærkeligt i min kode eller er det et almindeligt problem??

uddrag af kode

* * *

$streng = trim(urldecode($streng));

$dansk = array("æ","Æ","ø","Ø","å","Å","é","É");

$enc = array("æ","Æ","ø","Ø","å","Å","é","É");

$streng = str_replace($dansk, $enc, $streng);

* * *

mysql_query:
'SELECT * FROM `tabel` WHERE MATCH(`indhold`) AGAINST("'.mysql_real_escape_string($streng).'" IN BOOLEAN MODE)'
Avatar billede Slettet bruger
13. juni 2009 - 11:42 #1
Prøv lige at få udskrevet dine strenge:


echo "Raw: ".$streng;

$streng = trim(urldecode($streng));

echo "Fixed: ".$streng;

$dansk = array("æ","Æ","ø","Ø","å","Å","é","É");

$enc = array("æ","Æ","ø","Ø","å","Å","é","É");

$streng = str_replace($dansk, $enc, $streng);

echo "Replaced: ".$streng;

$streng = mysql_real_escape_string($streng);

echo "Final: ".$streng;


Og så test lige dette query:

"SELECT * FROM `tabel` WHERE MATCH(`indhold`) AGAINST(´$streng´ IN BOOLEAN MODE)"


Hvad får du så?
Avatar billede horizon Nybegynder
13. juni 2009 - 12:15 #2
raw: "æble"
fixed: "æble"
Replaced: "æble"
Final: \"æble\"

og det samme sker. 3 resultater med æble mod 1 med "æble"

Jeg overvejer lidt om det måske kan have noget at gøre med at den anser ; som et slags stopord ligesom i almindelig php... når man når til ; så stopper man.
Avatar billede thesurfer Nybegynder
13. juni 2009 - 23:59 #3
Nogen grund til at du ikke bruger Like?

eksempel: "select * from tabel where indhold like ('%" . $streng . "%')"

Jeg kan ikke lige huske hvordan PHP syntaksen er (jeg programmerer normalt i ASP).. men noget i den stil..
Avatar billede horizon Nybegynder
14. juni 2009 - 15:15 #4
Jeg valgte at bruge fulltext da man kan bruge "" + og - i sin søgning for at præcisere, og så fordi mysql automatisk rangerer resultaterne efter relevans. (sådan nogenlunde)

Jeg tror forresten jeg har fundet fejlen, min mistanke om at semikolonnet gør udslaget er rigtigt, så jeg skal vel bare lave en reg.exp. på strengen for at se om der er et semikolon i et ord og så sætte det ord i anførselstegn?

Eller også kunne jeg vel bare tage mig sammen en gang for alle og så få styr på charsets, så burde den være udover dette problem?
Avatar billede thesurfer Nybegynder
14. juni 2009 - 16:38 #5
Kunne man ikke også bare escape ";", så det kommer til se sådan ud i søgningen:

&aelig\;ble

Dvs, erstatte ";" med "\;"..
Avatar billede thesurfer Nybegynder
14. juni 2009 - 16:38 #6
"styr på tingene" er typisk bedre end "fuske med tingene".. :-)
Avatar billede horizon Nybegynder
14. juni 2009 - 23:31 #7
Hehe, det kan der være noget om :)

Det virkede ikke at escape semikolonet.

Lige umiddelbart har jeg testet frem og tilbage. Et workaround kunne være at inden man søger så skal man søge efter semikolon.

Hvis det ikke er imellem to citationstegn så skal de sættes rundt om ordet. Så virker det som det skal, men pokkers til arbejde...

Jeg har smidt spørgsmålet op på mysql.com og skal nok smide et svar med hvad de har at sige.
Avatar billede horizon Nybegynder
20. juni 2009 - 10:28 #8
Nå... mysql.com kunne ikke hjælpe...

Lavede min tabel om til utf8 format og geninsatte alle teksterne med deres danske bogstaver i stedet for &...; og nu virker det som det skal

Smid et svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester