MySQL Full Text Search

Tänään olen pelannut optimointi hidas SQL hakemus lomakkeella

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

Missä on ongelma – viimeinen osa the ‘%word%’ ja vielä tarkempi merkki % ennen kuin sana, mitä teemme. Jokeri symboli % ,mitään arvoa, pyydämme suoraan käännettynä suoraan hidas, koska näin kysely ei estä meitä käyttämästä indeksit kentällä. Ratkaisu kuten aina on, mutta se ei ole aina selvää, 😆 Yleensä MySQL sinulla on ratkaisu tähän ongelmaan tekstihakuun indeksointi kentät. Koska on muutos laatikko paljon kirjoitettu dokumentointi, mutta voin lyhyesti kuvata, miten muuttaa tämän kyselyn, koska saamme pienen teatterin lopuksi. Teki miten soveltaa kokotekstihaku laatikko edellä, pyynnön on oltava muutoksiin tyyppi:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

Siten rakenne on ilmeinen ja ei tarvitse turhaa keskustelua. Tämä kysely tulee voimaan, jos sana, jonka voit tehdä pyynnön, ainakin 4 merkkiä, oletusarvo, jos haluat muuttaa sitä, sinun on määritettävä arvo, която желаете в my.cnf в частта [tusdi] lausunto ft_min_word_len=3 tai 2, 1 не е добър избор очевидно 😉 . Kun haluat muuttaa arvoa ja käynnistä mysql-palvelin-sinun täytyy tehdä korjaus taulukoita, jotta uusi indeksi tuli voimaan. Täällä kaikki on selvää: Teen muutoksia, uudelleen, rebeldom indeksit ja tehdä pyyntö-ja - palautus 0 jotta 😀 Kuulla

SHOW VARIABLES

Näen, että arvot, Kysyin, tuli voimaan, rebeldom, indeksit – sama tulos. 🙄 Epämiellyttävä, erittäin epämiellyttävä. Täällä ja sitten alkoi yksi iso Rogaine ja naarmuja avain irtoa 😀, Joka oli hyvin, varsin mielenkiintoinen. Yleensä, Aloin lukea dokumentaatio, en tiedä, mitä polkua ja tuli mielenkiintoinen passage

Such a technique works best with large collections (itse asiassa, se oli huolellisesti viritetty tällä tavalla). Hyvin pienet pöydät, sana jakelu ei oteta riittävästi huomioon niiden semanttinen arvo, ja tämä malli voi joskus tuottaa outoja tuloksia. Esimerkiksi, vaikka sana "MySQL" on läsnä jokaisessa rivi artikkelit taulukko osoittanut aiemmin, etsi sana tuottaa mitään tuloksia

ГРЕДА 😳 Дам табличката ми беше малка – silti, se oli testi. Meidän kyselyt osaksi yksi iso pöytä, jossa on enemmän kuin 2 000 000 järjestys ja asioita tapahtumasta. No tämä on ilmeinen ongelma. Jotta ymmärtää päätöksen, Totean lyhyesti, mitä kokotekstihaku tuki 3 advanced-tilassa BOOLEAN , ILMAISUJA ja LUONNOLLINEN KIELI kuten viimeaikaiset toimii oletuksena. Eri tilat löytyvät asiakirjat, Selitän 2-3 sanat BOOLEAN, koska se on kaikki noin. Se tukee loogisia operaattoreita JA, TAI , EI, ja niin edelleen, ja voit tehdä erilaisia loitsuja suosittuja lauseita, siellä, ei toinen ja niin edelleen. Tukee ja symbolit *, vastaa yleismerkkejä % 😉 Tämä on hyödyllistä, kun etsit sanaa alla koko ft_min_word_len tai pienet lokerot ;). Ainakin minulla on pöydän ympärillä 100 linjat ovat täydellisiä. Sinä vain täytyy nähdä täytetty hakemus:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

Tässä nyt tulee hetki, onko meillä työtä jokeri indeksointi merkkiä – vastaus: en tiedä. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Parannettu Zemanta

2 Kommentit

    1. Е при големи таблици вече има други решения 😉 partitions да речем или други механизмни за fulltext search като Sphinx

Jätä vastaus

Sähköpostiosoitteesi ei julkaista. Pakolliset kentät on merkitty *

Anti SPAM *