webForumDet fria alternativet

Söktabell

Webbutveckling

6 svar · 490 visningar · startad av K@llen

Medlem sedan mars 20032 667 inlägg
Frågan#1

Hej,

Jag håller på med ett redaktionellt verktyg för journalistiska texter. Texterna är i och för sig inte så långa (1500-10000-tecken), men de kommer att bli många. Nu undrar jag hur man bör bygga upp en söktabell för att slippa söka igenom hela artiklarna.

articleSearch
articleId
keywords

Är det så man bör göra?

Kruxet då är att nyckelorden får läggas in manuellt när man skapar en ny artikel.

Synpunkter på mitt problem?

Medlem sedan juni 20019 024 inlägg
#2

Recept:
1 st tabell med artiklar.
1 st tabell med ord.
1 st tabell som sammanfogar ord med artikel via en relation.

Tillagning:
Varje ord förekommer endast en gång, men kan relateras till flera artiklar. När du skapar en ny artikel, slänger du in alla nya ord i ord-tabellen. Ord som redan finns inlagda lägger du inte in igen, utan skapar bara en ny relation mellan ordet och artikeln. Tillsätt en gnutta salt, smaka av och njut! ;)

Att göra som i ditt exempel med articleId och keywords, går ifrån normalisering och skapar problem i framtiden. Det blir ju ändå fulltextsökningar som du får göra i keywords-fältet. Nu kan du i stället förlita dig på index och få blixtsnabba sökningar.

Medlem sedan mars 20032 667 inlägg
#3

Det var en intressant synpunkt Pace (och en rolig presentation), den ska jag sova på. :)

Medlem sedan mars 20032 667 inlägg
#4

Det verkar vara ett användbart tillvägagångssätt. Nu är nästa fråga hur detta görs smidigt. Man kan ju splitta texten vid varje mellanslag och sidan filtrera bort skiljetexten. Då har jag alla ord i en array.

Hur får jag in orden från arrayen i tabellen på ett vettigt sätt. Ord-kolumnen får vara unik, men att loopa igenom arrayen och göra en förekomstkontroll och insert för varje varv är uteslutet.

Har Pace (eller någon annan) något recept på detta också? ;)

Medlem sedan juni 20019 024 inlägg
#5

Det ska väl gå att genomföra med endast en sql-sats. ;)

Ladda in alla ord i en array som du sedan binder i sql-satsen på följande vis:

INSERT IGNORE INTO articleindex (wordid, articleid)
   SELECT DISTINCT wordid, 12 FROM word WHERE word IN('hej', 'växeln', 'hallå');

"hej", "växeln" och "hallå" är alltså orden i din array, medan 12 är numret på din artikel.

Medlem sedan dec. 19995 874 inlägg
#6

Vilken databasmotor använder du? Om du kör SQL-Server föreslår jag att du sätter upp ett fulltext-index.

Medlem sedan mars 20032 667 inlägg
#7

Det är MySQL 4.01. :)

Åsikterna verkar gå lite isär i detta ämnet. Flera hävdar att jag kan köra FullText-Search på artikeltabellen utan problem, och andra förespråkar en söktabell. Jag får kanske lägga in ett par tusen poster och testa mig fram.

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)