Wikin har en Senaste nytt-lista, som bygger på en loggfil över gjorda ändringar. Men denna är inte sökbar. Man kan inte hitta vem som gjort mest och liknande. Susning.nu lider av samma brist.
Antalet rader källkoden ser ut så här:
790 SearchPage.pike (ligger i /lysator/runeberg/texter/TOPLEVEL/)
276 AuthorList.pike (ligger i /lysator/runeberg/systemet/)
262 PMake.pike
242 Config.pike
184 AuthorInfoPage.pike
150 TitleList.pike
148 HTMLHead.pike
146 TitleListPage.pike
143 Author.pike
138 Title.pike
77 HTMLFoot.pike
31 GetAllShortNames.pike
30 GetPreviousShortName.pike
30 GetNextShortName.pike
28 Deumlaut.pike.pmod
En förhållandevis stor andel av koden i SearchPage.pike går ut på att dela upp resultatlistor i flera sidor. Tyvärr sparas inte resultatlistan mellan sidvisningarna, utan sökningen görs om, varefter en portion av den visas upp. UseModWiki 0.92 delar aldrig upp resultatlistor i flera sidor, utan presenterar hela listan direkt, även om den blir lång. Libris Websök delar upp sidor i flera sidor, och sparar sökresultatet mellan sidvisningarna, så att man kan bläddra till nästa och föregående sökträff och träffsida.
Själva fulltextsökningen ligger i AuthorList.matchAnyName() och TitleList.matchName(). Den förra använder ett internt index över hela ord som byggs upp i minnet vid varje omstart av scriptet. Både indexet och sökuttrycket passeras först genom funktionen deumlaut(). Den senare använder Pikes Simulate.map_regexp(). Titelsökningen använder alltså inte deumlaut().
Eftersökt ord: Lagerlöf
Lagerlof
deumlaut()
likhet, en sökträff!
Inskrivet sökuttryck: Lagerloef
Lagerlof
Implementerat i Perl-kod skulle funktionen se ut så här (ej testad):
sub deumlaut {
my ($str) = @_;
$str =~ tr "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ",
"AAAAAAACEEEEIIIIDNOOOOOOUUUUYTsaaaaaaaceeeeiiiidnoooooouuuuyty";
$str =~ s/'//g;
$str =~ s/[ !\"#$%&()*+,-.\/:;<=>?@\[\\\]^_`{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²´µ¶·¸¹º»¼½¾+¿]+/ /g;
$str = lc($str);
$str =~ s/([aeiouy])e/$1/g;
$str =~ s/ph/f/g;
$str =~ s/w/v/g;
$str =~ s/q[uv]/kv/g;
$str =~ s/ss/s/g;
$str =~ s/th/t/g;
return $str;
}
För artikelsökningen blir det aktuellt att få rätt sökträffar även vid gammalstavning. Inte speciellt många lär söka efter "jernvägar" eller det "förlofvade landet".
Textmängden i Nordisk familjeboks Articles.lst är idag 1,5 megabyte och kan växa upp till 6 megabytes när arbetet är klart. Det är fullt realistiskt att använda MySQL för den datamängden.
Du sökte på "norden", och fick följande träffar
--Verk-- Nordens flora Nordiska språk Nordisk familjebok (visa fler ...)
--Författare-- Arthur Nordén
--Artiklar-- Norden (Nordisk familjebok) Nordens befolkning (Svensk rikskalender) Aurthur Nordén (Svensk biografisk handbok) (visa fler ...)
--Fulltext-- Europa (Nordisk familjebok) Resmål (Svenska familjejournalen) Shakespeare (Nordic authors) (visa fler ...)
...
Se exempel på http://www.byggtorget.se/ (testa våra infobaser)