ugrás a tartalomhoz

Hibatűrő keresés 0 találat esetén

Anonymous · 2005. Nov. 14. (H), 08.46
Sziasztok!

Egy olyan kéréssel fordultak hozzám, hogy ha egy adatbázisban történő keresés nem ad eredményt, akkor listázzam ki 3 karakter eltérésig a hasonló szavakra kapott találatokat is. (Pl.: 'kasca'-ra jöjjön a 'kacsa' találat, stb)
MySQL-ben van erre valami beépített függvény, algoritmus, bármi? A soundex() mennyire használható magyarországon erre a célra?
Azt azért túlzásnak tartanám, hogy az összes lehetséges elütési hibára külön lekérdezést indítsak, vagy feltételnek az összes lehetséges feltételt megadjam (`mezo` LIKE "%k___a%" OR `mezo` LIKE "%k__c_%" OR...).
Tudnátok erre a problémára valami ötletet/anyagot/segítséget adni, merre induljak el?

Előre is köszi!
Zs.
 
1

Levenshtein távolság

zsepi · 2005. Nov. 14. (H), 11.41
http://en.wikipedia.org/wiki/Levenshtein_distance

phpban alapból benne is van, http://hu.php.net/manual/hu/function.levenshtein.php
2

nem igazán jó

Anonymous · 2005. Nov. 14. (H), 14.30
Hali!
Ez a levensthein dolog tök jó lenne, ha lenne egy szótáram, amihez hasonlítani lehetne a keresendő szót. De nem kérhetem le a teljes adatbázist egy php tömbbe, hogy megkeressem a leginkább illeszkedő stringeket. Ez a függvény akkor lenne tuti, ha a mysql-be lenne beépítve. de így, php-ből elég gázos.
Ettől függetlenül köszi a hozzászólást, ebből is tanultam :)

Zs.
3

tárolt eljárás/fügvény

zsepi · 2005. Nov. 14. (H), 14.39
esetleg csináld meg mysql függvényként?

vagy csinálj cache táblát, ahol minden létező szópárra kiszámolod ezt.

csak ötletek. De mindenképpen lassú lesz, s a szótár létrehozását nem kerülheted el szvsz
4

félmegoldás

csla · 2005. Nov. 14. (H), 20.15
Nem tudom, hogy mekkora adatmennyiségről van szó, de én mintegy félmegoldásként megvizsgálnék egy olyan lehetőséget, hogy nem az adatbázis összes szavával vizsgálnám a hasonlóságot 0 találat esetén, hanem csak azokkal a korábbi keresőszavakkal, melyek találatokat eredményeztek. Azaz gyűjteném a találatot eredményező keresett szavakat, melléjük azt, hogy hányszor kerestek rá. Ha ezekből nagyon sok lenne idővel, akkor mondjuk csak a legtöbbet keresett x szót vizsgálnám ezek közül. Így aztán bizonyos értelemben "öntanuló" lenne a rendszer, a legtöbbet keresett szavakban segítene.