Pretraživanje MySQL punog teksta

Данас сам играо за оптимизацију спор СКЛ Примена рода

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

Где је проблем сада овде – последњи део "% реч%’ а чак више специфичних знакова % испред ријечи, који до. џокер симбол % ,пре било какве вредности, директно нас чини упит директно у спор, јер се на тај начин апликација нас престане да користи индицес Фиелд. Одлуке као и увек, али не увек јасно 😆 Генерално МиСКЛ Они имају решење за овај проблем Фуллтект сеарцх индексирање поље. Како промена на терену има много писане документације, али журба ће описати како да промените горњи захтев, јер ћемо доћи до малог драме коначно. Следка као важећим ФуллТект поље изнад, Пријава мора бити промена у врсти:

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

Дакле, структура је очигледна и не треба непотребно дискусију. Наведени упит ће ступити на снагу, Ако је реч, за направите захтев најмање 4 симболи, Дефаулт вредност је, ако желите да измените мора да наведе вредност, която желаете в my.cnf в частта [МиСКЛ сервер] декларација фт_мин_ворд_лен= 3 или 2, 1 не е добър избор очевидно 😉 . Када промените вредности и поновно покретање МиСКЛ сервер-а потребу да ради поправке на својим столовима, налог за новог индексирање ступити на снагу. До сада све јасно: направити промене, ресетовање, ребилдвам индексе и радити свој захтев и повратак 0 Провера са циљем 😀

SHOW VARIABLES

Видим да су вредности, Ја сам питао на снази, ребилдвам агаин индексе – isti резултат. непријатан 🙄, веома непријатно. Од сада па надаље је почео велики псовке и гребање кључ у шупи 😀 који је био прилично, веома занимљив. у целости, Почео сам да читам документацију, не знам који пут и дошли до занимљивих пролаз

Such a technique works best with large collections (заправо, је пажљиво подешена на овај начин). За врло мале табеле, дистрибуција реч не одражава адекватно њихов семантички вредности, и овај модел може понекад произвести бизарне резултате. На пример, иако је реч "МиСКЛ" је присутан у сваком реду табеле чланака раније приказаној, потрага за реч даје никакве резултате

ГРЕДА 😳 Дам табличката ми беше малка – Ипак, то је био тест. Наша апликација у великим столом преко 2 000 000 ред и тамо ствари спавао. Па сада јасно Проблем. Да би јасну одлуку, Укратко ћу поменути, који подржава цјеловито текстуално 3 напредни режим БООЛЕАН , ЕКСПРЕССИОНС i натурал лангуаге као последњи рад по дифолту. За режима може да провери документацију, Ја ћу објаснити 2-3 Боолеан речи јер је то кључ. Он подржава логичке операторе су и, ИЛИ , НЕ и тако даље и могу да неку магију са популарним фраза, има један, ниједна друга итд. Одржавају и симболи *, што је еквивалентно џокер симбол % То је корисно 😉, када је термин за претрагу мања од дужине фт_мин_ворд_лен или мале посуде ;). Барем мени сто са око 100 наредба ради савршено посао. Остављајући само види и завршио захтев:

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

Долази тренутак да наша индексирање ради са вилдцард знаковима – одговор је да не знам. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Potpomognuto Zemanta

2 коментари

Оставите одговор

Ваша емаил адреса неће бити објављена. Обавезна поља су означена *

anti Спам *