Olen rakentanut hakupalvelua jossa otetaan käyttäjältä sisään hakusana jossa on väärinkirjoituksen vaara melko suuri. Tietoja kannassa mistä haetaan yhdestä ainoasta tietueesta parhaiten osuvia asioita on yli 100k, kahta saman nimistä tietoa kannassa ei kuitenkaan ole, mutta rajattomasti lähellä olevia tai samoja sanoja sisältäviä yhdistelmiä on.
Olen nyt suunnitellut hakurutiinin seuraavanlaiseksi, eli haetaan kunnes joku tuottaa tyydyttävän osuman:
1) Haetaan ensin 100% tarkalla osumalla, eli where tieto = hakusana, jos osuu niin palautetaan se
2) Otetaan fulltext-search käyttöön, WHERE MATCH (tieto) AGAINST("hakusana" IN BOOLEAN MODE), myös pisteytys mukana, jos löytyy vain yksi osuma jolla on tietyn rajan ylittävät pisteet niin palautetaan
3) Kolmas haku tehdään pelkällä match() against() haulla, arvostellaan osumien määrää ja pisteitä ja lasketaan niistä osumaa
4) Yritetään korjata hakusanasta yhdyssanavirheet haku sana -> hakusana ja toistetaan kohdan 2 haku uudestaan, muutoin samat ehdot
Kaikki tähän asti toimii ihan kivasti, nyt olenkin pyöritellyt ajatusta miten onnistuisi tehdä vielä haku joka hajottaisi sanaa osiin. Ongelmana on löytää nyt tietueita tyyliin "tieto1-tieto" "haettava-asia", nämä löytyy kyllä hakusanoilla "tieto1-tieto" ja "tieto1 tieto" sekä "haettava-asia" ja "haettava asia", mutta jos kirjoitusasu onkin "tieto1tieto" niin osumaa ei saada.
Hakusanoissa ei sinänsä mitään logiikkaa ole, kyse on täysin vapaista nimistä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.