Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[Mysql] Ongeveer zoeken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Is het mogelijk om in mysql te zoeken op een trefwoord bv "test" en als resultaten te vinden:
test
tost
tast
tesa
...

Hierbij wil ik dus een soort functie gebruiken waarbij 1 of 2 letters van het gezochte trefwoord mogen verschillen?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:25

Janoz

Moderator Devschuur®

!litemod

Wat jij zoekt heet levenshtein distance. Dit is een waarde die aangeeft hoeveel 'operaties' de ene term van de andere term verschilt. Een operatie is een teken aanpassen, een teken toevoegen of een teken verwijderen. Volgens mij is hij wel nativ in mysql geimplementeerd waardoor je hem gewoon in je query kunt gebruiken.

[ Voor 8% gewijzigd door Janoz op 03-07-2008 12:55 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 06:04

Sebazzz

3dp

Is dit niet wat Google min of meer gebruikt bij zijn zoeksuggesties (als je woord verkeerd typt) en ook bijvoorbeeld het Firefox woordenboek?

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Verwijderd

Topicstarter
Jep dit is exact wat ik zoek, maar ipv van die distance te bereken, wil ik dat hij direct in de zoekquery toepast waarbij ik bv zeg:
levenshtein("zoekwoordstring",90)
zoek naar "zoekwoordstring" matched resultaten van 90%

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op donderdag 03 juli 2008 @ 13:10:
Jep dit is exact wat ik zoek, maar ipv van die distance te bereken, wil ik dat hij direct in de zoekquery toepast waarbij ik bv zeg:
levenshtein("zoekwoordstring",90)
zoek naar "zoekwoordstring" matched resultaten van 90%
http://codejanitor.com/wp...-a-mysql-stored-function/

Alleen heb ik geen idee wat de performance is . Misschien zou je dat kunnen testen :P

[ Voor 9% gewijzigd door LuCarD op 03-07-2008 13:14 ]

Programmer - an organism that turns coffee into software.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:25

Janoz

Moderator Devschuur®

!litemod

@Sebazzz
Dat zou heel goed kunnen, maar zeker weten doe ik dat niet. Wat wel zo is is dat Levenshtein het erg technisch benaderd. Zeker bij spel en tikfouten lijkt het me dat je meer kennis over je termen kunt hebben. Zo zou ik voor het nederlands het verschil tussen de 'ei' en de 'ij' een stuk kleiner maken dan bijvoorbeeld de x en de a, terwijl bij levensthein de eerste een verschil van 2 heeft en de laatste een verschil van 1.

--
@kevin

Als je een levensthein functie hebt dan kun je natuurlijk gewoon in he where clause opnemen dat de levenshtein distance kleiner dan een bepaalde waarde moet zijn. Die waarde kan vast, maar ook gewoon 0.1 keer de lengte van je zoekterm als je perse met een percentage wil werken.

[ Voor 26% gewijzigd door Janoz op 03-07-2008 13:27 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Stetho
  • Registratie: Oktober 2004
  • Laatst online: 08:49
Je kunt ook zoeken met de soundex functie van mysql.
Deze zoekt op woorden die ongeveer netzo klinken.

I'm a bit .... confused. I find the Rails framework sexy. Is that wrong? Am I dirty?


  • orf
  • Registratie: Augustus 2005
  • Laatst online: 10:00

orf

Als je een aparte zoekwoord tabel gebruikt, kun je ook een extra kolom (char4) opnemen met de soundex. Wanneer een zoekquery geen resultaten oplevert, kun je de query uitvoeren met de soundex string. Niet helemaal fantastisch, maar wel redelijk werkzaam.

edit naar aanleiding van mijn voorganger: De soundex van PHP is beter dan die van mySQL. Daarnaast kun je een index op je char4 kolom zetten die alles net even wat sneller maakt.

[ Voor 26% gewijzigd door orf op 03-07-2008 13:27 ]


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Janoz schreef op donderdag 03 juli 2008 @ 13:20:
Dat zou heel goed kunnen, maar zeker weten doe ik dat niet. Wat wel zo is is dat Levenshtein het erg technisch benaderd. Zeker bij spel en tikfouten lijkt het me dat je meer kennis over je termen kunt hebben. Zo zou ik voor het nederlands het verschil tussen de 'ei' en de 'ij' een stuk kleiner maken dan bijvoorbeeld de x en de a, terwijl bij levensthein de eerste een verschil van 2 heeft en de laatste een verschil van 1.
Misschien moet je dan met double metaphone gaan werken.

Programmer - an organism that turns coffee into software.


  • osorkon!
  • Registratie: September 2006
  • Laatst online: 10-01 18:56
LuCarD schreef op donderdag 03 juli 2008 @ 13:14:
[...]

http://codejanitor.com/wp...-a-mysql-stored-function/

Alleen heb ik geen idee wat de performance is . Misschien zou je dat kunnen testen :P
Krijg die stored proc niet op gang, krijg altijd sql errors, iemand waarbij het wel lukt?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Hij werkt hier wel... Mits ik de functie via de MySQL Browser Application run..

Ik krijg hem niet via de command line aan de praat.

Programmer - an organism that turns coffee into software.

Pagina: 1