T&R splet blog o spletnih storitvah. Razgaljamo tehnologijo!

reference spletnih strani
26th February

MySQL iskanje LIKE vs FULL-TEXT

MySQL omogoča dva načina iskanja po tabelah in sicer z LIKE ter FULL-TEXT.

#1: LIKE

MySQL:
  1. 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

MySQL:
  1. 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)

Več informacij o LIKE.

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 in ft_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

Deli s skupnostjo:

  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Podobni članki:

  1. Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like
  2. MySQL število vseh najdenih vrstic
  3. Rezanje teksta po koncu besede – php funkcija – substr – cut text – UTF-8
  4. MySQL – date funkcije – current date, now, add date, sub date, interval
  5. MySQL date BETWEEN – DATE FORMAT
  6. AJAX iskanje in dodajanje v seznam (select) z dodatnimi informacijami
  7. AJAX iskanje datotek, dodajanje v seznam ter predogled le teh (PDF, jpeg)
  8. MySQL kreiranje tabele s SELECT stavkom
  9. Pretvorba PHP MySQL aplikacije v PHP MS SQL aplikacijo (apache, php, mdb2, mysql => iis, php, mdb2, mssql)
  10. Kako preveriti ali že obstaja določena MySQL tabela

7x komentirano na “MySQL iskanje LIKE vs FULL-TEXT”

  1. Dejan je napisal:

    WHERE `ime_osebe` like '%rok%' ;)

  2. Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like | T&R splet - internetne storitve je napisal:

    [...] LIKE - MATCH AGAINST [...]

  3. [主页] je napisal:

    [主页]...

    MySQL iskanje LIKE vs FULL-TEXT | T...

  4. user-pic je napisal:

    user-pic...

    MySQL iskanje LIKE vs FULL-TEXT | T...

  5. 2·î 8th je napisal:

    2·î 8th...

    MySQL iskanje LIKE vs FULL-TEXT | T...

  6. Louise je napisal:

    Use top quality color that range or could not chip in the first temperature change. Another solution to protect the house and to increase warmth is to invest in new exterior.

  7. Micheline je napisal:

    Almost every male teenager wants to know how to build muscles. Keep in mind that it took you years to accumulate that amount of fat. This technique is predicated purely on food plan manipulation. Follow a known plan that will get you increased size.

Dodaj komentar