Avatar billede steinigumm Nybegynder
11. februar 2003 - 12:56 Der er 17 kommentarer og
1 løsning

Søgemaskine lokalt på min hjemmeside

Hvordan laver man en søgemaskine til sin egen hjemmeside. Jeg er ikke interesseret i at købe eller bruge en der allerede er lavet, vil hellere lære at lave en selv.
Bliver søgemaskinen lavet i html, asp eller hvad laves denne i ??

Tak

steini
Avatar billede angam Nybegynder
11. februar 2003 - 12:58 #1
Teoretisk set kunne du godt lave den i asp - men et rigtigt programmeringssprog som C/C++, Java og lignende ville være at foretrække.
Avatar billede dmdisco Nybegynder
11. februar 2003 - 12:58 #2
du kan lave en med php der søger i en mysql database ret let
Avatar billede angam Nybegynder
11. februar 2003 - 13:05 #3
Det kommer lidt an på om hvilken "søgemaskine" du tænker på.
Er det søgning på fritekst (a'la Google) eller i en database?

Sidstnævnte er klart det nemmeste at lave - også i asp. Bagdelen ved kun at søge i en database er at du så ikke kan søge i statiske html-sider.
Avatar billede angam Nybegynder
11. februar 2003 - 13:05 #4
dmdisco > Hvis det kan laves i php/mysql, kan det også laves i asp/access :-)
Avatar billede dmdisco Nybegynder
11. februar 2003 - 13:17 #5
ja det skulle jeg mene, men jeg aner ikke hvor hurtigt/besværligt det er
Avatar billede steinigumm Nybegynder
11. februar 2003 - 13:18 #6
det skal være en søgning på hjemmesiden, ikke database. Så det vil være en fritekst. Jeg plejer at programmere i "rigtige programmeringssprog" så hvis dette kan lade sig gøre er det ok, men fritekstsøgning i tekst er også ok. Håber nogle kan finde nogle tutorials eller lign. hvor dette er beskrevet, jeg kan nemlig ikke
Avatar billede angam Nybegynder
11. februar 2003 - 13:28 #7
Jeg har heller ingen tutorial liggende, men det er nu heller ikke så svært trods alt. Hvilket programmeringssprog programmerer du ellers i (dit "rigtige" programmerings-sprog :-)

Jeg har selv lavet en crawler / indexer / søgegui i Java og PHP, så jeg kan godt lave en gennemgang af de steps du skal igennem - men en tutorial vil jeg ikke kalde det...
Avatar billede steinigumm Nybegynder
11. februar 2003 - 13:36 #8
det lyder godt, jeg har programmeret en del i java, så at lave noget her ville være godt.
Avatar billede mfalck Praktikant
11. februar 2003 - 13:47 #9
Kig evt på www.htdig.org - det er en fritekst søgemaskine programmeret i c++
Avatar billede angam Nybegynder
11. februar 2003 - 13:54 #10
Ok - søgemaskinen består af tre dele: crawler, indexer og søgegui. De har hver især en speciel opgave:

1) Crawleren
.. er det tungeste/langsommeste program, men i sig selv forholdsvis simpelt. Crawlerens opgave er at indlæse en html-side, trække alle links (der peger på dit domæne) ud og gemme disse i en SIDE-TABEL som UCRAWLET, fjerne al html-kode og gemme alle ord i en ORD-TABEL, der refererer til den netop indlæste side.
Husk at side <--> ord er en mange-til-mange relation.

Det der gør crawleren langsom er at der for hvert eneste (unikt) ord på en html-side skal bruges mindst to sql-forespørgsler:
- 1 for at se om ordet allerede er i databasen (og måske 1 mere for at tilføje ordet hvis det ikke eksisterer)
- 1 for at tilføje en relation ml. siden og ordet.

Når crawleren er færdig med en side, markeres siden som CRAWLED, og den næste UCRAWLEDE side fra SIDE-TABEL hentes og får samme behandling - indtil der ikke er flere sider i SIDE-TABEL.
Avatar billede steinigumm Nybegynder
11. februar 2003 - 13:58 #11
kan jeg ikke få resten, det lyder til at du har fat i det rigtige. Er der en mulighed for at du kan sende programmet til min mail: dm41c@mail.ah.dk, så skal vi nok finde ud af noget med at give dig nogle points....
Avatar billede angam Nybegynder
11. februar 2003 - 14:04 #12
2) Indexeren
Indexerens opgave er at tage indholdet fra crawlerens database og konvertere dette til nogle hurtigt søgbare textfiler. Bevares, du kan godt springe indexeren over, og så søge direkte i databasen fra asp, men hastigheden vil også være ekstrem dårlig!

Her skal du så først definere et format du vil gemme dine indexerede data i!
Jeg gemmer hvert link (hver side) som en record på 1024 bytes med:
- sidens navn
- sidens beskrivelse
- sidens link
- sidens størrelse (i bytes)
.. alle disse records skrives til en tekstfil. Når jeg ved at hver record fylder præcist 1024 bytes, kan jeg hurtigt finde data for en given side når blot jeg kender sidens ID. F.eks. ligger side nummer 48 på position 49152 bytes (48*1024) inde i tekstfilen - det er vigtigt senere :-)

Alle ordene gemmer jeg i seperate filer, der starter med ordets bogstav:
a: abba, abe, alfabet... under a.txt, b(bager, bubber) under b.txt og så videre.
Hvert ord får en linie med data, adskilt med '/':
ord/123/456

'ord' er selve ordet - '123' er sidens id (altså id'et på den side hvor ordet er fundet på), og '456' er positionen på siden (ord nummer 456 på siden). Ordets position bruges til at sortere rækkefølgen af søgeresultater.

Hvis ordet forekommer mere end een gang på en side, adskiller jeg side-id'er og positioner med ','
ord/12,34/56,78

her forekommer 'ord' på side 12 (position 56) og 34 (position 78).


Ovenstående er måske lidt tricky, men er blot et eksempel på hvordan jeg gør det. hvis du har en nemmere måde at indexere dine data på, så brug den - men vent lige til du ved hvordan søge-gui'en læser indexet :-)
Avatar billede angam Nybegynder
11. februar 2003 - 14:18 #13
3) Søge-gui'en (i asp eller php)
Når du søger på et ord, skal du indlæse ordfilen der svarer til søgeordet ('abekat': indlæs a.txt, 'borebisser': indlæs b.txt etc.)

Herefter finder du linien hvor ordet forekommer i tekstfilen:
abekat/12,34/56,78

.. og splitter dataerne ad:
result = split(linie, "/")
result(0) = ord
result(1) = side-id'er
result(2) = positioner

result(1) indeholder nu en streng '12,34' - den splitter du igen på ',' - det samme med result(2).

Sorter positionerne, så den laveste position er først (husk at sortere side-id'erne også, så de matcher positionerne) - og du er nu klar til at præsentere resultaterne.

Først indlæser du siden med links een gang for alle. Herefter kan du for hvert sideid i Result(2) hente sidens data og udskrive disse.

Ovenstående er ret nemt lavet. Problemerne kommer først når der er mere end eet ord i søgestrengen: så skal du lave to søgninger og merge dataerne sammen bagefter - og tage højde for om det er OR eller AND søgning.


Der er desuden et par elementer jeg ikke har beskrevet her. De er ikke så vigtige på en sitesearch, men du skal vide at der er begrænsninger:
1) Crawleren tager ikke højde for Robots.txt - det bør (skal) den gøre hvis du slipper crawleren løs i "det fri". (robots.txt er en fil man kan lægge på sin server for f.eks. at blokkere for bestemte sider eller directories).
2) Indexeren kender ikke til "stopord". Jeg har implementeret STOPORD (ord der forekommer på X procent af alle sider - men indexerings- og søgealgoritmen er lidt tricky at forklare kort her :-)
3) Indexeren kender ikke til "frase-søgning" (dvs. søgning på 'michael jackson' (to ord der skal stå efter hinanden). Problemet ligger i indexeren, der kun indexerer et ord én gang per side.

... det var lidt at komme igang med - start med crawleren, det (synes jeg) er det mest logiske - og den nemmeste opgave (synes jeg).

Du kan iøvrigt se søgegui'en i aktion på http://beta.kimschumacher.dk - her er crawler + indexer lagt som et cronjob på serveren, der kører én gang i døgnet og opdaterer søgeindexet.
Avatar billede angam Nybegynder
11. februar 2003 - 14:25 #14
.. kan da godt sende dig sovsen, men .. så laver du den jo ikke selv :-)
Avatar billede steinigumm Nybegynder
11. februar 2003 - 14:31 #15
Tak for det! er der mulighed for at du kan sende koden og/eller henvise til bøger/artikler om emnet?

mvh
Steini
Avatar billede steinigumm Nybegynder
11. februar 2003 - 14:38 #16
selfølgelig vil jeg da gerne have hele svineriet

steini
Avatar billede angam Nybegynder
11. februar 2003 - 14:59 #17
Prøv at se http://www.seo-debat.dk/debat/cgi-bin/Ultimate.cgi - et dansk site med alt om søgemaskiner. Der står ikke meget om det programmerings-tekniske, men alt hvad der handler om søgning, crawlere etc. er nævnt her.

Der er også en artikkel her: http://larbin.sourceforge.net/index-eng.html (som egenligt er et søgemaskine-projekt) - men ellers har jeg mest arbejdet ud fra PDF-metoden (Prøv-Dig-Frem :-)
Avatar billede angam Nybegynder
11. februar 2003 - 15:01 #18
.. jeg har sendt dig lidt sourcekode nu. Det skal du ikke give mig points for (det er jo ikke tilgængeligt på eksperten) - men brug hvad du kan bruge og grin ikke af min kode ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester