Kippenijzer schreef op 06 mei 2004 @ 21:36:
[...]
Is er hiervoer een topic, of zou je hier iets meer info over kunnen geven, als in, hoe ik me dit precies voor moet stellen? Op wat voor manier werkt de externe database in dit geval (en hoe verzamelt hij zijn/haar info?)
Zie bijvoorbeeld
http://www.xapian.org/
Dat is het systeem dat hier ook draait. Het punt met een relationele database is dat het vooral geschikt is voor een vrij recht-toe-recht-aan structuur, zoals bijvoorbeeld een forum. Een forum heeft meerdere topics, en een topic heeft meerdere berichten, enz.
Indexering van een tekst is anders. Als je even uitgaat van een database zonder FULL TEXT optie (of die je gewoon niet gebruikt), dan ga je woorden indexeren. Dat is geloof ik de default search van React zelf, en heb ik ook in mijn eigen forum geimplementeerd. Als er een stuk tekst bij komt waarop gezocht kan worden, dan deel je die tekst op in woorden, en dan ga je een word_id koppelen aan elk van die woorden. Je hebt dan zeg maar een tabel met zoekwoorden, als een woord er al in staat kun je het word_id natuurlijk opvragen, en anders is het een nieuw woord en moet je het invoegen. Vervolgens hou je per topic/artikel/whatever een lijst met woorden bij. Als je de gebruiker laat zoeken, dan zoek je de word_id's op van de opgegeven zoekwoorden, en je rapporteert gewoon alle dingen waar die woorden in staan.
Dit is voor een kleine site wel te doen, maar voor een wat grotere site lopen de zoektabellen al snel uit de hand. Bovendien kun je alleen nog maar zoeken op individuele woorden. Queries zoals iets waar wel een bepaald woord in voor mag komen, maar waar weer niet een ander woord in voor mag komen, zijn wel mogelijk, maar wordt al snel ingewikkeld. En queries als "alle artikelen met woord1 in de buurt van woord2" zijn helemaal niet mogelijk. Het updaten van zo'n database is ook best een rompslomp, bijvoorbeeld als er iets wijzigt in een artikel.
Natuurlijk kennen databases wel iets als text indexing, maar eigenlijk zijn ze daar gewoonweg niet voor bedoeld, en kun je ze er dus ook maar beter niet voor gebruiken. Een systeem dat speciaal gericht is op dat doel en dat dus bijhoudt welke woorden waarin voorkomen, en ook waar ze in het artikel voorkomen (bijvoorbeeld: in de titel, of 15e woord in het artikel, etc) is geoptimaliseerd voor deze structuur, en kan dan ook veel sneller zoeken met veel uitgebreidere criteria dan een normale relationele database.
Hoe het systeem verder z'n data opslaat is niet interessant, net als dat niet interessant is hoe een database z'n tabellen opslaat, als het maar efficient gebeurt