MySQL Full tekst pretraživanje

Danas sam igrao za optimizirati spor SQL vrstu zahtjeva

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

Gdje je na neugodan trenutak – zadnji dio riječi % ‘ %’ i u čak i veća konkretnost znaka % prije je riječ, za to radimo. Zamjenski znak % ,prije bilo koje vrijednosti, Naša aplikacija direktno prevodi direktno u spor, jer na taj način se program zaustavi nas korištenje indeksa od u. Kao i uvijek ima rješenje, Ali nisu uvijek jasno 😆 općenito MySQL imati rješenje za ovaj problem s Pretraga mašina Indeksiranje na. Kako je promjena polja tu je puno napisano u dokumentaciji, Ali brzo ću opisati kako promijeniti zahtjev za vrh, jer konačno ćemo moći malo drame. Čine slatka kao odnosi se na puni tekst polju, upit treba mijenjati u obliku:

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

Struktura je očito, pa nema potrebe za nepotrebnom raspravom. Gore navedeni pitanje htijenje stupiti na snagu, Ako je riječ, za koje su stvaranje zahtjeva barem 4 simbol, Ovo je zadana vrijednost, Ako želite promijeniti, morate odrediti vrijednost, която желаете в my.cnf в частта [mysqld] sa izjavom ft_min_word_len= 3 ili 2, 1 не е добър избор очевидно 😉 . Nakon što promijenite vrijednost i ponovno pokretanje mysql poslužitelj-trebate kupiti obaviti popravak tablica, da bi novo indeksiranje stupa na snagu. Ovdje je sve čisto: promijeniti, Resetirati, rebildvam indeksi i moj zahtjev i vraća 0 Provjere sa 😀

SHOW VARIABLES

Vidim da se vrijednosti, Tražili su stupila na snagu, rebildvam indeksi ponovo – isti rezultat. 🙄 Mržnje, vrlo neugodno. ОТ ТУК НАТАТЪК ЗАПОЧНА ЕДНО ГОЛЯМО РУГАЕНЕ И РОВЕНЕ ЗА КЛЮЧА ЗА БАРАКАТА 😀 КОЙТО СЕ ОКАЗА ДОСТА, ДОСТА ИНТЕРЕСЕН. КАТО ЦЯЛО, KAO ЗАПОЧНАХ ДА ЧЕТА ДОКУМЕНТАЦИЯТА ЗА НЕ ЗНАМ КОЙ ПЪТ И СТИГНАХ ДО ЕДИН ИНТЕРЕСЕН ПАСАЖ

Such a technique works best with large collections (zapravo, To je bio pažljivo podešen tako). Za vrlo male tablice, riječ raspodjela ne odražava adekvatno njihove semantičke vrijednosti, i ovaj model može ponekad dati bizarne rezultate. Na primjer, Iako riječ "MySQL" je prisutan u svakom retku tablice članaka prikazan ranije, potraga za riječ nema rezultata

ГРЕДА 😳 Дам табличката ми беше малка – To je još uvijek test. U tablici Naših velikih aplikacija s preko 2 000 000 red i ima stvari spavaju. Pa već je očito problem. Da se razumijemo rješenje, Spomenut ću ukratko, taj pun tekst traženje Podrška 3 Dodatnim načinima BOOLEAN , IZRAZI i PRIRODNI JEZIK kao posljednji radovi prema zadanim postavkama. O različitim načinima možete provjeriti u dokumentaciji, Ja ću objasniti s 2-3 riječi BOOLEAN jer je ključ. Ona podržava logički operatori tipa i, ILI , Ne i tako dalje i mogu napraviti magiju sa traženje fraze, imati na, Postoji još jedan, itd.. Podržava i simbol *, To je ekvivalent zamjenskih znakova % 😉 je koristan, Kada je pojam za pretraživanje u duljini i ft_min_word_len ili male ladice ;). Barem mi za stolom s o 100 linija radi savršen posao. Jedina stvar koju mogu vidjeti i gotovih aplikacija:

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

Sada dolazi vrijeme indeksiranje djela s nama zamjenskih znakova – Odgovor je ne znam. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Poboljšana po Zemanta

2 Komentari

  1. fulltext search Си е много яка хава от как започнах го ползвам се родих. Само, че при много големи таблици и той полудява. 🙂

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

ostavi odgovor

Vaša e-mail adresa neće biti objavljen. Obavezna polja označena su *

Protu-SPAM *