Verwijderd schreef op 08 december 2002 @ 04:07:
Dat de search slecht werkt weet inderdaad iedereen, maar wat ik graag wil weten is hoe hoog het eigenlijk op het verlanglijstje van (gathering of)Tweakers staat om dit eens te verbeteren.
Hoog, maar op de 'maar' kom ik zo op terug.
Ik bedoel niet te zeggen dat jullie NU op mijn commando die search moeten gaan verbeteren.
Als het een kwestie van 10 seconden werk (of zelfs 10 uur) was, dan was het allang gedaan

All in all is GoT naast een gezellig forum inmiddels wel uitgegroeid tot een heuze "knowledge base" (da's Engels ja). Ik vind het zonde dat deze momenteel slecht tot helemaal niet toegankelijk is, want de waarde van al die opgeslagen kennis is echt ENORM.
Uhuh.
(Oh, en dat er een alternatieve search is weet ik , maar deze is nog niet zo goed als de 'oude' search en daarnaast, GoT moet toch gewoon zelf een search hebben?)
Die alternatieve search is veelal _beter_ dan de 'oude search van topix'.
Even voor de duidelijkheid, de topix search engine gebruikte
hetzelfde principe van opslaan en doorzoeken van de database als React nu doet, sterker nog, in principe is die van React beter.
Echter werd de topix-search
ook zeer sterk genekt door de grootte van de database en hebben we (eerst Femme en later ik) er al een aangepaste methode omheen gebakken.
Daardoor werd er in topics van maximaal 100 dagen oud gezocht, was er een voorkeur voor zoeken op topictitel, kon je echt niet op woorden kleiner dan 3 karakters zoeken.
En ook bij topix waren de klachten over de "slechte search engine" niet van de lucht (hoewel dat natuurlijk niet altijd aan de engine te wijten was

)
Bij React wilden we graag weer proberen de complete database te indexeren (die ondertussen zowat verdubbeld was trouwens), maar door de enorme grootte ging dat dus mis, de topix-engine had het niet sneller kunnen indexeren trouwens (volgens mij zelfs langzamer dan de laatste react-versie het deed, maar dat hebben we nooit echt vergeleken).
Wat mijn alternatieve engine _wel_ kan en topix/react niet is zoeken op willekeurig korte (niet helemaal lange, dat is op 50 chars gelimiteerd) woorden, zelfs een woord als c++ en getallen snapt ie.
Daarnaast is ie veel sneller en efficienter met doorzoeken van zijn eigen zoek-database (die nu 9.5GB is).
Dat die omega-engine nog niet perfect is, daar ben ik me maar al te goed van bewust, maar volgens mij is ie net zo 'kreupel' als de engine van topix, maar op andere vlakken...
Goed, doordat die omega-engine opzich wel goed werkt en vooral een stuk sneller is dan de topix/react-engine hebben we besloten voor GoT de interne mysql-based-engine niet meer toe te passen en ook niet verder te ontwikkelen. Mysql laat gewoon de schaling van de search-engine niet toe en dat was ook wel te verwachten als je een beter begrip van die search-engine hebt, vroeg of laat zou het tegen flinke beperkingen oplopen en met trucjes kan je dat wel wat vooruit schuiven maar het houdt een keer op. En daar liepen we dus tegen aan.
Daarom besloten we dat we beter een engine als omega (maar wellicht niet omega zelf, omdat ie nog wel wat probleempjes heeft

)
Het nadeel van het toepassen van zo'n engine is echter dat het veel tijd kost om een goede uit te zoeken, die dan om te bouwen zodat ie voor React geschikt is en hem dan te testen (alleen het indexeren van de GoT-db kost al gauw een paar dagen, en veel kleinere db's testen heeft alleen nut om de werking te testen, niet voor de performance).
Ten eerste, we hebben
geen toegang tot de source-code van topix. Toevallig wel tot de indexeer-code van hun zoekmachine, maar dat zegt niet dat we dat zomaar mogen kopieren.
Goed, doordat ik die code wel es ingekeken heb, weet ik dat hun zoekmachine hetzelfde principe gebruikt als wat we met React probeerden en dat dat dus met grote databases in de problemen kan komen.
Dus naast het feit dat we die code niet zomaar mogen gebruiken (niet onoverkomelijk, weet ik wel

) hebben we het eigenlijk al getest (in een andere vorm).
Tsja, dat ging over een oude versie van omega terugzetten, niet over de engine van topix
Anyway, ik zal dan deze uitgebreide uitleg post ook in dat MED-topic linken en daarom hier nog even uitleggen _waarom_ de mysql-based engines zo slecht werken voor ons.
Als je zoekt op de tekst "windows 2000 crasht met games in direct3d" (lijkt me een redelijke zoekstring, niet?)
Dan moet je dus eigenlijk weten hoe een engine probeert te zoeken.
Eerst de react/topix-engine:
- De zin wordt in losse woorden opgesplitst, de overbodige (de zgn ruiswoorden, ze komen zo vaak voor dat het geen zin heeft erop te zoeken) woorden eruit gehaald en dan houden we dus dit over:
windows, 2000, crasht, games, direct3d
- Dan worden er in de zgn woord-topic koppeltabel de bijpassende topics opgezocht.
Er wordt eerst per woord het woordid bepaalt en die wordt van die woordid's een query opgebouwd (afhankelijk of je OR of AND gebruikte verschilt de query natuurlijk), echter is het zo dat er
per woord in principe de hele tabel doorzocht moet worden (weliswaar kan je dit door je database laten doen, op een efficientere manier, maar toch). De woord-koppel-tabel bij topix bevatte overigens zo'n 60-80Miljoen woordid-topicid koppels. Als er dus voor het woord 'windows' 50.000 topics gevonden worden en voor '2000' nog eens 50.000 etc heb je al gauw dat je database met enkele honderden-duizenden (of zelfs miljoenen) topicid's opgescheept zit in eerste instantie.
- Als ie die topicid's heeft bijeengegaart, moet ie natuurlijk nog bepalen of je ze dmv AND of OR eruit wilde hebben. Bij OR is dat domweg alle gevonden unieke topicid's sorteren op telling (oid) en bij AND is dat alleen die topicid's opsnorren die alle woorden bevatten.
Kortom, een vrij zware actie (en ja, ik ken het bestaan van indices

).
Het grootste nadeel van deze engine is dus vooral dat ie
alle mogelijk geschikte topics eerst op moet zoeken en daarna pas kan proberen het te filteren op de AND of OR.
Zoeken in specifieke forums beperkt natuurlijk wel hoeveel er "mogelijk geschikt zijn", maar het blijft exponentieel (of misschien kwadratisch, maar meer dan lineair) toenemen met de grootte van GoT, waardoor het langzamerhand steeds trager wordt.
Dan de omega/mifluz/whatever-searchengines.
- Deze moeten hetzelfde doen met de woorden, dus ook de ruiswoorden (vaak wel minder, alleen de echt zinloze woorden worden er dan uitgehaald) eruit vissen en de boel omzetten naar woordid's.
Wat er bij omega nog als tussenstap gebeurt is het zgn 'stemmen', er wordt dan van woorden als 'werk', 'werken', 'werkt', 'gewerkt' etc 1 woord gemaakt ('werk'), omdat ze tenslotte min-of-meer hetzelfde betekenen.
- Daarna gaat ie naar documenten op zoek, maar ipv eerst per woord alle documenten te zoeken die kunnen voldoen en ze daarna samen te voegen, draait ie het om.
Er wordt dus gezocht naar alle documenten die voldoen aan
al de eisen (en vraag me niet hoe het precies intern werkt, dat weet ik ook niet

) waardoor je, ipv honderduizenden, hooguit duizenden topics terug krijgt.
Dit efficientere zoeken wordt vooral mogelijk gemaakt doordat dat soort engines de zoekdata in een eigen database-formaat opslaan en veelal dan de boel dusdanig kunnen opslaan dat het veel efficienter te raadplegen is.
Goed, ik hoop dat het zo een beetje duidelijker is, zo niet, stel vragen