Vlákno názorů k článku PHP pro experty: Inteligentní vyhledávání od Satano - Zdravim Poznámka: Vhodné by bolo v článku jednotlivé tabuľky...

  • Článek je starý, nové názory již nelze přidávat.
  • 10. 1. 2005 21:02

    Satano (neregistrovaný)

    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í. :)

  • 10. 1. 2005 22:15

    markon (neregistrovaný)

    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á :(

  • 11. 1. 2005 7:57

    Satano (neregistrovaný)

    Mno. Tak ja som tam toho napisal dost. Tak to mozes brat ako opravu. :)