Avatar billede sqwer Nybegynder
24. maj 2002 - 18:24 Der er 6 kommentarer og
1 løsning

søgning med stavefejl

Jeg skal have lavet en eller anden form for søgning, som også finder ting der bare ligner, fx 'hansen' skal også give hanson, hanssen, jansen, ..., dvs. den skal også give resultater hvor et (eller et par) bogstaver er ændret/tilføjet/fjernet.
Jeg har ikke rigtigt nogen fornemmelse af hvordan det kan gøres (men jeg er overbevist om at det KAN!).
Er der nogen der har nogen gode forslag til hvilken retning jeg skal kigge i?
Avatar billede gizmo-gizmo Nybegynder
24. maj 2002 - 18:26 #1
lytter lige med.... men maybe noget i retning af WHERE bla LIKE '%ansen%' ... eller måske er det regular expressions man skal bruge..?
Avatar billede tipsen Nybegynder
24. maj 2002 - 21:33 #2
Fra manualos:

MATCH (col1,col2,...) AGAINST (expr)
MATCH (col1,col2,...) AGAINST (expr IN BOOLEAN MODE)
MATCH ... AGAINST() is used for full-text search and returns relevance - similarity measure between the text in columns (col1,col2,...) and the query expr. Relevance is a positive floating-point number. Zero relevance means no similarity. MATCH ... AGAINST() is available in MySQL version 3.23.23 or later. IN BOOLEAN MODE extension was added in version 4.0.1. For details and usage examples, see section 6.8 MySQL Full-text Search.
Avatar billede tipsen Nybegynder
24. maj 2002 - 21:34 #3
Og et bud mere:

SOUNDEX(str)
Returns a soundex string from str. Two strings that sound almost the same should have identical soundex strings. A standard soundex string is 4 characters long, but the SOUNDEX() function returns an arbitrarily long string. You can use SUBSTRING() on the result to get a standard soundex string. All non-alphanumeric characters are ignored in the given string. All international alpha characters outside the A-Z range are treated as vowels:
mysql> SELECT SOUNDEX('Hello');
        -> 'H400'
mysql> SELECT SOUNDEX('Quadratically');
        -> 'Q36324'

-det er vist hvad der findes af den slags i mysql!
Avatar billede tipsen Nybegynder
24. maj 2002 - 21:38 #4
I PHP findes der lidt mere:

http://dk.php.net/manual/en/function.soundex.php (matcher soundex i mysql!)
http://dk.php.net/manual/en/function.metaphone.php
http://dk.php.net/manual/en/function.levenshtein.php
http://dk.php.net/manual/en/function.similar-text.php

-så er der spørgsmål om du vil indlæse hele mysql-db'en i et array og bruge php til at lave søgningen... - jeg vil dog tro at de to mysql muligheder burde løse dit problem!
Avatar billede sqwer Nybegynder
26. maj 2002 - 14:32 #5
Tak, det ser jo meget godt ud (og undskyld den lidt sene reaktion).
Her kommer lige et par tillægsspørgsmål:
Hvad nu hvis jeg også gerne vil have resultater som har næsten samme soundex (dvs. acceptere lidt flere resultater)? Især begyndelsesbogstavet kan vel blive et problem (à la Kamilla, Camilla).
Posterne i databasen er meget forskellige, så der skal meget til før den kommer til at tage alt for mange forkerte svar med.
Desuden vil jeg også gerne have den til at kunne finde poster som indeholder søgestrengen (fx 'Hans Jensen' ud fra 'Jensen'). Det klarer soundex vist ikke bare lige...
Men måske vil det så være nemmere at lave fra PHP?
Avatar billede sqwer Nybegynder
26. maj 2002 - 14:34 #6
Forresten, match ... against ..., kan den ikke kun tage hele ord?
Avatar billede tipsen Nybegynder
12. juni 2002 - 21:57 #7
De eksempler du nævner kan du ikke klare med én kommando - du bliver nødt til at mikse de forslag som er nævnt ovenfor - måske med noget rating afhængig af hvilke poster der bliver fundet af hvilke søgninger - men så har du efterhånden også gang i et lettere kompliceret system.
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