MySQL Cookbook by

Keskustelu

Tietueiden etsimiseen, jotka sisältävät tietyn lausekkeen, etvoi käyttää yksinkertaista FULLTEXThakua:

mysql>  -> +----------+| COUNT(*) |+----------+| 548 |+----------+

Kysely palauttaa tuloksen, mutta se ei ole se tulos, jota etsit. FULLTEXThaku laskee relevanssijärjestyksen, joka perustuu jokaisen sanan esiintymiseen erikseen riippumatta siitä, missä se esiintyy vtext-sarakkeessa, ja järjestys on nollasta poikkeava niin kauan kuin jokin sanoista esiintyy. Näin ollen tällainen kysely löytää yleensä liikaa tietueita.

MySQL 4.0.2:sta lähtien FULLTEXThaku tukee lausehakua Boolen tilassa. Jos haluat käyttää sitä, aseta lauseke kaksinkertaisten lainausmerkkien sisään.

mysql>  -> +----------+| COUNT(*) |+----------+| 1 |+----------+

Ennen versiota 4.0.2 tarvitaan kiertotie. Voit käyttääIN BOOLEANMODE-hakua, joka edellyttää jokaisen sanan esiintymistä,mutta se ei oikeastaan ratkaise ongelmaa, koska sanat voivat edelleen esiintyä missä tahansa järjestyksessä:

mysql>  ->  -> +----------+| COUNT(*) |+----------+| 3 |+----------+

Jos sen sijaan käytät SQL-hahmotelman vastaavuutta, se palauttaa oikean tuloksen:

mysql>  -> +----------+| COUNT(*) |+----------+| 1 |+----------+

SQL-hahmotelman vastaavuuden käyttäminen on kuitenkin todennäköisesti hitaampaa kuinFULLTEXT-haku. Näyttää siis siltä, että sinulla on epämiellyttävä valinta käyttää menetelmää, joka on nopeampi mutta ei tuota haluttua tulosta, tai menetelmää, joka toimii oikein mutta on hitaampi. Onneksi nämä eivät ole ainoita vaihtoehtoja. Voit yhdistää molemmat menetelmät samassa kyselyssä:

mysql>  ->  -> +----------+| COUNT(*) |+----------+| 1 |+----------+

Tällöin saat molempien täsmäytystapojen parhaat puolet:

  • Käyttämällä MATCH( )-lauseketta MySQL voi suorittaa FULLTEXT-haun tuottaakseen joukon ehdokasrivejä, jotka sisältävät lausekkeen sanoja. Tämä kaventaa hakua huomattavasti.

  • Käyttämällä SQL-mallitestiä MySQL voi hakea ehdokasrivit tuottamaan vain ne tietueet, joissa kaikki sanat on järjestetty oikeaan järjestykseen.

Tämä tekniikka epäonnistuisi, jos kaikki sanat ovat pienempiä kuin indeksointikoneen sanan vähimmäispituus tai jos ne esiintyisivät useammassa kuin puolessa tietueista. Tällöin FULLTEXThaku ei palauta lainkaan tietueita. Voit löytää tietueet käyttämälläSQL-kuvioyhteensopivuutta.

Vastaa

Sähköpostiosoitettasi ei julkaista.