Kom ihåg mig?
Home Menu

Menu


Relevanssökningar..

Ämnesverktyg Visningsalternativ
Oläst 2007-12-23, 13:34 #1
xarphs avatar
xarph xarph är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 346
xarph xarph är inte uppkopplad
Flitig postare
xarphs avatar
 
Reg.datum: Feb 2007
Inlägg: 346
Hej!

Jag håller på att koda en sökmotor för jobb och kommit så långt att sidan crawlar jobb från Sveriges största jobbsidor och stoppar in allt i min databas. Det är mycket information som crawlas och stoppas in i databasen.. speciellt löptexten för ett jobb. Tabellen som tar hand om annonserna ligger på ca 58MB efter att ha crawlat alla stora jobbsidor. Cirka 40 000 rader, men det är löptexten som tar sån plats i databasen.

Nu undrar jag hur jag ska fixa en effektiv relevanssökning? Har aldrig pillat med relevanssökningar tidigare, utan det har mest blivit LIKE i MySQL då det inte har varit lika mycket information att söka efter i tidigare projekt.

Sphinx har jag hört talas om som grazzy har rekommenderat mig och det är GRYMT! Verkligen grymt, äger sönder MySQLs fulltext index extremt. Men nu är det såhär att jag inte har någon möjlighet att ha sidan på en server privat, utan jag måste ha den på ett webbhotell, i början iaf. Och där finns det ingen möjlighet att köra in Sphinx

Väldigt tacksam om folk har tips på hur man kan göra

// skriver lite luddigt eftersom jag nyss vaknade...
xarph är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-12-24, 12:36 #2
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
När jag gjorde min sökmotor så la jag det mesta jobbet vid indexeringen så att sökningarna i slutändan skulle ske så snabbt som möjligt. Om man ska ta mitt exempel och förenkla det så tog jag texten som skulle sparas och sparade den samtidigt som jag lagrade alla unika ord i texten i en separat tabell. Denna tabell innehåller orden från ALLA texter du indexerar och bara unika sådana, så antalet rader bör stagnera efter en tids indexering. För min del så började den bli "mätt" runt 300.000 ord.

Det som nu avgör relevansen är lite upp till dig, men du ska iaf under indexeringsfasen koppla dessa unika ord i en länktabell till din originaltext. I länktabellen har du, förutom pekarna mot de båda andra tabellerna även en kolumn som innehåller en poäng för just den länken (ordet), dvs hur mycket det unika ordet är värt i den utvalda texten. Poängen kan du räkna ut efter din fantasi, men några grundläggande grepp kan vara att ta ett ord och kolla dess längd * antalet förekomster och ta det i procent till textens totala längd (dvs frekvens avgör ordets relevans för just den texten). Du kan också kolla hur ordet förekommer i texten och vikta upp poängen beroendes på detta, dvs ge merpoäng för förekomster i rubriker eller korta meningar etc etc. Det är bara fantasin som avgör hur många viktningsregler du kan komma på. Det finns även ett stort antal algorithmer för olika typer av relevans men det må vara överkurs.

Rent programmeringsmässigt så är det kanske smart att göra en klass som du kan mata med en url och som sedan populerar en komplett lista med alla ord som förekommer samt dess poäng uträknade efter dina regler. Själv kom jag upp i över 50 regler innan jag blev tvungen att intala mig själv om att det kanske räcker nu...

Viktningen på länktabellen använder du då som sorteringsordning när du plockar fram sökresultatet. Det du har otur med är att du antagligen måste dubbellagra texten; dels som komplett text, dels som ord i en tabell. Det behövde inte jag då jag bara pekade ut originalfilen i sökresultatet.

Du har iaf lyxen att veta vilka site du ska indexera samt vilket ämne det rör sig om; då behöver du inte direkt ta hänsyn till andra faktorer utanför texten såsom sökordsförekomst i domännamn, htmlkvalitet och annat krafs.
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-12-24, 22:48 #3
JLEs avatar
JLE JLE är inte uppkopplad
Flitig postare
 
Reg.datum: Jul 2007
Inlägg: 382
JLE JLE är inte uppkopplad
Flitig postare
JLEs avatar
 
Reg.datum: Jul 2007
Inlägg: 382
Varför inte köra sidan på en VPS istället? Om du nu vill bygga ett vettigt FULLTEXT index som du vill söka snabbt i så är ju Sphinx att rekommendera. Alternativt så kan du ju lägga enbart Sphinx delen på en VPS och ha resten på ett webbhotell.

Om du nu endå vill göra det i MySQL så kolla manualen för deras FULLTEXT indextyp:
http://dev.mysql.com/doc/refman/5.0/...xt-search.html
JLE är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 06:38.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017