Avatar billede lone_a_p Praktikant
30. juni 2011 - 13:42 Der er 7 kommentarer og
1 løsning

like, match eller rlike

Kære eksperter,

Jeg har problemer med en søgning. Jeg søger fx på "%ord%"

Jeg har forsøgt med match som kun finder "ord1" "ord12" "ord784" osv. Altså ikke "mitord"

Jeg kan godt få resultater som "mitord1" (med like eller rlike) men så VIL databasen gennemgå samtlige rows, hvilket må være noget bekosteligt.

Kan jeg ikke finde "mitord" i databasen med en søgning på "ord" uden at databasen absolut skal gennemgå alle rækker?

Jeg har forsøgt mig med forskellige indexes - både normal og fulltext, men det hjælper ikke.

Nogen der vil hjælpe med en løsning?

Mvh Lone
Avatar billede lone_a_p Praktikant
30. juni 2011 - 13:44 #1
Det er det første % i

like "%ord%"

der gør at samtlige rækker gennemgås
Avatar billede arne_v Ekspert
01. juli 2011 - 02:21 #2
Hvis du vil have god performance med at finde 'mitord' ved soegning paa "ord" saa skal du nok selv lave soegemekanismen.

Hvis du laver en tabel med to felter part og id og saa gemmer 'mitord' med id 177 som (og definerer at du aldrig vil soege paa kun et bogstav):

'mi' 177
'it' 177
'to' 177
'or' 177
'rd' 177
'mit' 177
'ito' 177
'tor' 177
'ord' 177
'mito' 177
'itor' 177
'tord' 177
'mitor' 177
'itord' 177
'mitord' 177

saa kan du finde 'ord' hurtigt (forudsat at der er index paa part og id).
Avatar billede lone_a_p Praktikant
03. juli 2011 - 21:55 #3
Hej Arne,

Ved du om ovenstående virker i praksis? Det er jo ikke kun rækker med 6 bogstaver, jeg har liggende i databasen. Bare med 20 bogstaver bliver det lynhurtigt rigtig mange rækker - og hvad så med performance den vej rundt?

Er dit eksempel noget som du ved man gør i praksis rundt om i de små webfirmaer?

Mvh Lone
Avatar billede lone_a_p Praktikant
03. juli 2011 - 22:02 #4
Hvorfor egentlig også "it" og "or" ... med match kan man finde "mitord" med fx "mi", "mit" og "mito"

Derved vil "itord" og "it" vel være det samme ved søgning på "it". "itord" vil blot tage flere søgninger med (også "ito", "itor" og "itord") og vil vel dermed have en fordel, da de alligevel oprettes i databasen, ud fra hvorledes du lister dem?

Eller hvad har jeg endnu ikke forstået?

Altså jeg ville blot sige:
"mitord"
"itord"
"tord"
"ord"
"rd"

Men tvivler lidt på, om det er en god idé - man skal jo ikke tage alt for gode varer. Vil du give mig et par flere overbevisende ord?

Der plejer ofte at være nemme og fremtidsrelaterede løsninger i kode. Jeg synes dette ligner en omvej.
Avatar billede arne_v Ekspert
03. juli 2011 - 22:12 #5
Jeg formoder at du kan splitte ved mellemrum og ord er vel gennemsnitligt kun en 6-8 bogstaver lange, hvilket er overkommeligt.

Ideen duer ikke hvis alle slices af 100000 bogstaver skal gemmes.
Avatar billede arne_v Ekspert
03. juli 2011 - 22:14 #6
Der kan muligvis godt optimeres ved ikke at gemme alle slices og soge paa xxx%.

Eller ved kun at gemem op til 3 bogstaver og saa findes matches og checke de fundne i memory.
Avatar billede arne_v Ekspert
03. juli 2011 - 22:16 #7
Det er maaden man implementerer fulltext soegning paa - her gemmer man dog kun hele ord. I dette tilfaelde skal man gemme slices af ord.

Men jeg vil alligevel kalde teknikken for gennemtestet.

Jeg tror dog at det er forholdsvis faa web sites som goer saa meget ud af soegning.
Avatar billede arne_v Ekspert
08. august 2011 - 00:59 #8
all set?
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
Computerworld tilbyder specialiserede kurser i database-management

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