MySQL Full textové vyhledávání

Dnes jsem hrál optimalizovat pomalý SQL typ požadavku

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

Kde je problematické okamžik tady – Poslední část slovo % ‘ %’ a v ještě větší konkrétnost znaky % před slovo, za to děláme. Zástupný symbol % ,před libovolnou hodnotu, Naše aplikace přímo promítá přímo do pomalý, protože tímto způsobem aplikace přestane nás používat indexy. Jako vždy existují řešení, ale nejsou vždy jasné 😆 obecně MySQL máte řešení tohoto problému s fulltextové vyhledávání Indexování. Jak se má změna pole tam je hodně napsán v dokumentaci, ale ve spěchu jsem se popsat, jak změnit nejvyšší požadavek, protože se dostaneme na malé drama nakonec. Udělat roztomilý jako pro fulltextové pole, Dotaz musí být změněn ve formuláři:

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

Tedy struktura je jasné a není třeba za zbytečné diskuse. Výše uvedený dotaz vstoupí v platnost, Pokud slovo, pro které provádíte žádost alespoň 4 symbol, Toto je výchozí hodnota, Pokud chcete upravit, je nutné zadat hodnotu, Chcete mít v mém. cnf v části [mysqld] s deklarací ft_min_word_len= 3 nebo 2, 1 není dobrá volba samozřejmě 😉 . Po změnit hodnotu a restartujte server mysql-potřeba udělat opravu tabulek, aby nové indexování vstoupí v platnost. Zde vše jasné: měníte, Obnovit, rebildvam indexy a můj požadavek a vrátí 0 Kontrola souladu s 😀

SHOW VARIABLES

Vidím, že hodnoty, Ptal jsem se, že vstoupila v platnost, rebildvam indexy znovu – stejný výsledek. 🙄 Nenávist, velmi nepříjemné. ОТ ТУК НАТАТЪК ЗАПОЧНА ЕДНО ГОЛЯМО РУГАЕНЕ И РОВЕНЕ ЗА КЛЮЧА ЗА БАРАКАТА 😀 КОЙТО СЕ ОКАЗА ДОСТА, ДОСТА ИНТЕРЕСЕН. КАТО ЦЯЛО, КАТО ЗАПОЧНАХ ДА ЧЕТА ДОКУМЕНТАЦИЯТА ЗА НЕ ЗНАМ КОЙ ПЪТ И СТИГНАХ ДО ЕДИН ИНТЕРЕСЕН ПАСАЖ

Tato technika funguje nejlépe s velké sbírky (Vlastně, to byl pečlivě vyladěn tak). Pro velmi malé tabulky, slovo rozdělení přiměřeně neodráží jejich sémantickou hodnotu, a tento model může mít někdy bizarní výsledky. Například, Ačkoli slovo "MySQL" je přítomen ve všech řádcích tabulky články dříve, hledání slovo nevytváří žádné výsledky

PAPRSEK 😳 dát můj podnos malý – To bylo ještě test. V tabulce Naših velké aplikace s více než 2 000 000 pořádek a tam věci jsou spíš. Tak je již jasné, problém. Aby bylo jasné řešení, Stručně se zmínit, Tato podpora fulltextového vyhledávání 3 Pokročilé režimy LOGICKÁ HODNOTA , VÝRAZY a PŘIROZENÝ JAZYK jako poslední díla ve výchozím nastavení. O různých režimech můžete zkontrolovat dokumentaci, Vysvětlím ti to s 2-3 slova do booleovské hodnoty, protože to je klíč. Podporuje logické operátory typu a, NEBO , Ne a tak dále a může dělat nějaké kouzlo s hledání fráze, Chcete-li mít, je tu další, atd.. Podporuje a symbol *, To je ekvivalent zástupných znaků % 😉 je užitečné, Pokud hledaný výraz je v délce ft_min_word_len nebo malé zásobníky ;). Alespoň pro mě u stolu s o 100 řádku je dělá perfektní práci. Jediná věc, kterou vidět a dokončenou aplikaci:

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

Teď přichází čas indexování pracuje s námi zástupné znaky – odpověď je, že nevím. Myslím, že v zásadě, Pokud jde, protože není zadán v dokumentaci, ale v dokumentaci zřejmě říci ani zobrazit spoustu věcí 😀

Umocněn Zemanta

2 Komentáře

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

zanechte odpověď

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

Anti Spam *