Autor Zpráva
xlifer
Profil
Existuje v MySQL nějaký příkaz nebo vhodnější metoda na hledání více výrazů namísto použítí LIKE OR ?

SELECT * FROM tabulka WHERE pole LIKE 'slovo1%' OR pole LIKE 'slovo2%' OR pole LIKE 'slovo3%' OR pole LIKE 'slovo4%'
ninja
Profil
Použijte MySQL fulltext.
xlifer
Profil
Nejvhodnější mi připadá použítí REGEXP (RLIKE), co myslíte?
I když nevím zda je to efektivnější než LIKE nebo fulltext MATCH, AGAINST?

SELECT * FROM tabulka WHERE sloupec REGEXP '(slovo1)|(slovo2)|(slovo3)|(slovo4)';


připadně tedy takto:

SELECT * FROM tabulka WHERE MATCH(sloupec) AGAINST('slovo1* slovo2* slovo3* slovo4*' IN BOOLEAN MODE);
xlifer
Profil
Které provedení by jste tedy doporučili z výše uvedených návrhů?
ninja
Profil
xlifer: Nejrychlejší by měl být fulltext a pokud znáte a překousnete jeho jistá omezení, použil bych jej.

Pokud fulltext nevyhovuje, tak sérii LIKŮ. Ať LIKE nebo REGEXP, určitě mít na prohledávaném sloupci index.
xlifer
Profil
ninja:

A jaké významné omezení vlastně fulltext má oproti LIKE nebo REGEXP?
TomášK
Profil
xlifer:
Zjednodušeně fulltext funguje tak, že si vytvoří databázi slov, která se v textu vyskytují a pamatuje si, kde se vyskytují. Proto dokáže rychle odpovědět na dotaz, které záznamy obsahují dané slovo nebo skupinu slov. Pokud vás zajímají výskyty slov, pak je ideální. Potřebujete-li jen části slov nebo regulární výrazy, pak můžete narazit, kam až jdou možnosti v tomto směru nevím.
Při použití LIKE je třeba projít záznamy a porovnvat, zda odpovídají zadanému patternu. Jde vytvořit INDEX, který si pamatuje několik prvních písmen slov, tedy pokud pattern vypadá 'text%', může být vyhledávání efektivní, pro '%text%' bude třeba vždy projít celou tabulku. REGEXP se chová podobně jako LIKE, ale nevím, jestli dokáže využít nějaký INDEX, je dost možné, že pokaždé bude procházet celou tabulku.

V kostce by to mělo fungovat přibližně takto, ruku do ohně bych za to nedal, databáze občas dokážou víc než tuším :-)
ninja
Profil
Největší omezení fultextu je minimální délka slova 4 znaky (lze změnit) a stop slova (jde jen velmi težko změnit). Výhoda je možnost snadného seřazení výsledků dle relevance .
xlifer
Profil
ninja:

- 4 znaky min. délka vyhledávání je nastavena jako dafault? Kde nebo jak lze tento počet změnit?

- co je konkrétně myšleno tím "stop slova"?
ninja
Profil
xlifer: Je opravdu tak težké kliknout na první odkaz v Googlu?
xlifer
Profil
ninja:

Určitě není, ale mě přijde velký přínos tohto skvělého fóra, že se zde člověk dozví ucelené informace a názory zkušenějších z praxe, protože co si budeme povídat né vždy to v google nebo jinde je vysvětlené k pochopení, případně celý text anglicky, ap. musíte brát do úvahy, že sem nechodí všichni profíci a potřebuji věci více rozebrat nebo vysvětlit. Možná by se pak mohlo jmenovat toto fórum spíše google.jakpsatweb.cz :-)

Je mi jasné, že je docela únavné odpovídat na některé stejné věci dokola, ale holt takový je život i fórum...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0