Zdravim
Poznámka: Vhodné by bolo v článku jednotlivé tabuľky pomenovať, aby bolo jasné o ktorej človek akurát hovorí (aj v článku aj tu v komentároch).
K tomu vykonu zatiaľ iba toľko, že nerozumiem, prečo sú v tabuľke indexu uložené celé slová. Keď budem mať 100 článkov o PHP a v každom sa toto slovo vyskytne v priemere 5 krát, tak to bude 500 krát v tabuľke. To teda tej výkonnosti nepridá.
Podľa mňa by bolo vhodné vytvoriť tabuľku iba na slová, s dovma stĺpcami. Prvý by bol číselný, predstavujúci ID slova a bol by to primárny kľúč. Druhý stĺpec textový a nad nim by bol unikátny index.
V tabuľke indexu by sa potom stĺpec "Slovo" zmenil na niečo ako "id_slovo" a hlavne by bol číselný.
Ďalšia vec je, že ak sa slovo v článku vyskytuje viackrát, do tabuľky indexu ho stačí zapísať iba raz, pričom "Score" by bola suma tej relevancie. Pre daný ukážkový príklad, by pre slovo "PHP a článok 1 bol záznam:
ID = ?,
Clanok_ID = 1,
Slovo_ID = 3,
Score = 8.
Stĺpec "ID" je úplne zbytočný, čiže by tam nemal byť a primárny kĺúč na tabuľke by bol kombinácia Clanok_ID, Slovo_ID. A ešte by sa zišiel index nad stĺpcom Slovo_ID.
Tým pádom už je jednoduché aj vyhľadávanie viacerých slov a ani nepotrebujem kešovanie. Napr. budem chcieť vyhľadať články, pričom zadám reťazec "PHP SQL funkcie". reťazec najprv podľa potreby rozparsujem na jednotlivé slová a z tabuľky slov vyberiem ich IDčka.
Tie si v cykle uložím do reťazca pre SQL operátor "IN" (pre tie tri slová by som napr. dostal reťazec z IDčiek "1,5,28"). A nakoniec vyhľadám jednotlivé články:
SELECT Clanok_ID, SUM(Score) AS relevance
FROM search
WHERE Slovo_ID IN (1,5,28)
GROUP BY Clanok_ID
ORDER BY relevance DESC;
PS: No Takže k tej mojej poznámke na začiatku. Tá druhá tabuľka sa teda volá "search". Ale aj tak by mali byť ich názvy explicitne uvedené v článku.
Tak zatiaľ.... Uvidíme, čo bude v pokračovaní. :)
Jasně, příště bude implementace. Je možné, že když někdo napíše lepší implementaci s lepším algoritmem, rád ji nahostuji na svém webu a dáme ji tady na root.cz do novinek, v tom by neměl být problém.
Ono upřímně jedna věc je vmýšlet hezkou teorii (takových jsem měl) a druhá věc je najít čas a doťukat jí do použitelnosti. A bohužel se mi na každou věc i v open source produktech snáší kritika, ale opravy nikdo neposílá :(