MySQL iskanje LIKE vs FULL-TEXT
MySQL omogoča dva načina iskanja po tabelah in sicer z LIKE ter FULL-TEXT.
#1: LIKE
-
SELECT `ime_osebe` FROM `seznam_oseb` WHERE `ime_osebe`='%rok%' OR `ime_osebe`='R%' OR `ime_osebe`='R__' OR `ime_osebe`='%ok'
#2: FULL-TEXT
-
SELECT `ime_osebe` FROM `seznam_oseb` MATCH(`content`) AGAINST('Rok')
#1 LIKE:
- '%ok' => 'Karkoli ok' (Karkoli => poljubno število poljubnih znakov pred "ok", Rok, blablaok, ToSemJazRok, 1okolist, ...)
- '_ok' => 'X ok' (X => točno en poljubni znak pred "ok", torej celotna beseda mora biti dolžine tri, Rok, Xok, Kok, Mok, ...)
- SELECT 500 LIKE '5%' => Možnost uporabe na številkah (ni potrebno, da iščemo po polju VARCHAR, CHAR, TEXT ampak tudi INT, itd)
Problem pri LIKE je v tem, da v primeru, ko iščemo po vsebini za manjše besede (dolžine 3 ali manjše), vrne skoraj vse vrstice. Primer, "in" je prisoten v skoraj vseh stavkih, zato nam bo MySQL kot rezultat vrnil skoraj vso vsebino oz. vrstice z vsebino, ki vsebuje 'in'.
Tukaj nastopi FULL-TEXT, ki (vsaj kakor je meni znano) deluje le na MyISAM tabelah. Na srečo obstajajo dodatki, kot je Sphinx Search Egine, ki dodajo podporo tudi za inno tabele. FULL-TEXT značilnost:
- avtomatsko sortira rezultate po relevanci (bolj relevantni zadetki so na vrhu)
- deluje le na CHAR, VARCHAR, ali TEXT tipu
- potrebuje FULL-TEXT index (ALTER TABLE `tabela` ADD FULLTEXT (`ime_polja`))
- če se iskana beseda pojavi v več kot 50% vseh vrstic potem MySQL vrne prazen rezultat
- obstaja splošna datoteka z pogostimi besedami jezika (npr: the, we, are). Če stopword datoteka vsebuje naš iskalni niz bo MySQL vrnil prazno množico. Stopword datoteko lahko povozite z svojo z ukazom:
ft_stopword_file - privzeto iskalne nize manjše od 4 in daljše od 10 ne upošteva, je pa možno to spremeniti z
ft_max_word_len inft_min_word_len. V primeru spremembe morate FULL-TEXT index ponovno zgraditi, lahko z ukazom REPAIR TABLE table QUICK, vendar se včasih zgodi, da potem MySQL vrača čudne rezultate. Rešitev zato je odstranitev FULL-TEXT indexa in ponovno dodajane FULL-TEXT indexa. - je hitrejši kot LIKE
Dodatne informacije za FULL-TEXT:
Primer rezultatov za majhne iskalne niz, v mojem primeru: se
FULL-TEXT (1 vrstica izmed 70):
Projects
Enterprise class IT security project services for any size of business. All security projects delivered by the security Practice follow our Assess, Design, ...
LIKE (70 vrstic izmed 70):
ISO27001
Reach for the ultimate security standard If you want to be setting the standard in private or public sector IT security, then you need ISO27001. Certification ...
Our Technology
How we use technology to make us the best in the business. We Practice What We Preach. If we recommend a solution to our clients, then we’ll be using it ...
We cannot compete with these companies and be the best at delivering IT service to our clients – so we don’t try. We realise that we can deliver value to our ...
Tudi na splošno FULL-TEXT iskanje vrne bolj primerne rezultate, ki vsebujejo informacijo za katero je večja verjetnost, da jo uporabnik išče kot pri LIKE načinu iskanja.
Delodajalec: Pangaea.si
Podobni članki:
- Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like
- MySQL število vseh najdenih vrstic
- Rezanje teksta po koncu besede – php funkcija – substr – cut text – UTF-8
- MySQL – date funkcije – current date, now, add date, sub date, interval
- MySQL date BETWEEN – DATE FORMAT
- AJAX iskanje in dodajanje v seznam (select) z dodatnimi informacijami
- AJAX iskanje datotek, dodajanje v seznam ter predogled le teh (PDF, jpeg)
- MySQL kreiranje tabele s SELECT stavkom
- Pretvorba PHP MySQL aplikacije v PHP MS SQL aplikacijo (apache, php, mdb2, mysql => iis, php, mdb2, mssql)
- Kako preveriti ali že obstaja določena MySQL tabela



September 8th, 2009 ob 11:42 am
WHERE `ime_osebe` like '%rok%'
May 7th, 2010 ob 6:54 pm
[...] LIKE - MATCH AGAINST [...]
February 23rd, 2013 ob 11:55 pm
[主页]...
MySQL iskanje LIKE vs FULL-TEXT | T...
March 15th, 2013 ob 10:17 pm
user-pic...
MySQL iskanje LIKE vs FULL-TEXT | T...
April 9th, 2013 ob 3:56 am
2·î 8th...
MySQL iskanje LIKE vs FULL-TEXT | T...