MySQL паўнатэкставы пошук

Сёння я гуляў, каб аптымізаваць павольны SQL прымяненне роду

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

Дзе цяпер праблема тут – апошняя частка '% слова%’ і ў яшчэ больш канкрэтных персанажаў % перад словам, якія робяць. Wildcard сімвал % ,перад любым значэннем, непасрэдна робіць нас запыт непасрэдна ў павольна, таму што ў гэтым выпадку прыкладанне перастае нам выкарыстоўваць індэксы Field. Рашэнні, як заўсёды, але не заўсёды ясна 😆 цэлым MySQL У іх ёсць рашэнне гэтай праблемы паўнатэкставага пошуку поле індэксавання. Як змяняецца поле мае шмат пісьмовых дакументаў, але паспешнасць будзе апісана, як змяніць верхні запыт, таму што мы дабяромся да маленькай драмы, нарэшце,. Sledka ў якасці прымяняецца паўнатэкставага поля вышэй, Заява павінна быць змена тыпу:

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

Такім чынам, структура відавочная і не мае патрэбу ў непатрэбнай дыскусіі. Прыведзены вышэй запыт ўступіць у сілу, калі слова, для вас зрабіць запыт па меншай меры, 4 сімвалы, Значэнне па змаўчанні, калі вы хочаце змяніць неабходна ўказаць значэнне, які вы хочаце ў мой.cnf ў раздзеле [туздЫ] дэкларацыя ft_min_word_len= 3 ці 2, 1 відавочна, добры выбар 😉 . Пасля змены значэння і перазапуск сервера MySQL-неабходнасць рабіць рамонт на вашых сталах, заказ для новай індэксацыі ўступіць у сілу. Да гэтага часу ўсё ясна: ўносіць змены, скід, rebildvam індэксы і зрабіць мой запыт і вяртае 0 Праверка з замовай 😀

SHOW VARIABLES

Я бачу, што значэння, Я спытаў у сілу, rebildvam зноў індэксы – Такі ж вынік. 🙄 Непрыемна, вельмі нязручна. З гэтага моманту ён пачаў вялікі лаючыся і драпаць ключ да адрыны 😀, які быў даволі, даволі цікава. ў цэлым, Я пачаў чытаць дакументацыю не ведаю, які шлях і прыйшоў да цікавых праход

Such a technique works best with large collections (на самой справе, ён быў старанна наладжаны такім чынам,). Для вельмі маленькіх табліц, размеркаванне слоў не адлюстроўвае адэкватна іх сэнсавае значэнне, і гэтая мадэль можа часам вырабляе дзіўныя вынікі. Напрыклад, хоць слова "MySQL" прысутнічае ў кожнай радку табліцы артыкулаў, паказанай раней, пошук словы не дае ніякіх вынікаў

БЭЛЬКА 😳 Дам латок і мне была невялікая – Тым не менш, гэта быў тэст. Наша дадатак у вялікай табліцы над 2 000 000 парадак і там усё спалі. Ну цяпер зразумела, праблема. Для таго, каб прыняць дакладнае рашэнне, Я сцісла згадаю, які падтрымлівае паўнатэкставы пошук 3 пашыраны рэжым Булевы , ВЫРАЗЫ і натуральны мова у якасці апошняй працы па змаўчанні. Для рэжымаў можна праверыць дакументацыю, Я растлумачу 2-3 BOOLEAN словы, таму што гэта ключ. Ён падтрымлівае лагічныя аператары, такія AND, АБО , НЕ і гэтак далей, і можа зрабіць некаторыя магіі з папулярнымі фразамі, ёсць адзін, няма ніякай іншай і г.д.. Падтрымліваць і сімвалы *, што эквівалентна шаблоннага сімвала % карысна 😉, калі тэрмін пошуку менш даўжыні ft_min_word_len або невялікія латкі ;). Прынамсі, мне стол з а 100 заказ робіць ідэальную працу. Пакінуўшы толькі бачыць і завяршыў запыт:

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

Тут наступае момант, ці працуе наша індэксацыя з знакамі падстаноўкі – адказ я не ведаю,. Наогул, я думаю, што, таму што не сказана інакш у дакументацыі, але ў дакументацыі выразна не гавораць ці паказваюць шмат рэчаў 😀

падтрымліваючы Zemanta

2 каментары

  1. паўнатэкставы пошук з'яўляецца вельмі трывалай хава, як я пачаў выкарыстоўваць яго я нарадзіўся. Толькі, што пры вельмі вялікіх табліц, і ён сыходзіць з розуму. 🙂

    1. Пры вялікіх табліцах ўжо ёсць іншыя рашэнні 😉 partitions скажам, або іншых механизмни за паўнатэкставага пошуку Sphinx

Пакінуць адказ

Ваш адрас электроннай пошты не будзе апублікаваны. Абавязковыя палі пазначаныя *

Анты-спам *