Handbok för användning, underhåll och drift (PDF)

Transcription

Handbok för användning, underhåll och drift (PDF)
Boolware
Handbok drift
SOFTWARE CORPORATION
http://www.softbool.com
Copyright 2001-2014 Softbool AB. All rights reserved. All Softbool products are trademarks or
registered trademarks of Softbool AB. Other brand and product names are trademarks or registered
trademarks of their respective holders.
2
Kapitel 1 Introduktion .............................................................................................................................. 8
Vilka är denna handbok ämnad för ...................................................................................................... 8
Systemkrav .......................................................................................................................................... 8
Begränsningar och restriktioner i Boolware ......................................................................................... 9
Översiktsbild av Boolware systemet .................................................................................................. 10
Kapitel 2 Installation ............................................................................................................................. 12
Installation av Boolware Index Server ............................................................................................... 12
Installera Boolware Index Server i ett befintligt Boolware kluster .................................................. 13
Använda Boolware Index Server via en webbserver. .................................................................... 13
Kapitel 3 Översikt Boolware Manager .................................................................................................. 14
Översikt .............................................................................................................................................. 14
Menyer för Boolware Manager ....................................................................................................... 15
Verktygslisten ................................................................................................................................. 15
Databaser........................................................................................................................................... 16
Exportera inställningar .................................................................................................................... 17
Körningar............................................................................................................................................ 17
Schemaläggning ................................................................................................................................ 17
Prestanda ........................................................................................................................................... 17
Sessioner ........................................................................................................................................... 18
Kapitel 4 Lägg till en databas ............................................................................................................... 19
Boolware databas .............................................................................................................................. 19
Skapa ny databas ........................................................................................................................... 20
Skapa ny tabell ............................................................................................................................... 20
Boolware record-tabell. ............................................................................................................... 20
Boolware filsystems-tabell. ......................................................................................................... 20
Boolware länk-tabell. .................................................................................................................. 20
Kapitel 5 Redigera Indexeringsegenskaper ......................................................................................... 21
Redigera indexeringsegenskaperna för en databas .......................................................................... 21
Redigera indexeringsegenskaperna för en tabell/vy ......................................................................... 21
Likhet - VSM....................................................................................................................................... 35
Indexering upprepade fält .................................................................................................................. 37
Kort om XML .................................................................................................................................. 37
Kodning av data ............................................................................................................................. 38
Indexera XML med Boolware ......................................................................................................... 38
Beskrivningsfil XML .................................................................................................................... 38
Ignorerade taggar ....................................................................................................................... 39
Indexera elementattribut ............................................................................................................. 39
Prefixindexering .......................................................................................................................... 39
Samindexera elementdata med samma elementnamn .............................................................. 39
Indexeringsegenskaper för subfält ................................................................................................. 39
Begränsningar ................................................................................................................................ 40
Felmeddelanden ............................................................................................................................. 40
Exempel.......................................................................................................................................... 40
Automatkategorisering ....................................................................................................................... 42
När skall man använda automatkategorisering .............................................................................. 42
Hur kan man påverka automatkategoriseringen ............................................................................ 42
Vad krävs för automatkategorisering ............................................................................................. 42
Hur fungerar automatkategoriseringen .......................................................................................... 43
När utförs automatkategoriseringen ............................................................................................... 44
Inställningar för automatkategoriseringen ...................................................................................... 44
Definierade kategorier .................................................................................................................... 44
Bestämning av stämpelkolumn ...................................................................................................... 45
Slå på/av automatisk kategorisering .............................................................................................. 45
Stämpla flera kategorier ................................................................................................................. 46
Använd mina kategoribeskrivningar ............................................................................................... 46
Använd systemgenererade kategoribeskrivningar ......................................................................... 46
Ingen grundformning ...................................................................................................................... 46
Markera de kolumner som används för att åtskilja kategorier ....................................................... 47
Minsta marginal mellan bästa och näst bästa kategorival ............................................................. 47
3
Kategoridominans .......................................................................................................................... 48
Vektor-reduktion vid kategorisering ................................................................................................ 48
Angivande av synonymfil vid kategorisering .................................................................................. 48
Körsteg för automatkategorisering ................................................................................................. 48
Kategorisera ............................................................................................................................... 49
Skapa nya kategoriunderlag ....................................................................................................... 49
Exempel för automatkategorisering i stegform............................................................................... 49
Kort om vyer ....................................................................................................................................... 50
Begränsningar ................................................................................................................................ 50
Prestanda (att tänka på) ................................................................................................................. 50
Kapitel 6 Bygga Boolware Index .......................................................................................................... 51
Bygga Boolware Index ....................................................................................................................... 51
Direktuppdatering ........................................................................................................................... 51
Kapitel 7 Underhåll av Boolware Index ................................................................................................ 52
Validera databasen ............................................................................................................................ 52
Reorganisera databasen.................................................................................................................... 52
Kapitel 8 Ta bort Boolware Index ......................................................................................................... 54
Avregistrera Boolware Index .............................................................................................................. 54
Kapitel 9 Underhåll av Boolware .......................................................................................................... 55
Indexfiler............................................................................................................................................. 55
Namngivning av ingående filer........................................................................................................... 55
Köra Boolware Index Server som en service..................................................................................... 56
Starta och stoppa en service .......................................................................................................... 56
Hantera sessioner kopplade mot Boolware Index Server ................................................................. 56
Konfigurering ...................................................................................................................................... 56
Övervakning av prestanda ................................................................................................................. 57
Server-logg......................................................................................................................................... 57
Indexeringshistorik ............................................................................................................................. 57
Server-tillägg… .................................................................................................................................. 57
Automatiskt underhåll av Boolware index .......................................................................................... 57
Boolware schemaläggare ............................................................................................................... 57
Boolware Manager kommandoradsprogram (bwc) ........................................................................ 58
Stegvis laddning av Boolware index .................................................................................................. 58
Ordutplock ...................................................................................................................................... 58
Sortering ......................................................................................................................................... 58
Generera index ............................................................................................................................... 58
Kalkylera vektorer........................................................................................................................... 59
Replikera ........................................................................................................................................ 59
Bygg duplikatregler......................................................................................................................... 59
Relationsexekveringsplan .............................................................................................................. 59
Kategorisera ................................................................................................................................... 59
Skapa nya kategoriunderlag........................................................................................................... 59
Larma Boolware manager .................................................................................................................. 60
Felsökning, nätverksuppkopplingar ................................................................................................... 60
Uppkoppling nekas ......................................................................................................................... 60
Finns det en fysisk fungerande nätverkskoppling mellan klienten och Boolware? .................... 60
Kan klienten erhålla serverns värd-namn? ................................................................................. 61
Är Boolware placerad bakom en brandvägg? ............................................................................ 61
Lyssnar Boolware på porten? ..................................................................................................... 61
Åtkomst nekas ................................................................................................................................ 61
Har Boolware åtkomst till Boolware Index? ................................................................................ 61
Har Boolware behörighet att skapa filer i Boolware Index katalogen? ....................................... 61
Support, skicka felrapport .................................................................................................................. 61
Kapitel 10 Inställningar och direktuppdatering ..................................................................................... 63
Listor och Tabeller ............................................................................................................................. 63
Synonymer och Tesaurus .................................................................................................................. 64
Grundformning ................................................................................................................................... 65
Stoppord............................................................................................................................................. 66
Inställning av temporära filer .............................................................................................................. 66
Inställning av loggfiler ........................................................................................................................ 66
4
Språkinställning .................................................................................................................................. 66
Synkronisering av Boolware Index .................................................................................................... 67
Olika DBMS (datakällor) ................................................................................................................. 67
Så här fungerar Boolware “triggers” ............................................................................................... 67
Trigger händelser ........................................................................................................................... 67
Synkronisering då DBMS saknar stöd för ”triggers” ....................................................................... 68
Boolware tabeller ............................................................................................................................ 70
Boolware recordtabell ................................................................................................................. 70
Boolware filsystemstabell ........................................................................................................... 71
Åtgärder som sker automatiskt i Boolware under uppdateringen .................................................. 72
Prestanda ........................................................................................................................................... 72
Testindexera ...................................................................................................................................... 73
Datakällor ........................................................................................................................................... 74
Adapter............................................................................................................................................... 74
DBMS spegling och Boolware ........................................................................................................... 74
SQL Server ........................................................................................................................................ 75
Hur Boolware påverkar SQL Server ............................................................................................... 75
Oracle................................................................................................................................................. 76
Särskilda krav vid installation ......................................................................................................... 76
Hur Boolware påverkar Oracle ....................................................................................................... 77
Hur Boolware identifierar en Oracle instans................................................................................... 78
“Remote Procedure Calls” (RPC) ................................................................................................... 78
Restriktioner och begränsningar för Boolware ............................................................................... 79
Sybase ............................................................................................................................................... 79
Särskilda krav vid installation ......................................................................................................... 79
Hur Boolware påverkar Sybase ..................................................................................................... 79
Hur Boolware identifierar en Sybase-instans ................................................................................. 80
“Remote Procedure Calls” (RPC) ................................................................................................... 80
MySQL ............................................................................................................................................... 80
Särskilda krav vid installation ......................................................................................................... 80
Informix .............................................................................................................................................. 81
Särskilda krav vid installation ......................................................................................................... 81
Hur Boolware påverkar Informix ..................................................................................................... 82
Restriktioner och begränsningar för Boolware ............................................................................... 82
DB2 .................................................................................................................................................... 83
Särskilda krav vid installation ......................................................................................................... 83
Hur Boolware påverkar DB2........................................................................................................... 83
Hur DB2 talar med Boolware.......................................................................................................... 83
Tips ............................................................................................................................................. 84
PostgreSQL........................................................................................................................................ 85
Särskilda krav vid installation ......................................................................................................... 85
Hur PostgreSQL talar med Boolware ............................................................................................. 85
Hur Boolware identifierar en PostgreSQL-instans ......................................................................... 86
Access................................................................................................................................................ 86
Särskilda krav vid installation ......................................................................................................... 86
Kapitel 11 Boolwares sökspråk ............................................................................................................ 87
Boolwares Sökspråk .......................................................................................................................... 87
Exempel på användning för interaktiv sökning etc. ........................................................................... 99
Vad ett Boolware Index är .................................................................................................................. 99
Visa alla sökbara ord ......................................................................................................................... 99
Presentation av komplett Index .................................................................................................... 100
Presentation av relevant Index ..................................................................................................... 100
Presentation av grupperat Index .................................................................................................. 100
Presentation av Frekvensindex .................................................................................................... 102
Antal träffar fördelade över ett eller flera andra värden (SubZoom) ............................................ 104
Utökad statistik mellan flera Boolware index ................................................................................... 106
Hur man skapar en Rapportmall .................................................................................................. 106
Hur man ändrar en Rapportmall ................................................................................................... 107
Hur man tar bort en Rapportmall .................................................................................................. 107
Hur man använder en Rapportmall (skapar underlag för grafisk presentation av statistik) ......... 107
5
Sökspråket i Boolware ..................................................................................................................... 109
Interaktiv sökning i ett Boolware Index ............................................................................................ 110
Exempel........................................................................................................................................ 110
Enkel fråga ................................................................................................................................... 111
Närordssökning ............................................................................................................................ 111
Booleanska operatorer ................................................................................................................. 112
Effektiv ”eller-sökning” .................................................................................................................. 112
Synonymer och Tesaurus ............................................................................................................ 113
Jokertecken, vänstertrunkering och inom ord .............................................................................. 113
Grundformning ............................................................................................................................. 114
Fonetisk sökning .......................................................................................................................... 114
Intervallsökning ............................................................................................................................ 114
Exkluderad sökning ...................................................................................................................... 115
Likhetssökning .............................................................................................................................. 115
Numerisk likhetssökning............................................................................................................... 117
Globalsökning ............................................................................................................................... 117
Sök relaterat (Join) ....................................................................................................................... 118
Navigera i sökresultat ................................................................................................................... 123
Rankning av resultat från en sökning .............................................................................................. 124
Rankning med avseende på söktermer ....................................................................................... 124
Statistik på rankade söktermer ..................................................................................................... 125
Rankning med avseende på likhet ............................................................................................... 125
Rankning genom sortering ........................................................................................................... 125
Boolware försorterade index ..................................................................................................... 126
Boolware indexsortering ........................................................................................................... 126
Läs data från Boolware datafil och sortera ............................................................................... 128
Läs data från datakällan och sortera ........................................................................................ 128
Statistik på kolumner........................................................................................................................ 128
Beräkning mellan numeriska kolumner ............................................................................................ 129
Setsökning ....................................................................................................................................... 129
När skall man använda Setsökning.............................................................................................. 130
Hur använder man Setsökning ..................................................................................................... 131
Sparat Set ................................................................................................................................. 132
Sparad Fråga ............................................................................................................................ 133
Sparat Resultat ......................................................................................................................... 135
Sparad Scratch ......................................................................................................................... 136
Funktionalitet ................................................................................................................................ 138
Sökhistorik ................................................................................................................................ 138
Sparat Set ................................................................................................................................. 139
Sparad Fråga ............................................................................................................................ 141
Sparat Resultat ......................................................................................................................... 142
Sparad Scratch ......................................................................................................................... 144
Hämta data från datakällan .............................................................................................................. 144
Sökordsstatistik ................................................................................................................................ 145
Funktionalitet ................................................................................................................................ 145
Hur användaren skall hantera tabellen för Sökordsstatistik ......................................................... 145
Hur man hämtar fram Sökordsstatistik ......................................................................................... 145
Kapitel 12 UNICODE .......................................................................................................................... 147
Boolwares stöd för UNICODE.......................................................................................................... 147
Bakåtkompatibilitet ....................................................................................................................... 147
Begränsningar .............................................................................................................................. 147
Kapitel 13 Boolware Cluster ............................................................................................................... 149
Allmänt ............................................................................................................................................. 149
Kapitel 14 Skräddarsydd indexering ................................................................................................... 150
Vad är skräddarsydd indexering ...................................................................................................... 150
När används skräddarsydd indexering ............................................................................................ 150
Hur registreras funktion för skräddarsydd indexering ...................................................................... 150
Hur styr man sökningen för skräddarsydd indexering ..................................................................... 151
Att tänka på ...................................................................................................................................... 151
Standard Exitar ................................................................................................................................ 151
6
Split............................................................................................................................................... 152
Shrink ........................................................................................................................................... 152
LinkWords .................................................................................................................................... 153
Kapitel 15 Flödesfrågor ...................................................................................................................... 155
Introduktion ...................................................................................................................................... 155
Strängjämförelser ............................................................................................................................. 155
Normaliseringar ................................................................................................................................ 155
Viktning ............................................................................................................................................ 155
Beskrivning av Scoring .................................................................................................................... 156
Redigering av ett flöde ..................................................................................................................... 156
7
Kapitel 1
Introduktion
Vilka är denna handbok ämnad för
Denna handbok är ämnad för administratörer av Boolware Index Server samt applikationsutvecklare, som vill erhålla en större förståelse för den teknologi som Boolware systemet utgör.
Systemkrav
Boolware Index Server är anpassad för Windows, Linux samt en mängd olika datakällor.
Kontakta oss eller se vår hemsida för att erhålla de senaste uppgifterna angående plattformar
och datakällor, som understöds. (http://www.softbool.com/).
Processormodell: X86 och X64
Antal öppna filer: För Linux minst 10.000 (ulimit -n 10000).
Internminne:
X86: 4 GB eller mer rekommenderas
X64: 8 GB eller mer rekommenderas
Minnesåtkomsten är beroende av antalet anslutna användare (sessioner),
typ av användning (sortering, likhetssökning etc.), storlek på databasen
(antal poster), frekvens laddning/uppdatering av index mm.
Generell formel, som kan användas för att beräkna hur mycket internminne Boolware kräver för
varje ansluten användare är: ((antalet dokument/4)*1,25).
(Vid onlineuppdatering av index kräver Boolware ytterligare ca 25 MB).
Exempel:
Baserat på en databas med volymen 15 miljoner poster/dokument kräver Boolware cirka 4,7 MB
per ansluten användare. Om 500 användare önskas kunna vara anslutna samtidigt krävs alltså
ca 2.35 GB tillgängligt internminne för Boolware.
Multipla nätverkskort
När Boolware startas försöker Boolware att avgöra vad värdmaskinen har för IPv4-adress. Detta
görs i Windows så att det första tillgängliga nätverkskortet med en IPv4-adress används, se
”ipconfig”. I Linux letar Boolware efter namngivna nätverkskort som innehåller en IPv4-adress.
Namnen som Boolware letar efter är ”eth0” och finns inte den letar Boolware efter ”em1” och
finns inte den letar Boolware efter namnet ”bond0” i angiven ordning.
OBS!
Hittas ingen IPv4-adress (dvs. tom IP-adress) enligt något av stegen ovan, så kommer
Boolware att logga detta i Boolwares systemlogg samt därefter avsluta exekvering.
Om någon annat nätverkskort skall användas av Boolware kan detta anges i Boolwares
konfigurationsfil, ”SoftboolSrv.ini”, som finns i Boolwares installationskatalog. För att ange ett
annat nätverkskort skall nyckeln ”networkadapter” anges i sektionen ”SERVER” i denna fil.
T.ex för Windows: Kontrollera tillgängliga nätverkskortsnamn m.h.a. Windows-verktyget
”ipconfig”. Välj vilket nätverkskort Boolware skall använda, i detta exempel använder vi namnet
”Tredje kortet”, att användas av Boolware.
I Boolwares konfigurationsfil, “SoftboolSrv.ini”; lägg till följande rad i sektionen “SERVER”:
networkadapter=Tredje kortet
8
T.ex. i Linux: Kontrollera tillgängliga nätverkskort m.h.a. konsolprogrammet “ifconfig”. Välj vilket
nätverkskort Boolware skall använda, i detta exempel använder vi namnet ”eth3.789”, att
användas av Boolware.
I Boolwares konfigurationsfil, “SoftboolSrv.ini”; lägg till följande rad i sektionen “SERVER”:
networkadapter=eth3.789
Efter att detta har ändrats måste Boolware startas om.
OBS!
Se till att inga privilegier ändras för Boolwares konfigurationsfil, “SoftboolSrv.ini”.
Skönsinställningen för kommunikationen med Boolware är:
Sökapplikation kommunicerar via port 7008 (kan ändras).
Boolware Manager kommunicerar via port 14007 (kan vara ytterligare en).
Datakällan (UDF) kommunicerar via port 8008 (kan ändras).
Noderna som ingår i ett Boolware Cluster kommunicerar via port 14700.
Man kan utifrån kontrollera, om Boolware är igång på den angivna IP-adressen (ping).
För att göra detta skickar man STAT kommandot över socket till port 14007 vilket ger
nedanstående svar om Boolware är igång:
STAT
Svarar OK om noden är igång, oavsett om noden ingår i ett kluster eller inte.
För att ta reda på om den aktuella noden är inaktiv i ett Boolware cluster skickar man ACTV
kommandot över socket till port 14007 vilket ger nedanstående svar om Boolware är igång:
ACTV
Svarar NO, om den aktuella noden är inaktiv i ett Boolware kluster
Svarar YES, om den aktuella noden är aktiv i ett Boolware kluster, eller
om noden är igång men inte ingår i ett Boolware kluster; det vill säga "Standalone".
Nedanstående kommando - LBST - kan användas för att låta en lastbalanserare kunna avgöra
om den ska skicka trafik till den aktuella noden eller inte. För att ta reda på om den aktuella
noden skall ta emot trafik eller inte skickar lastbalanseraren LBST kommandot över socket till
port 14007 vilket ger nedanstående svar om Boolware är igång:
LBST
Svarar med YES eller NO.
Det svar man vill att kommandot ska ge sätts via Boolware Manager eller via
Bwc kommandot: bwc -c setlbst <YES>|<NO>
Begränsningar och restriktioner i Boolware
Denna sektion beskriver olika typer av begränsningar och restriktioner. Somliga av dessa
värden är inbyggda i utformningen av produkten, medan de flesta är praktiska begränsningar
eller restriktioner, som sätts av operativsystemet eller maskinvaran.
Beteckning
Maximalt antal användare som kan vara
anslutna till Boolware Index Server
Värde
Det finns inget specifikt maximalt antal användare
som kan hanteras av Boolware Index Server – det
beror på en kombination av faktorer såsom:
restriktioner i operativsystemet, begränsningar i
9
maskinvaran och de krav varje klient ställer på
servern.
Maximala antalet sökord och operatorer i
ett sökuttryck
Det maximala antalet sökord och operatorer
begränsas endast av tillgängligt internminne.
Maximal längd på en Primärnyckel
Maximal längd på en sökterm
Maximalt antal rader i en tabell
Maximal storlek på en .idx fil
Maximalt storlek på .ref fil
Maximalt storlek på .pxw fil
Maximalt storlek på .data fil
126 bytes
126 bytes
268 435 456
268 GB
256 GB
256 GB
256 GB
Sköninställning av storlek på .ref, .pxw och data sätts till 16 GB när indexet skapas men detta
värde kan enkelt ändras via Boolware Manager. När en ändring gjorts så måste man indexera
om aktuell kolumn eller tabell.
Dessutom ställer Boolware följande krav:
•
Tabellen i datakällan måste ha en primärnyckel. Den maximala längden för en
primärnyckel är 126 bytes (observera, att en primärnyckel kan bestå av flera
kolumner).
•
En primärnyckel hanteras i lagringshänseende som en vanlig term; detta innebär,
att två primärnycklar med samma tecken, men olika skift (versaler/gemener) inte
kommer att betraktas som unika i Boolware, även om datakällan godkänner dem.
En primärnyckel genomgår dessutom - liksom alla vanliga termer - en ”trimning”,
vilket innebär, att samtliga inledande och avslutande ”white-space”: horisontell tab,
vertikal tab, ny sida, ny rad, radslut, ny sida samt blank (0x09 - 0x0d, 0x20) tas
bort. Detta innebär, att primärnycklar som endast skiljer sig beträffande inledande
och avslutande ”white-space” inte betraktas som unika i Boolware.
•
Samtliga kolumner, som ingår i primärnyckeln måste innehålla ett värde; ingen del
får vara ”NULL”.
•
En tabell får inte innehålla kolumner med hänvisningar till andra tabeller och där
borttag skall gälla samtliga förekomster i alla tabeller.
•
Schema hanteras inte fullt ut av Boolware. Schema kan användas, men alla
tabellnamn måste vara unika även om de förekommer i olika schema i en databas.
Översiktsbild av Boolware systemet
Detta är en översiktsbild av Boolware systemet. Bilden visar hur Boolware Index Server - via
olika API - är kopplad mot användarskrivna applikationer, XML-skript och Boolware Manager.
Läs mer om våra klienter (APIer) XML, PHP, .NET, Java, COM m.fl. i ” Handbok
programmering”.
Bilden visar också hur Boolware Index Server kommunicerar med olika datakällor och med
Boolware Index.
10
Kopplingen mot datakällan sker via ”adapters”. Varje adapter är anpassad för den aktuella
datakällan. Ett generellt gränssnitt mot några datakällor är ODBC, men en del datakällor stödjer
inte detta gränssnitt, varför de flesta adapters kopplar direkt mot den aktuella datakällans API,
vilket inte framgår av bilden. Det kan också i vissa fall, vara effektivare att koppla direkt mot
datakällans lågnivå-API.
Beskrivning över adapters och deras speciella egenheter står att läsa om under Kapitlet 10 i
denna handbok.
11
Kapitel 2
Installation
Detta kapitel beskriver hur Boolware installeras under Windows och Linux.
Installation av Boolware Index Server
Det skall endast finnas en Boolware Index Server (SoftboolSrv(.exe)) på den maskin, där
Boolware skall köras.
Observera följande krav innan du startar installationen av Boolware Index Server:
1.
Du måste som användare vara inloggad som administratör/root för att installationen av
Boolware skall bli rätt. Detta krävs bland annat för att denna användare skall kunna
registrera och starta systemet som en service samt att Boolware har rättigheter att skapa,
läsa, skriva filer mm.
2.
De datakällor man, efter installation, vill kunna sammankoppla med Boolware måste vara
startade och tillgängliga under installationen av Boolware.
OBS! Respektive datakällas klient måste finnas installerad och tillgänglig på samma
server där Boolware installeras. Ägaren (usern) av Boolware måste efter installation ha
tillgång till respektive datakällas miljövariabler (profiler där språk, rätt path mm. står).
Det är viktigt, att samtliga produkter som används tillsammans med Boolware Index
Server är trådsäkra för att Boolware Index Server skall fungera felfritt.
3.
Läs mer (se kapitel 10 Datakällor) om särskilda krav vid installation för respektive
datakälla.
Installationsprogrammen (Windows/Linux) för Boolware utför följande steg:
=> Kopierar samtliga nödvändiga filer till installationskatalogen.
=> Registrerar Boolware Index Server som en service. För Windows gäller i vissa fall (beroende
på din Windows konfiguration) att du behöver ange ett konto för hur Boolware skall startas som
en service. (Detta kan du göra via Kontrollpanelen i Windows).
=> För de datakällor som har stöd för triggers och externa procedurer konfigurerar
installationsprogrammen setupudf/installudf datakällan genom att registrera en “User Defined
Procedure” som kallas ‘udf_dk’ (där dk är namnet på den aktuella datakällan), vilken används
av Boolware för att synkronisera Boolware index med datakällan vid direktuppdatering.
=> Startar Boolware Index Server service.
Under Linux startas Boolware med hjälp av “/etc/init.d/boolware start”, vilket i sin tur startar ett
script, boolwares, som startar Boolware som en service. Scriptet boolwares skapas vid
installation och placeras i installationskatalogen för Boolware, SOFTBOOL_HOME.
För att stoppa Boolware skriver man ” /etc/init.d/boolware stop”.
Avinstallation:
Du måste som användare vara inloggad som administratör/root för att avinstallationen av
Boolware skall bli rätt.
12
Starta programmet Uninstall.exe (Windows), uninstall (Linux) som finns i installationskatalogen
för Boolware.
Installera Boolware Index Server i ett befintligt Boolware kluster
För att installera en ny version av Boolware Index Server över en existerande i ett Boolware
kluster bör man gå till väga enligt nedan.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Logga in Managern mot Mastern och sätt Failover noden inaktiv i klusterdefinitionen och
inför denna inställning (verkställ).
Routa därefter över all trafik (sökning) till Failover noden så att ingen sökning går mot
Mastern.
Stoppa uppdateringar mot Boolware.
Stoppa Boolware servicen på Mastern.
Installera den nya versionen på Mastern (installera över den gamla versionen).
Kontrollera att Boolware servicen på Mastern har startats. Testa därefter några
sökningar med Boolware Demo så att du vet att det verkar fungera som det skall på denna
server efter installationen.
Routa därefter över all trafik (sökning) till Master noden så att ingen sökning går mot
Failovern.
Stoppa Boolware servicen på Failovern.
Installera den nya versionen på Failovern (installera över den gamla versionen).
Kontrollera att Boolware servicen på Failovern har startats. Testa därefter några
sökningar med Boolware Demo så att du vet att det verkar fungera som det skall även på
denna server efter installationen.
Logga in Managern mot Mastern och sätt Failover noden aktiv i klusterdefinitionen och
inför denna inställning (verkställ).
Routa därefter trafik (sökning) både mot Master noden och mot Failover noden.
Starta uppdateringar mot Boolware.
Använda Boolware Index Server via en webbserver.
Softbool levererar följande tillägg (extensions) för användning av Boolware via en webbserver:
1.
SoftboolXML.dll (Windows, IIS 5.0 eller senare)
2.
libsoftboolxml.so (Linux, Apache 1.3.24 eller senare upp till senaste version innan 2.0)
3.
php_boolware.dll (Windows, PHP 4 eller senare)
4.
php_boolware.so (Linux, PHP 4 eller senare)
Dessa skall kopieras till för ändamålet rätt katalog och konfigureras på sedvanligt sätt för
respektive webbserver.
Observera
Under en installation kan man få meddelanden, som indikerar att en fil, som skall installeras är
äldre än den som finns lagrad på den aktuella maskinen. Det gäller i första hand två filer:
default.chr och SoftboolSrv.ini. Om förändringar har gjorts i dessa filer, skall man svar Yes
(som rekommenderas) på dessa frågor för att inte de ändringar man gjort skall förstöras.
13
Kapitel 3
Översikt Boolware Manager
I Boolware systemet ingår ett grafiskt verktyg, med vars hjälp Boolware Index Server kan
konfigureras och underhållas. Med dess hjälp kan man också registrera och avregistrera
datakällor samt skapa och administrera Boolware index.
Översikt
Boolware Manager körs under Windows, men kan hantera Boolware Index Server och Boolware
Index, som finns under något annat operativsystem (Linux).
Med hjälp av Boolware Manager kan man bland annat göra följande:
•
Konfigurera Boolware Index Server
•
Registrera / Avregistrera datakällor
•
Redigera indexerings- och sökegenskaper för Boolware Index
•
Skapa Boolware Index
•
Tillhandahålla statistik över Boolware Index Server och Boolware index
•
Underhålla Boolware Index
o
Validera innehållet i Boolware Index
o
Reorganisera (defragmentera) Boolware Index
Boolware Manager startfönster:
Boolware Manager startas genom att välja Manager från Boolwares Startmeny. Startfönstret för
Boolware Manager innehåller följande:
14
Menyraden högst upp i fönstret innehåller de funktioner, som kan väljas för att administrera
anslutna datakällor.
Verktygslisten, vilken innehåller knappar för menykommandon, ligger precis under menyraden.
Under Verktygslisten finns på den vänstra sidan en trädstruktur, där förutom alla databaser
även Konfiguration, Kluster och Loggar finns. På höger sida finns samtliga databaser listade.
Under varje databas i trädstrukturen finns följande möjligheter: Flöden, Databaslogg, Relationer,
Lås, Tabeller och Vyer. Genom att använda högerklicks-menyn i trädstrukturen kan man
genomföra de flesta funktioner nedan. Ett alternativ är att använda listan till höger.
Statusraden visar hjälp för menyer och Verktygslisten.
Menyer för Boolware Manager
Boolware Manager är menystyrt, vilket innebär, att funktioner startas från aktuell meny. I
Boolware Manager finns det fyra rullgardinsmenyer:
Arkiv
I denna meny kan följande utföras: ansluta och avbryta anslutningen till Boolware Index Server,
registrera och avregistrera en datakälla, redigera egenskaper för markerad tabell, skriva ut
information om markerad databas, ändra utskriftsformat, reorganisera Sysindex och avsluta
Boolware Manager.
Visa
I denna meny kan man erhålla statistik över vad som skett i Boolware systemet via: Server-logg
Fråge logg och Indexeringshistorik. Under rubriken Server-tillägg… listas samtliga datakällor
och externa exitar (hookar), som är kopplade till systemet. Man kan även se vilka filer som finns
på den server där Boolware finns installerad via Utforska server…
Inställningar
Denna meny innehåller redigering av nedanstående filer: stoppord, synonymer, tesaurus,
grundformning och teckentabeller. I denna meny kan man också konfigurera Boolware Server.
Dessutom kan man här kopplas till administration av ODBC- och övriga datakällor. Även
språkinställning för Boolware Manager och dess hjälpfiler hanteras från denna meny.
För konfigurering av Boolware Server se kapitel 9 ”Underhåll av Boolware” sektion
”Konfigurering”.
Hjälp
Innehåller en interaktiv hjälpfunktion, vilken kan aktiveras när som helst under pågående
användning av systemet.
Verktygslisten
Verktygslisten består av ett antal knappar, vilka innehåller snabbkommandon för
menykommandon. Följande snabbkommandon finns:
•
•
•
•
•
•
•
•
•
•
•
Anslut till Boolware (Anslut)
Registrera databas i Boolware (Ny)
Avregistrera markerad databas (Ta bort)
Redigera tabellens indexeringsegenskaper (Egenskaper)
Rita om/uppdatera listan (Rita om)
System kommandon mot Boolware (Kommando)
SQL-kommando för en Boolware recordtabell (SQL)
Bygg index för markerad databas/tabell (Bygg)
Reorganisera index för markerad databas/tabell (Reorganisera)
Validera index för markerad databas/tabell (Validera)
Visa statistik från senaste körningen för markerad databas (Logg)
15
•
Starta Boolwares interaktiva testprogram (Test)
Genom att markera en databas och använda höger-klicks menyn, kan man erhålla ytterligare
funktionalitet.
Databaser
Fliken Databaser visar alla databaser som är registrerade till den aktuella Boolware Server.
DSN:
DB:
Beskrivning:
Anv:
Status:
Meddelande:
är namnet på den dsn som Boolware använder för att koppla sig mot
datakällan. Det är ofta samma namn som motsvarande relationsdatabas.
är namnet på den underliggande databasen (ofta samma som DSN).
en för indexet beskrivande text. Används endast för information.
är antalet sessioner som för tillfället är uppkopplade mot indexet.
visar aktuell indexstatus. Kan vara “Online” om indexet är tillgängligt för
uppkopplade användare. Den är “Offline” om indexet inte är tillgänglig för
uppkopplade användare. Då man valt att ladda flera index på en gång kan
det hända - om inte tillräckligt med resurser finns -, att ett index kan få
status ”Pending”. Detta innebär, att så fort resurser finns, sätts laddningen
automatiskt igång. Ytterligare ett status, ”ReadOnly” finns; vilket betyder att
ett index kan sökas, men ej uppdateras.
det senaste systemmeddelandet från Boolware.
Ovanför databaslistan finns kompletterande information om den markerade databasen: Namn
på databasen, Beskrivning av databasen (info), Katalog där databasen finns, Meddelande från
sista utförda jobb, aktuell Status samt hur många användare som är anslutna till databasen.
Dessutom kan man se om modifierade: Teckentabeller, Insticksmoduler, Fonetiska undantag,
Skiftkänslighet, Synonymer och Tesaurus finns på databasnivå.
Med hjälp av knapparna till höger kan man: få den aktuella storleken på databasen samt ändra
inloggning till datakällan.
Då en databas har markerats i den vänstra trädstrukturen eller dubbelklickas i den högra listan,
visas databasens samtliga tabeller/vyer i listan till höger.
Ovanför tabell listan finns kompletterande information om den markerade tabellen/vyn: Namn på
tabellen/vyn, Beskrivning av tabellen (info), Katalog där tabellen/vyn finns, Meddelande från
sista utförda jobb, aktuell Status, Uppdaterings typ, Storlek i antal rader samt hur många
användare som är anslutna till tabellen/vyn. Dessutom kan man se om modifierade:
Teckentabeller, Insticksmoduler, Fonetiska undantag, Skiftkänslighet, synonymer och Tesaurus
finns på tabellnivå.
Med hjälp av knapparna till höger kan man starta uppdatering samt få den aktuella storleken på
tabellen (i antal rader).
Genom att högerklicka på en markerad databas/tabell/vy kan man utföra nedanstående
funktioner. Då man har markerat en databas, kommer samtliga tabeller/vyer, som tillhör (ägs) av
denna databas, att påverkas. Några av funktionerna: Importera, Skriv ut tabelldefinitioner,
Uppdatering och Egenskaper gäller endast för tabell/vy.
Indexera
Analysera
Reparera/städa
Stegkörning
Status
Uppdatering
Skriv ut tabelldefinition
Konfigurera
Bygger nya Boolware Index
Validerar alla ingående Boolware filer
Tar bort all outnyttjad plats i samtliga Boolware filer
Möjlighet att köra ett Boolware steg i taget
Sätter om status
Ändrar uppdateringstyp eller starta uppdatering
Skriver ut egenskaper för alla kolumner inom tabell/vy
Diverse inställningar rörande filstorlekar etc.
16
Importera
Exportera
+
Egenskaper
Importerar inställningar från en annan tabell/vy
Exportera databas eller tabell inställningar till annan server
Lägg till ny databas/tabell/vy
Avregistrerar index för markerad databas
Visar egenskaper för tabell/vy och dess kolumner
Exportera inställningar
Databaser kan vara uppbyggda på en mängd olika sätt och innehållet i olika databaser kan
variera avsevärt och dessutom vill man oftast söka fram information på många olika sätt.
För detta finns det i Boolware ett stort antal inställningar som kan göras. Om man inte gör några
inställningar, väljer Boolware inställningar, som i de allra flesta fall tillräckligt bra, men
finjusteringar överlämnas åt användaren.
När man i en testmiljö har färdigställt och testat fininställningar, som man sedan vill använda i
en produktionsmiljö, finns det i Boolware Manager möjlighet att exportera dessa inställningar till
denna miljö.
För en utförlig beskrivning hänvisas till hjälpfunktionen i Boolware Manager.
Körningar
Under fliken Körningar ser man förloppet över samtliga körningar, som är aktiva för tillfället.
Schemaläggning
Fliken Schemaläggning innehåller samtliga schemalagda aktiviteter och dess tid för senaste
gången de var aktiva och nästa gång de skall aktiveras.
Använd +/- knapparna för att lägga till eller ta bort en schemalagd aktivitet. Dubbelklicka på en
existerande aktivitet för att ändra.
Prestanda
Fliken Prestanda ger statistik över hur lång tid vissa aktiviteter i Boolware tar. De aktiviteter som
tiden mäts på är: Booleska frågor, likhetsfrågor, hämta data, hämta indextermer, on-line
sorteringar samt olika typer av uppdateringar (Insert, Update och Delete).
Förutom denna statistik ser man vilken version av Boolware som används och när den
startades, minnesåtgången just nu, minne totalt, tillgängligt minne samt version av aktuellt
Operativsystem.
Statistik över tiden den aktuella Boolware server varit igång, aktuella användare samt
exekverande användare visas också.
Man kan när som helst nollställa denna statistik för att mäta prestanda under vissa tider.
17
Sessioner
Fliken Sessioner innehåller samtliga inloggade användare i systemet.
Följande information om varje användare kan utläsas:
Namnet på sessionen, vilken datakälla som används, IP-adress varifrån användaren kommer,
typ av protokoll, hur länge sessionen har vilat (varit inaktiv), hur länge sessionen har exekverat
(varit aktiv) aktuellt kommando samt själva kommandot som exekveras.
18
Kapitel 4
Lägg till en databas
För att göra en datakälla sökbar med hjälp av Boolware måste den registreras i Boolware.
När detta görs, kontrollerar Boolware uppbyggnaden av databasen.
I Boolware kan man registrera databaser från olika datakällor. Man kan dessutom hantera
databaser, som inte är anslutna till någon extern datakälla: Boolware databaser.
För att hantera uppdateringar i datakällan används ”skuggtabell” och ”triggers”.
En detaljerad beskrivning över hur man hanterar skuggtabell och ”triggers” finns i Kapitel 10
”Inställningar och direktuppdatering” under avsnittet ”Synkronisering då DBMS saknar stöd för
”triggers””. Användarnamn och lösenord kan specificeras om det krävs.
I Kapitel 5 ”Redigera Indexeringsegenskaper” bestämmer man vilka tabeller/vyer som skall
indexeras samt vilka indexeringsegenskaper de olika kolumnerna inom dessa tabeller/vyer skall
ha.
Boolware databas
Ett sätt att förbättra sökbarheten är att ge möjlighet att söka mellan tabeller i olika databaser och
också inkludera information, som inte är lagrad i någon datakälla. Om man också ger möjlighet
att söka mellan tabeller ur olika datakällor, ökar sökbarheten ytterligare.
I Boolware kan man skapa en Boolware databas, vilken inte är kopplad till någon extern
datakälla.
Genom att tillföra tre nya tabelltyper; länk-tabell, record-tabell och filsystems-tabell, kan man på
ett friare sätt utforma sin Boolware databas för att på det sättet erhålla flexiblare sökmöjligheter.
Länk-tabell består i en koppling till en tabell från en annan databas. Länk-tabellen kommer av
Boolware att hanteras som en medlem i den databas den länkas till. Alla sökmöjligheter som
finns i riktiga tabellen kan utnyttjas i länk-tabellen. Man kan sätta relationer i länk-tabellen så att
man kan koppla den mot andra tabeller i den aktuella databasen. En länk-tabell ägs av den
databas, som den tillhör i datakällan och kan vara länkad till många andra databaser. All
hantering av tabellen: laddning, uppdatering, validering, optimering, redigering av
indexeringsegenskaperna etc. sköts av den databas, som äger tabellen.
En record-tabell är en tabell som inte finns i någon annan datakälla, utan har Boolware som
datakälla. För en användare fungerar tabellen precis som en vanlig tabell. Man skapar tabellen
på samma sätt, som man skapar en tabell i en extern datakälla. Man redigerar
indexeringsegenskaper på samma sätt som man gör för vanliga tabeller och tabellen hanteras
som en vanlig tabell i alla avseenden. Informationen, som för vanliga tabeller lagras i en
datakälla, lagras nu i Boolwares interna datakälla.
Den tredje typen av tabell är en filsystems-tabell, vilken lagrar informationen i filsystemet i stället
för i en datakälla. Denna typ av tabell har en uppsättning fasta kolumner, vilka hanteras av
Boolware. Kolumnerna är: URL (primärnyckel), Type (filsuffix), Date, Size och Content (BLOB).
Samtliga kolumner, utom Content, måste sparas i Boolwares interna datakälla, medan
användaren bestämmer huruvida Content skall lagras i Boolware eller behållas i filsystemet.
Genom att kombinera dessa tre olika tabelltyper kan man erhålla en - ur sökhänsyn - mycket
effektiv databas. Det går att kombinera länk-tabeller i databaser från olika datakällor med
record-tabeller och filsystems-tabeller i valfria kombinationer.
19
Skapa ny databas
Registrera en databas i Boolware Index Server genom att klicka på + knappen i Verktygslistan i
Boolware Manager eller tryck på INS-tangenten.
Följ instruktionen, som ges i Boolware Manager.
I Boolware Manager Hjälp (Registrera databas) beskrivs i detalj vad som skall göras.
Skapa ny tabell
Markera databasen och välj ”Ny tabell...” från högerklicksmenyn.
Följ sedan instruktioner, som ges i Boolware Manager.
I Boolware Manager Hjälp (Registrera tabeller) beskrivs i detalj vad som skall göras.
Boolware record-tabell.
Record-tabeller innehåller rader och kolumner precis som en vanlig tabell, men allt data finns i
Boolware, dvs det behövs ingen extern datakälla för att lagra data.
Indata då man laddar en record-tabell är en "recordfil". Rader och kolumner separeras av
definierade tecken. Ett vanligt format är s.k. CSV-format, där rader separeras av "carriage
return" + "line feed" och kolumner separeras av kommatecken.
Följ instruktionen, som ges i Boolware Manager.
I Boolware Manager Hjälp (Boolware recordtabell) beskrivs i detalj vad som skall göras.
Boolware filsystems-tabell.
En filsystems-tabell innehåller rader och kolumner precis som en vanlig tabell, men allt data
finns i Boolware och filsystemet, dvs det behövs ingen extern datakälla för att lagra data.
Indata då man laddar en filsystems-tabell är specificerade filer i det befintliga filsystemet.
Följ instruktionen, som ges i Boolware Manager.
I Boolware Manager Hjälp (Boolware filsystemstabell) beskrivs i detalj vad som skall göras.
Boolware länk-tabell.
Länk-tabell består av en koppling till en tabell från en annan databas.
Följ instruktionen, som ges i Boolware Manager.
I Boolware Manager Hjälp (Boolware länktabell) beskrivs i detalj vad som skall göras.
20
Kapitel 5
Redigera Indexeringsegenskaper
Redigera indexeringsegenskaperna för en databas
Om en databas markeras i trädet kan dess egenskaper redigeras. Ytterligare alternativ finns
tillgängliga via högerklicksmenyn för vald databas.
Dubbelklicka på en databas i trädet för att se vilka tabeller/vyer som ingår.
Kryssrutan framför varje tabell/vy styr om tabellen/vyn skall indexeras eller ej.
Dubbelklicka på en tabell/vy och indexeringsegenskaperna för densamma visar sig.
”Katalog” används för att flytta databasens Boolware Index - för alla ingående tabeller - till
annan katalog. Databasen måste då vara ”Offline” i Boolware.
När en databas registreras för indexering i Boolware (se Kapitel 4), kommer Boolware att läsa
metadata för databasen från datakällan.
Med utgångspunkt från dessa metadata, konfigurerar Boolware sina index med avseende på
antal tabeller och kolumner.
Genom att hämta egenskaper för varje kolumn från datakällan kan Boolware göra en
skönsinställning av indexeringsmetoder.
Följande regler gäller vid skönsinställning:
•
alla numeriska fält i datakällan (int, smallint, tinyint, numeric, float, real, decimal, money,
smallmoney etc.) får indexeringsmetoden numerisk i Boolware och den inställningen kan
inte ändras.
•
alla text fält i datakällan (varchar, char etc.), där längden är upp till 15 tecken får
indexeringsmetoden sträng i Boolware.
•
alla text fält i datakällan (varchar, char etc.) som är mer än 15 tecken får
indexeringsmetoden ord i Boolware.
En tabell i en datakälla kan innehålla kolumner av typen BLOB. Med BLOB menas Binary Large
Objects, vilka kan innehålla i princip vad som helst; bilder, bitmappar, komprimerade filer, olika
typer av ordbehandlingsdokument etc.
Boolware försöker identifiera innehållet i dessa kolumner och ignorerar följande format: bitmap,
GIF bilder, JPG bilder och ZIP filer.
Redigera indexeringsegenskaperna för en tabell/vy
Om en tabell/vy har markerats för indexering, dubbelklickar man på en tabell/vy i listan eller
högerklicka och välj ”Egenskaper”, för att komma till fönstret ”Tabellegenskaper”.
21
Några funktioner i detta fönster är globala (gäller hela tabellen), medan andra endast påverkar
en markerad kolumn.
De globala tabellfunktionerna finns under fem flikar: ALLMÄNT, LIKHET, SORTERINGAR,
FILSTORLEKAR, DATAKÄLLA och DUPLIKAT.
Oavsett vilken av ovanstående flikar man valt, kan man använda knapparna: Testindexera,
Skriv ut, Bygg ändringar, Kategorier och Spara XML-definition, då det är tillämpligt.
Testindexera:
Med hjälp av denna funktion, kan man se hur olika ord kommer att indexeras av Boolware med
de aktuella inställningarna. Man kan ändra inställningar och testindexera tills man uppnått
önskat resultat utan att ladda Boolware index. Man skriver in de ord man vill testindexera i
inmatningsfältet eller om man lämnar inmatningsfältet tomt testindexeras alla ord i de 100 första
posterna i den aktuella tabellen.
Skriv ut:
Då man har många tabeller och många olika inställningar, kan det vara praktiskt att spara dessa
i pappersform. Funktionen skriver indexeringsmetoderna för de i tabellen ingående kolumnerna.
Bygg ändringar:
Detta val gör att Boolware indexerar om endast ändrade kolumner. Vid en ändring av
indexeringsmetoderna för en kolumn markerar Boolware kolumnnamnet i fetstil och meddelar
att kolumnen måste byggas om. Detta val innebär att Boolware kommer att bygga om så litet
som möjligt. När de ombyggda kolumnerna har synkroniserats med datakällan, tas
fetstilmarkeringen bort.
De ändringar som görs kan delas in i sex grupper, beroende på hur mycket det påverkar
systemet:
1.
Hämta från datakällan, ordutplock/sortering/indexering (som då tabellen byggs)
22
2.
3.
4.
5.
6.
Hämta från datakällan och bygg upp Boolware datafil; inget
ordutplock/sortering/indexering
Hanteras endast i indexsteget och utgår från existerande index; inget att hämta från
datakällan/ordutplock/sortering
Hämta från datakällan och bygg specialindex; hantera endast aktuellt specialindex
Endast borttag av filer; inget hämta från datakällan/ordutplock/sortering/indexering
Ändrar endast attribut i deskriptor, ingen annan bearbetning behövs
Nedan följer några exempel på ändringar som faller inom de olika punkterna:
Grupp 1:
Om man gjort tillägg av någon av indexeringsmetoderna: ord och sträng. Tillägg eller borttag
av följande indexeringsmetoder: normalisering (komprimering) och skiftkänslig.
Indexeringsmetoderna närord och rank är ”sammankopplade”; rank kräver ingen egen fil, då
närord finns. Tillägg av närord och borttag av närord, då rank skall vara kvar, hamnar i denna
grupp. Tillägg av rank, då inte närord finns, hamnar i denna grupp.
Grupp 2:
Om man endast har lagt till eller tagit bort någon kolumn ur Boolware datafil. Samtliga kolumner,
som skall tillhöra datafilen, måste hämtas från datakällan, men ingen sortering/indexering
behövs.
Grupp 3:
Följande förändringar kan byggas direkt från befintliga Boolware index:
a) tillägg/borttag av: vänstertrunkering, grundformning, grupperad och fonetisering,
b) tillägg av försortering samt
c) borttag av: ord, sträng och skiftkänslig
Grupp 4:
De specialindex som hanteras på detta sätt är: Likhet, Kategorisering och Fritext. I detta fall
kommer endast ord för respektive specialindex att hanteras; de ”underliggande” indexen berörs
inte.
Grupp 5:
Borttag av försortera samt borttag av samtliga ”Fritext-kolumner”, ”Likhets-kolumner” och
”Kategori-kolumner”.
Grupp 6:
Tillägg/borttag av alias. Om närord finns och inte har ändrats och rank ändras
(tillägg/borttag).
Ändringar i vissa kolumner kan innebära, att även andra kolumner måste tas med vid
omindexeringen: Fritext, Likhet, Kategorisering, Subfält och Primärnyckel.
Kategorier:
Denna knapp används för att ställa in automatisk kategorisering. Automatisk kategorisering
innebär, att posterna i en databas automatiskt grupperas i olika kategorier beroende på
posternas innehåll. I denna dialog kan man: definiera vilka kategorier som databasen skall
innehålla, ange den kolumn som skall innehålla den kalkylerade kategorin, ställa in marginalen
mellan olika kategorier, ange kategoridominans etc. Denna funktion beskrivs i detalj nedan i
separat stycke: Automatkategorisering.
Spara XML-definition:
Denna knapp används för att spara XML definitioner. Se separat beskrivning nedan Indexering
upprepade fält.
Viktigt: Knappen “Testindexera” rekommenderas för den som vill kontrollera, vilka termer som
genereras i index för aktuell kolumn. Möjlighet finns att mata in text, eller om ingen text matas in
23
så extraherar Boolware automatiskt ut orden för kolumnen i de första hundra posterna från
datakällan som exempeltext.
Under fliken ALLMÄNT finns: ”Språk”, ”Tillåt sökning vid omladdning av index” och ”Ladda
minnesmappade index direkt då servern startas”.
Språk:
Språkinställningen gäller hela tabellen och påverkar ord som skall ”grundformas” och
”fonetiseras”. Det påverkar även vilken synonym-, tesaurus- och stoppords fil som kommer att
användas.
Det finns också en annan språkinställning, som styr språket för Boolware Manager. Den finns
beskriven i Kapitel 10 Inställningar.
Tillåt sökning vid omladdning av index:
Om denna kryssruta är aktiverad, behålls de aktuella indexen under omladdningen och
sökningen kan fortgå under denna tid. Då laddningen är avslutad, växlas de nya indexen in och
kommer i fortsättningen användas vid sökning. Under denna omladdning tar Boolware index
dubbelt så stor plats på disk.
Ladda minnesmappade index direkt då servern startas:
Om denna funktion är ikryssad, laddas Boolware index för de kolumner som markerats
”Minnesmappad” vid uppstart av Boolware istället för vid första användningen av Boolware
index. Om det inte finns tillräckligt med internminne + växlingsfil, ligger Boolware index kvar
som vanligt på skivminnet.
Viktigt: Då ”Minnesmappad” ändras, måste index för aktuell kolumn byggas om för att det skall
få effekt; flyttas till minnet respektive tas bort från minnet.
Specialnställningar för en kolumn:
Tecken, Insticksmoduler, Fonetiska undantag, Skiftkänslighet, Synonymer och Tesaurus
Inställningar i ovanstående kommer endast att användas för den aktuella kolumnen.
Boolware försöker att hitta inställningar i följande ordning: kolumn, tabell, databas och globalt
(systemet). Så fort en inställning har hittats används den.
Tecken:
Varje kolumn kan ha sin egen uppsättning av tabeller för teckenstandard. Denna uppsättning
kommer endast att användas för den aktuella kolumnen.
Skräddarsydd indexering (insticksmoduler):
Om en kolumn skall ha skräddarsydd indexering (se Kapitel 14 ”Skräddarsydd indexering”),
måste man registrera den skräddarsydda funktionen och dess parametrar här. Den
skräddarsydda indexeringen kommer endast att gälla för den aktuella kolumnen. Man kan inför
varje fråga välja, om man vill eller inte vill, att skräddarsydda söktermer skall genereras vid
sökningen genom en sessionsinställning (indexexit on/off). Vid start av en session är generering
av skräddarsydda söktermer påslagen.
Fonetiska undantag:
Ange de fonetiska undantag, som är speciella för denna kolumn.
Skiftkänslighet:
Ange undantag från angivna regler för skiftkänslig för denna kolumn.
Synonymer:
Ange speciella synonymer för denna kolumn.
Tesaurus:
Ange speciella tesaurus termer för denna kolumn.
24
Under fliken LIKHET kan man ställa in den aktuella tabellen för likhetssökning. Följande
inställningar finns: Indexera likhet på kolumnnivå, Vektor-reduktion samt Egen grundformning.
Se ytterligare beskrivning nedan under sektionen: Likhet - VSM.
Indexera likhet på kolumnnivå:
Genom att kryssa i denna ruta, kan man förfina likhetssökningen så att informationen för endast
ett fält skall gälla vid sökning.
Vektor-reduktion:
Likhetssökningen kan fininställas för att balansera snabbhet och relevans. Att justera reglaget
mot 100% kanske förbättrar relevansen, men det försämrar samtidigt prestanda. Att justera
reglaget mot 0% kommer förbättra prestanda, men med kanske förlorad relevans som resultat.
Genom att flytta detta reglage kan man testa sig fram till en lämplig nivå. OBS olika tabeller kan
kräva olika inställning. Exempelvis visar det sig att en tabell som innehåller beskrivande text
bestående av ”vanliga” ord ger bästa resultat - relevans -, då reglaget befinner sig omkring 5%.
Egen grundformning:
Ett annat sätt att förfina likhetssökningen är att använda sig av ”synonym-tabeller” för att
”likställa” vissa ord. Namnet på denna fil är: ”tabellnamn.stem”. Denna fil påminner mycket i
hantering om filen som används för grundformning, ”stemming.xx” (xx är språkkod). Filen
”stemming.xx” är global för samtliga databaser; en för varje språk, medan ”tabellnamn.stem”
endast gäller en tabell. Filen ”stemming.xx” måste finnas på den katalog, där Boolware Server
finns, medan ”tabellnamn.stem” skall finnas på samma katalog som tabellfilen, ”tabellnamn.tab”.
Filen ”tabellnamn.stem” kan betraktas som en synonymfil med det viktiga undantaget, att
tabellen måste indexeras om vid ändringar i filen ”tabellnamn.stem”.
Under fliken SORTERINGAR anger man sorteringsordning vid laddning.
Laddningsordning:
Man använder SQL syntax för att ange i vilken ordning posterna skall läsas då Boolware index
laddas. Vid en sökning kommer sedan posterna att presenteras i denna ordning utan att man
behöver utföra en online sortering. Efter en uppdatering av tabellen ligger inte posterna längre i
denna ordning, varför denna funktion endast är användbar för statiska och semi-statiska
tabeller. OBS: Denna funktion ökar tiden för att ladda index.
Sortering online (MaxDBMS):
Denna knapp ger samma dialog som fliken FILSTORLEKAR nedan.
Under fliken FILSTORLEKAR finns tre flikar: Sortering, Uppdatering och Filstorlekar.
Sortering:
Detta värde är endast meningsfullt, då ett fält är indexerat som sträng eller numeriskt. I detta fall
kan Boolware index användas för att erhålla en mycket snabb sortering av miljontals poster. Då
indexet är mycket stort och ett ganska litet antal poster skall sorteras, är det mer effektivt att
använda någon annan av Boolwares sorteringsalgoritmer. Om antalet poster att sortera
understiger det värde man angivit, kommer inte Boolware index att användas vid sortering.
Inställningar kan göras på följande nivåer: databas, tabell och kolumn. Boolwares olika
sorteringsalgoritmer finns beskrivna i Kapitel 11 ”Boolwares sökspråk” sektion ”Rankning genom
sortering”.
Uppdatering:
Genom att sätta ett värde här kan man styra prioriteten mellan uppdatering och sökning. Då ett
index uppdateras, måste man ”låsa” indexet för sökning, när man skriver tillbaka det
uppdaterade resultatet för ett ord. Under denna tid (ett antal millisekunder) kan ingen sökning
pågå, utan en sökfråga väntar tills uppdateringen är färdig. Om inget värde sätts, kommer
indexet endast vara låst för ett ord och sedan släpps sökare in. Om man däremot sätter ett
25
värde N, kommer indexet att låsas för N ord och sökarna är utelåsta under en längre tid. Ju
högre värde man anger, dess högre prioritet får uppdateringen.
Stora uppdateringar i Boolware delas upp i så kallade "partiell uppdatering", där man försöker
uppdatera ett "lagom" antal poster. Internt i Boolware finns några parametrar, som gör att man
hanterar ett "lagom" antal poster. Dessa parametrar är: max. antal poster 15.000, max antal ord
(om inte närordsindexerat) 5.000.000 samt om närordsindexerat 2.500.000 ord. Den gräns som
påträffas först startar en "partiell uppdatering". I vissa fall är detta inte tillräckligt. Det finns nu en
möjlighet, att utifrån ytterligare styra detta genom att i ett kommando i Boolware Manager ange
maximala antalet Insert och Delete poster, som får ingå i en "partiell uppdatering".
Man gör på följande sätt:
1. Starta Boolware Manager
2. Klicka på knappen ”Kommando”
3. Ett Boolware konsol-kommando fönster visas
4. Skriv: update config dsn 'dsn_namn' tables 'tabell_namn' with 'maxpartialupdaterows' värde
I värde anger man hur många Insert/Delete poster som maximalt får ingå i en "partiell
uppdatering".
Om värdet sätts till -1, stänger man av denna funktion och förlitar sig till Boolwares automatiska
inställningar, som beskrivits ovan.
Filstorlekar:
Denna funktion omfattar tre olika typer av filer i Boolware: Närordsfilen, Referensfilen och
Datafilen. Om ingen storlek har angivits, sätts den maximala storleken på en fil till 16 GB. Det
värde som sätts på filen justeras till närmaste jämna potens av 2 (16 GB, 32GB, 64GB …). Den
maximala storleken på en fil i Boolware är 256 GB.
Exempel: Om man anger 21 GB för datafilen i en tabell, kommer den maximal storleken på
denna fil att kunna uppgå till 32 GB.
Under fliken DATAKÄLLA anger man var data finns och hur det är lagrat, då man använder sig
av en Boolware databas se detaljerad beskrivning i Kapitel 4 "Lägg till en databas", sektion
"Boolware databas" samt avsnitt "Boolware record-tabell" och "Boolware filsystems-tabell".
Hänvisar också till Hjälp funktionen i Boolware Manager.
Under fliken DUPLIKAT anger man regler för hur man skall ta bort duplikat ur den erhållna
svarsmängden.
I Boolware finns det ett sätt att ta bort dubbletter ur ett framsökt resultat.
För att Boolware ska kunna göra detta måste en regel för dubblettborttagning anges.
Redigera regler genom att skriva direkt i cellerna på raden för regeln alternativt högerklicka och
välj önskat menyalternativ.
Boolware kan hantera upp till 10 olika dubblettregler per tabell.
En dublettregel består av: ”Regelnamn”, ”Kolumner för duplikatidentifiering” och ”Kolumner för
duplikatordning”.
”Regelnamn” ska vara unikt och används vid dubblettborttag av sökapplikationerna med
kommandot ”dupeliminate(ruleName)” där ruleName är namnet på den regel, som skall
användas för att ta bort eventuella dubbletter ur ett framsökt resultat. Om flera kolumner anges,
skall dessa separeras med kommatecken.
”Kolumner för duplikatidentifiering” består av de kolumnnamn vars innehåll anger vad som skall
anses vara en dubblett förutsatt att innehållet i dessa kolumner är lika. Om flera kolumner anges
ska dessa separeras med kommatecken.
26
”Kolumner för duplikatordning” består av kolumnnamn som sorterar funna dubbletter inbördes
så att den post som skall vara kvar efter borttag av dubbletter hamnar först. Om flera kolumner
anges, skall dessa separeras med kommatecken.
Ex.
En regel som heter ”ADRESS” med ”Kolumner för duplikatidentifiering” som är ’Gatunamn’ och
’Gatunummer’ med inbördes sorteringsordning ”Kolumner för duplikatordning” som Ärende:
’Arbetsställe’ i fallande ordning.
Regelnamn Kolumner för duplikatidentifiering
Kolumner för duplikatordning
ADRESS
Arbetsställe desc
Gatunamn, Gatunummer
Om kryssrutan “Bygg duplikatregler vid laddning” är ikryssad, kommer duplikatreglerna att
byggas automatiskt vid omindexering av tabellen. Bygga duplikatregler kan även köras separat
via menykommandot “Stegkörning” | “Bygg duplikatregler”
Nedanstående attribut kan sättas på en enskild markerad kolumn genom att högerklicksmenyn:
Indexera om kolumn:
Detta val ger möjlighet att indexera om en markerad kolumn i tabellen. Det kan finnas flera skäl
till varför man vill indexera om en kolumn: indexeringsmetoder har ändrats för kolumnen (i detta
fall erhålls meddelande och kolumnnamnet visas i fetstil), ny information i datakällan som ej
automatiskt kommit till Boolware serverns kännedom, korrupta index av någon anledning etc.
Knappen ”Bygg ändringar” kan också användas för detta ändamål. I detta fall kommer endast
nödvändiga förändringar göras. När kolumnen har synkroniserats med datakällan, tas
fetstilmarkeringen bort.
Sätt primärnyckel:
Kopplingen mellan Boolware och datakällan sköts med hjälp av en unik identifikation,
primärnyckeln. Det måste således alltid finnas en primärnyckel i de tabeller/vyer som skall
indexeras av Boolware Index Server. En primärnyckel kan byggas upp av flera kolumner. Om
ingen primärnyckel är satt i datakällan måste denna sättas här; exempelvis för vyer.
Viktigt: Det måste alltid finnas en primärnyckel i varje tabell/vy för att det skall vara möjligt att
skapa Boolware index för denna tabell/vy. Den totala längden av en primärnyckel får ej
överstiga 126 bytes. Restriktioner angående primärnyckel finns beskrivna i Kapitel 1
”Begränsningar och restriktioner i Boolware Index Server”.
Främmande nyckel:
I en relationsdatabas finns det oftast relationer mellan de i databasen ingående tabellerna.
Dessa relationer styrs av primärnycklar och främmande nycklar.
Om inga relationer finns uppsatta i datakällan ges användaren en möjlighet, att via Boolware
Manager etablera önskade relationer. Det är då användarens ansvar, att de angivna
relationerna existerar i databasen.
För att ange relationer mellan tabeller i en databas gör man på följande sätt:
1.
2.
3.
4.
Välj något alternativ av Ändra.../Ta bort
Vid ta bort, raderas den existerande relationen
Vid ändra väljer man den tabell och kolumn som skall utgöra relationen
Boolware kommer nu att spara denna relation, vilken sedan kan användas vid sökning.
I kapitel 11 ”Boolwares sökspråk” under rubriken ”Sök relaterat (Join)” beskrivs i detalj,
hur en sådan sökning utförs.
27
Lägg till aliasfält:
Ett Aliasfält är ett virtuellt fält, vilket endast innehåller referenser - ej data - till i Tabellen
ingående Kolumner. Funktionen möjliggör att: ge kolumnen ett annat namn än det som finns i
datakällan, ”koppla” flera kolumner till ett Aliasfält och på så sätt möjliggöra samsökning inom
flera Kolumner.
I de flesta fall används denna funktion för att koppla kolumner och ge dem ett namn (aliasnamn)
som används vid sökning.
Det går att skapa, lägga till, ta bort och redigera vilka kolumner som skall ingå i Aliasfältet.
För att sökning via ett Aliasfält skall vara meningsfullt ska de i Aliasfältet ingående kolumnerna
ha samma indexeringsegenskaper.
Ta bort aliasfält:
Tar bort det markerade Aliasfältet
Redigera aliasfält:
Redigera (ta bort/lägg till kolumner) det markerade Aliasfältet.
Lägg till XML-definition:
För att erhålla sökning och presentation av ”upprepade” fält på ett korrekt sätt, kan man välja att
specificera de upprepade fälten XML kodade i en Kolumn. Se separat beskrivning nedan;
Indexering upprepade fält.
Ta bort XML-definition:
Ta bort XML definitionen.
Spara XML-definition:
Spara den aktuella XML definitionen till valfri fil.
Ändra datatyp:
Denna funktion kan endast användas på ett fält som finns i en XML-definition. Alla fält i en XMLdefinition får skönsmässigt datatypen varchar. Datatypen kan ändras till numerisk och bredd
och antal decimaler kan sättas.
Några attribut på högerklicksmenyn gäller hela tabellen: Kopiera till Urklipp och Främmande
nyckel:
Kopiera till Urklipp:
Alla kolumner och dess datatyper och bredd kopieras till ett urklipp, som sedan kan användas
vidare.
Främmande nyckel:
Främmande nycklar kan sättas via Boolware, men ansvaret för att de är så unika man önskar
ligger helt hos användaren; ingen kontroll görs.
Om det är en record-tabell kan man genom att dubbelklicka på en kolumn ändra Datatyp, Bredd
och Decimaler.
Markerar man en kolumn så visas den kolumnens indexeringsattribut i kryssrutorna till höger.
Man kan även välja om kolumnen ska indexeras och i så fall – hur kolumnen ska indexeras.
Översiktsbilden anger med ett kryss vilka attribut, som är satta för de olika kolumnerna. Med
hjälp av filtreringsknapparna kan man selektera och visa alla kolumner som har valda attribut.
Exempelvis visa alla numeriska kolumner.
Indexera kolumnen:
28
Här bestäms, om kolumnen ska indexeras eller inte genom att ändra i kryssrutan, som är
placerad i ramen som omger övriga egenskaper.
Sökomfång:
Om kolumnen ska indexeras, skall omfånget på indexeringen bestämmas. Nivån kan sättas till
”Inom fält” vilket är skönsinställning eller “Alla fält” eller en kombination av dessa.
Med “Alla fält” menas att alla termer i kolumnen kommer att vara globalt sökbara på tabellnivå;
med andra ord sökning kan ske utan att specificera en kolumntillhörighet. Denna funktion är
endast meningsfull, då mer än en kolumn markeras för “Alla fält”. Detta är en specialvariant av
Aliasfält, vilket beskrivs ovan i detta kapitel.
Numerisk:
Denna datatyp hanteras speciellt. Indexeringsmetoden går ej att välja, utan Boolware
bestämmer med utgångspunk från datakällan, om Kolumnen är numerisk eller ej.
Olika datakällor har olika benämningar på numeriska datatyper och Boolware anpassar sig till
den aktuella datakällan. Några exempel på datatyper, vilka automatiskt markeras som numerisk
är: int, smallint, tinyint, numeric, float, real, decimal, money, smallmoney etc.
Om en Kolumn är indexerad som numerisk, kan man utnyttja Boolwares mycket snabba
kolumnsort.
Sträng:
Att indexera en textkolumn som sträng innebär att all text i varje rad i kolumnen indexeras som
en term. Endast inledande och avslutande blanktecken kommer att tas bort. Detta innebär att
ord inuti texten inte kommer att vara sökbara som enskilda ord. Texten återfinns endast om
sökning sker på textens början. Maximal längd av texten som indexeras är 126 bytes. Tecknet
(|) behandlas som slut på rad.
Sträng sätts som skönsinställning, då datatypen i datakällan är: char eller varchar och storleken
understiger 16 tecken.
Om en kolumn är indexerad som sträng, kan Boolwares mycket snabba kolumnsort användas.
Permuterad:
Indexera en textkolumn permuterad liknar sträng, men genererar fler termer, eftersom alla
enskilda ord i en sträng kombineras i alla möjliga kombinationer (permutationer). Permuterad
gör det möjligt att söka på alla individuella termer i en sträng vilket normalt inte är fallet för
sträng. Tecknet (|) behandlas som slut på rad. Permutationen avslutas om kommatecken
påträffas eller vid slut på rad. Ett exempel:
A B C, E F genererar följande permutationer:
A
A
B
B
C
C
B
C
A
C
A
B
C
B
C
A
B
A
Maximalt fyra termer i varje sträng permuteras. Detta ger 24 olika strängar.
Viktigt: permuterade index genererar enormt många termer och därmed enormt stora index.
Detta i sin tur tynger ner systemet. En rekommendation är att använda Närordssökning samma
rad istället för att hitta ord som förekommer på samma rad.
Inom sträng:
I Boolware systemet finns det möjlighet, att för ett fält välja egenskapen "Inom sträng", vilket gör
att detta fält indexeras på ett speciellt sätt så att trunkeringar både i början och slutet av en
sträng går lika fort att söka som på hela strängen.
29
Grupperad:
Att indexera en kolumn grupperad innebär, att indextermerna indelas i grupper. Detta kan
förbättra sökhastigheten avsevärt, då man använder intervallsökningar och ”hårda” trunkeringar
frekvent. Vidden av varje grupp är inställbar.
Exempel: antag att en kolumn innehåller personnummer (10 siffror ååmmddxxxx). Om man
sätter gruppstorleken till 2, 4 och 6 innebär det att samtliga termer i denna kolumn grupperas för
år, år och månad samt år, månad och dag och intervallsökningar på dessa begrepp går mycket
snabbt.
Försortera:
Detta val markerar, att kolumnen skall försorteras för snabb sortering av statisk data. Endast
kolumner som är indexerade som Sträng eller Numerisk kan försorteras. Se Kapitel 11
”Boolwares sökspråk” under rubriken ”Rankning genom sortering” för en utförligare beskrivning.
Koordinat:
Detta val markerar, indexera geografiska koordinater och gör dem sökbara. Via knappen typ…
väljer man formatet; antingen WGS84 alternativt RT90, System32/34.
Exakt lydelse:
Detta innebär att alla strängar även indexeras och lagras med dess ursprungliga lydelse utan att
några som helst modifieringar görs.
Ord:
Att indexera en textkolumn som ord, innebär att alla ord görs till sökbara termer. Boolware har
speciella teckentabeller, som definierar vilka tecken, som utgör en sökbar term. Dessa
teckentabeller kan visas och redigeras i Boolware Manager.
Viktigt: Tecknet bindestreck behandlas speciellt vid radslut; första ordet på nästa rad
sammanfogas till en sökterm.
Exempel: han var den snabbaste simmaren
genererar:
HAN
VAR
DEN
SNABBASTE
SIMMAREN
Närord:
Markering för denna indexeringsmetod innebär, att alla termer kommer att innehålla ett
ordningsnummer. Detta gör det möjligt att närordssöka. Med närordssökning menas, att
termerna ska stå nära varandra. Hur nära varandra de ska stå kan specificeras i Boolware
sökspråk (QL), vilket beskrivs i Kapitel 11 Boolwares sökspråk.
Exempel: en vanlig booleansk fråga på ”blå” och ”bil” hittar poster där ”blå” och ”bil”
förekommer. Posten kan dock innehålla lydelserna ”blå hatt” och ”röd bil” vilket inte var avsikten.
Genom att använda närordssökning kommer enbart de poster som innehåller ”blå bil” att hittas.
Anledningen till att Närord är utökad funktionalitet är, att den gör onlineuppdatering och
indexering lite långsammare. Dessutom blir index för kolumnen betydligt större, i genomsnitt blir
filen som hanterar närordsindex 25% av ursprungsdata.
Närord, samma rad:
Denna indexeringsmetod påminner mycket om vanlig Närord, men möjliggör endast närhet på
samma rad. Rad i detta sammanhang menas text avskild med radslutstecken (|).
30
Som exempel kan nämnas en strukturerad företagsdatabas, där styrelseledamöter skrivs på
separata rader i kolumnen Styrelse. Om man söker efter Kurt Hellström, kan man utan Närord,
samma rad, erhålla företag, som har styrelseledamöter som heter Kurt Karlsson och Lena
Hellström.
Rankning:
Om man vill utnyttja en Kolumn för att presentera de framsökta posterna i en speciell ordning,
skall denna indexeringsmetod markeras.
Ordningen baseras på de söktermer som angivits i Kolumner, som är markerade för rankning.
Samtliga sådana söktermer från denna söksession (inleds med FIND) kommer att användas vid
bestämmandet av ordningen. Ordningen kan baseras på två grundbegrepp: antal förekomster
och frekvens.
Vid antal förekomster räknas samtliga förekomster av de ”rankade” söktermerna i varje post och
de poster, som har flest förekomster, presenteras först.
Vid frekvens räknas antal förekomster på samma sätt som tidigare, men den summan divideras
med det totala antalet ord i fältet och ett värde (frekvens) mellan 0 och 1 erhålls. De poster som
har högsta frekvensen presenteras först.
I Boolwares sökspråk kan man ”påverka” ordningen genom att ange, att en sökterm skall ha
större betydelse för ordningen än de andra. Denna funktion kallas viktad rankning. Funktionen
finns för såväl förekomster som frekvens.
Exempel på viktad sökning (kolumnen Text måste är markerad för rankning):
FIND Text:aktier/9/
AND Text:skatt
AND Text:bolag/4/
Då antalet förekomster skall beräknas i detta fall, multipliceras antalet funna aktier med 9,
antalet funna skatt med 1 och antalet funna bolag med 4. Detta innebär, att poster med många
förekomster av aktier och bolag ”gynnas” vid presentation. Största vikt som kan anges är 20.
Det finns också möjlighet att sätta en vikt för en rankningsbar kolumn, vilket innebär att samtliga
förekomster av termer inom denna kolumn multipliceras med den specificerade vikten. Se
kapitel 11 ”Boolwares sökspråk” avsnitt ”Rankning av resultat från en sökning”.
Fonetisering:
Denna indexeringsmetod gör det möjligt att söka på termers uttal snarare än dess stavning. Om
fonetisk sökning är aktiv för en kolumn, kommer stavningen inte att vara den huvudsakliga
orsaken till sökträffarna.
Exempel, sök alla förekomster av “Karlsson” söker även efter “Karlson” och “Carlsson” etc.
Olika språk har olika fonetiska regler, så Boolware använder sig av olika fonetiseringsalgoritmer
för olika språk.
Skönsmässigt sätts fonetiseringsalgoritmen beroende på det språk som angivits för den aktuella
tabellen, till Svenska, Engelska eller Soundex. Via knappen types... kan man emellertid välja en
annan fonetisering. Den valda fonetiseringsalgoritmen kan gälla endast den aktuella kolumnen
eller samtliga kolumner i tabellen.
31
Fonetiska sökningar baserar sig på den mänskliga hörseln, snarare än stavning. Alla likaklingande bokstäver, och kombinationer av bokstäver, ersätts av klangtecken och på så vis
framställs en ”hörselkod”. Denna kod kan användas för att jämföra likhet, och är indexeringsbar.
Fonetisk ljudkodning kan dock ej hantera förväxlade bokstäver (skrivfel), eller om ord står i fel
fält (t ex ett företagsnamn i adressfältet). Dessutom är ljudkodning mer eller mindre fokuserat till
ett visst ”språkrum”, och fungerar inte lika bra på andra språk. Av den orsaken erbjuder
Boolware flera olika metoder.
Skillnader mellan de olika metoderna
Soundex klarar bara 6 olika ljud, inga vokaler, inga siffror och kodar bara de fyra första tecknen.
Den är den mest förenklade, vilket innebär att den ger mycket brus (för många träffar).
Anpassad soundex klarar 12 olika ljud, inga vokaler, inga siffror samt kodar de sexton första
tecknen, vilket ger den betydligt bättre precision än den vanliga Soundex. Dock ger den
fortfarande mycket brus.
Europa klarar cirka 40 olika ljud, grupperar vokaler, behåller siffror och har ingen begränsning
på ordens längd. Jämfört med Soundex-metoderna är precisionen betydligt högre och denna är
designad för att fungera bra med västeuropeiska språk, och dess precision ligger ungefär mitt
emellan Soundex-metoderna och de Svenska och Engelska.
Svenska och Engelska klarar cirka 100 olika ljud, hanterar sex vokaler behåller siffror och har
ingen begränsning på ordens längd. Dessa metoder är optimerade för respektive språk, vilket
ger dem hög precision (nästan inget brus). De är dock på grund av denna precision, olämpliga
att använda på andra språk. T ex uttalas ”jean” med ett ”j-ljud” på engelska, medan det uttalas
med ett inledande ”sch-ljud” på franska. Inledande ”G” ljudar nästan alltid som ”G” på engelska
och tyska, men nästan alltid som ”J” på franska. På svenska blir det ”G” eller ”J” beroende på
om det följer en hård eller mjuk vokal, eller konsonant.
Via Boolware Manager kan man också redigera fonetiska undantag. I dessa kan man ange ord
som inte är fonetiskt lika, men som ändå skall hanteras lika.
Exempel: ab(aktiebolag, as, a/s, oy, ltd, limited); detta innebär att alla de angivna termerna
kommer att sökas vid en fonetisk sökning. Dessa synonymer kan förekomma på kolumnnivå,
tabellnivå och databasnivå. Samma synonymfil gäller oavsett vilken fonetiseringsalgoritm som
valts.
Grundformning:
Detta är en teknik, som används för att normalisera termer på dess ordstam (grundform).
Typiska sådana termer är: verb, substantiv, adjektiv och adverb, där grundformen kan böjas på
ett regelbundet eller oregelbundet sätt. Detta innebär att användaren inte behöver vara så
precis i sin sökning.
32
Speciella, språkberoende, metoder används för att automatiskt normalisera dessa termer. Ord
som har samma konceptuella innebörd, men är oregelbundna i sitt böjningsmönster såsom GÅ,
GICK och GÅTT, kan läggas i en speciell fil, stemming.* där * anger vilken språkkod som
kommer att användas (en, sv, fr etc.). Se Språk ovan i detta kapitel.
Normalisering (kompress):
Denna metod används för att komprimera förkortningar bestående av enstaka bokstäver.
Exempel ”I&B&M”, ”I.B.M.”, ”I B M” och ”I/B/M” kommer att matcha “IBM”. De tecken som kan
stå mellan de enstaka bokstäverna är: blanktecken, punkt (.), snedstreck (/), plustecken (+) och
et-tecknet (&) (så kallade ”skip-tecken”).
Observera; om något av tecknen - blanktecken, punkt (.), snedstreck (/), plustecken (+) eller ettecknet (&) - har satts i teckentabellen ’Ordformning’ som ’Bokstav’ eller ’Siffra’, kommer de att
hanteras som ’Bokstav’ respektive ’Siffra’ och inte som ”skip-tecken”.
Vänstertrunkering:
I de allra flesta söksystem, som bygger på sökteknik via inverterade filer, tar sökningar, där de
ingående söktermerna är hårt trunkerade, lång tid. Speciellt resurskrävande blir en sökning om
de inledande tecknen ”trunkeras”, eftersom i detta fall hela den inverterade filen måste
genomsökas.
I Boolware Index Server finns det möjlighet, att markera en kolumn för vänstertrunkering, vilket
gör att denna kolumn indexeras på ett speciellt sätt så att ”trunkeringar” i början av en sökterm
går lika fort att söka som ”vanliga” termer.
Anledningen att denna indexeringsmetod är valbar, är att den genererar dubbelt så stora index.
Inom ord:
I vissa fall kan det vara viktigt att snabbt kunna söka fram en sträng i ett ord; det får alltså
förekomma tecken både till vänster och höger om det specificerade sökuttrycket.
För att slippa söka igenom hela indexet för att hitta den specificerade strängen, kan man
indexera kolumnen med indexeringsalternativet ”Inom ord”.
Anledningen att denna indexeringsmetod är valbar, är att den genererar flerdubbelt stora index.
Skiftkänslig:
I de flesta söksystem vill man ”normalisera” ord vad beträffar versaler och gemener så att man
vid söktillfället inte skall behöva tänka på hur ordet ligger i de olika posterna. I vissa fall kan det
dock vara motiverat att spara orden exakt som de ligger lagrade i databasen - skilja företaget
OM från det vanliga ordet om -. För detta ändamål kan man för en kolumn tala om, att ord som
följer vissa regler skall sparas exakt i indexfilen. Förutom att de ord, som uppfyller reglerna
sparas skiftkänsligt, sparas de också på vanligt sätt.
Regelverket, som avgör om ordet skall sparas skiftkänsligt, består av tre komponenter: antalet
versaler ett ord skall innehålla för att lagras skiftkänsligt, undantag från versaler och en
kombinerad synonym- och undantagsfil.
Versaler i detta sammanhang bygger på de teckentabeller (Neutralisering), som finns i
Boolware. Versaler kan anges med ett antal (Antal versaler), vilket betyder att alla ord som
innehåller minst detta antal versaler kommer att sparas skiftkänsligt. Man kan också ange en
mask (Versal-mask), där man talar om var versalerna skall vara placerade i ordet och implicit
hur många de skall vara. I masken anges versaler med versalt X och gemener med gement x.
Om både Versal-mask och Antal versaler angivits, används Versal-mask. Om inget anges, blir
det två versaler. Olika typer av masker kan anges:
XXX
XXx
XXX?
För att ordet skall sparas skiftkänsligt, skall det bestå av exakt tre versaler
För att ordet skall sparas skiftkänsligt, skall det inledas med två versaler, vilka
måste följas av minst en gemen
För att ordet skall sparas skiftkänsligt, skall det inledas med tre versaler, vilka
33
måste följas av minst ett tecken (gemen eller versal)
För att ordet skall sparas skiftkänsligt, skall det inledas en gemen, vilken följs av
en versal, vilken i sin tur måste följas av minst en gemen
xXx
Om Antal versaler används och sätts till tre, kommer alla ord, som innehåller tre eller fler
versaler (var som helst i ordet) att sparas skiftkänsligt.
I Exkludera anger man de ”versaler”, som inte skall betraktas som versaler, då man räknar
antalet versaler. Tecken, som betraktas som versaler i Boolware, men inte är bokstäver finns
redan med i dessa undantag, så man behöver bara lägga till andra tecken, som inte skall
betraktas som versaler.
Undantagsfilen redigerar man genom att välja alternativet Skiftkänslighet. Ord som finns med i
denna fil skall lagras som skiftkänsliga, även om de inte uppfyller kraven i reglerna ovan. Antag
att regeln är tre versaler. Syntaxen för denna fil är:
Lena
Lena kommer att lagras skiftkänsligt
Stig
Stig kommer att lagras skiftkänsligt
Hans
Hans kommer att lagras skiftkänsligt
Bo
Bo kommer att lagras skiftkänsligt
OM
OM kommer att lagras skiftkänsligt
London(England Storbritannien) London, England och Storbritannien kommer att lagras
skiftkänsligt och hanteras som synonymer
Exakt lydelse:
Detta innebär att alla ord även indexeras och lagras med dess ursprungliga lydelse utan att
några som helst modifieringar görs.
Likhet:
Detta är en avancerad indexeringsmetod som bygger på totala innehållet i en post mer än att
leta efter specifika termer. Samtliga termer som ingår i Kolumner som är markerade för Likhet
matas genom en matematisk modell, som översätter termerna i varje post till en likhetsvektor.
En likhetsvektor definieras som att det finns en startpunkt, en riktning och en längd i rymden.
Vektorerna gör det möjligt att jämföra dokument med varandra och beräkna vinkeln mellan
dessa för att avgöra dess likhet. Se nedan Likhet - VSM.
Ignorera taggar:
Om kolumnen innehåller data, som det finns ”taggar” i såsom: HTML, XML, WML, PDF eller
RTF vill man förmodligen inte ha dessa indexerade som sökbara termer. Markera kryssrutan
”Ignorera taggar” för att undvika detta.
Exempel:
<html>
<head>
<title>Min sida</title>
</head>
<body>
<h1>Detta är en Rubrik</h1>
Text…
</body>
</html>
genererar då följande söktermer:
MIN, SIDA, DETTA, ÄR, EN, RUBRIK, TEXT
Använd stoppord:
Val av denna metod instruerar Boolware att inte indexera de ord, som finns angivna i en
stoppordslista. “Stoppord” är termer som inte är önskvärda att söka på i en databas.
34
Att använda stoppord eller inte, på kolumnnivå, styrs helt av användaren. Stoppordslista per
understött språk kan redigeras i Boolware Manager under ”Inställningar / Stoppord...”.
Sökordsstatistik:
I en kolumn, som har markerats för sökordsstatistik, lagrar applikationen sökord som har
används vid sökningar i Boolware. Man kan sedan använda denna tabell för att erhålla statistik
över vilka frågor som ställts i Boolware och under vilken tid dessa frågor ställts. Kolumnen kan
innehålla både ord och strängar. En utförlig beskrivning av denna funktion finns i Kapitel 11
”Boolwares sökspråk” under rubriken ”Sökordsstatistik”.
Lagra kolumndata:
Detta val innebär, att Boolware lagrar kolumnens data i en ”intern” datafil.
Alla kolumner, som markeras kommer att sparas - i sin helhet - i denna ”interna” fil.
Denna funktion är främst avsedd för ”snabb” presentation av resultatet efter en sökfråga i en
”träfflista”. Denna ”träfflista” brukar innehålla kolumner, vilka på ett tydligt sätt identifierar den
framsökta posten. Funktionen är också användbar vid sorteringar, då kolumnen är ordindexerad
eller då man sorterar på flera kolumner och inte kan utnyttja sortering via Boolware Index.
Om samtliga kolumner, vilka skall presenteras, är markerade för ”Lagra kolumndata”, kommer
Boolware att hämta allt data från den ”interna” filen och inte belasta datakällan över huvud
taget. Detta kan vara till stor hjälp, då datakällan används för andra resurskrävande funktioner.
Ett annat skäl kan vara, att datakällan finns på en annan maskin med dåliga förbindelser.
Viktigt: Man bör undvika att spara kolumner som innehåller stora textmängder och uppdateras
ofta, eftersom de kommer att kräva stora resurser vid uppdatering av posterna i tabellen. Om
den ”interna” filen innehåller mycket data, försämras prestanda. Rekommendationen är att
endast spara kolumner, som verkligen skall användas för snabb presentation eller sortering.
Innehåller UTF-8:
Internt arbetar Boolware med UTF-8 för att ha möjlighet att hantera de flesta tänkbara språk.
Det innebär, att allt data ”översätts” till UTF-8. Om data redan är lagrat som UTF-8 i en kolumn
vars datatyp inte är ”Unicode”, skall man markera det här för att undvika ”dubbel” översättning,
vilket orsakar felaktigt data.
Minnesmappad:
Denna funktion försöker ladda det markerade indexet i minnet. Indexet kommer att laddas till
minnet första gången det används om man inte kryssat för: Ladda minnesmappade index direkt
då servern startas. Om det inte finns tillräckligt med minne, kommer inte indexet att läsas in
utan sökning sker på vanligt sätt via disk.
Viktigt: Om fler indexeringsalternativ väljs, kan det bli omöjligt för Boolware att automatiskt
avgöra vilken typ av sökning som avses. I detta fall måste klienten explicit tala om för Boolware
vad som avses. Detta görs med hjälp av underkommandon i Boolwares sökspråk.
Likhet - VSM
Boolware baserar likhetssökning på VSM. VSM är en förkortning för ”Vector Space Model”, och
innebär förenklat att Boolware betraktar varje dokument (post) som en vektor med tre
egenskaper: en startpunkt, en längd och en riktning i rymden. Genom att sedan jämföra två
vektorer kan en likhet beräknas – alltid ett värde mellan 0 och 1. Ju närmare 1, desto mer lika.
1.0 betyder att de båda dokumenten (posterna) innehåller samma innebörd. Orden behöver inte
vara exakt de samma, eftersom varje ord normaliseras till en grundform. Oavsett om det står
vinna, vann, vunnit, vinnare etc. så är innebörden att någon vinner, och det är vad VSM
använder sig av.
35
Boolwares sökspråk (QL) tillhandahåller ett kommando att använda vid likhetssökning –
underkommandot SIM. En applikation kan välja vilka fält som ska jämföras m.a.p. likhet.
Alla fält som markerats som ”Likhet” plockas av Boolware ut vid indexering och används för att
beräkna en vektor för hela posten. Boolware lagrar varje post i tabellen som en vektor. Om
tabellen innehåller 100.000 rader, kommer Boolwares VSM-fil att innehålla 100.000 vektorer.
Vid indexering kan systemadministratören välja om VSM ska indexeras på fältnivå eller
tabellnivå. Detta syns i form av en ny kryssruta i dialogen för indexering: ”Indexera likhet på
fältnivå”. Om man lämnar denna kryssruta tom betyder det att Boolware indexerar likhet på
postnivå. Om rutan kryssas i bygger Boolware sitt vektorindex på fältnivå.
Att indexera VSM på fältnivå innebär följande:
1.
2.
3.
4.
5.
Applikationen kan välja vilka fält som ska kombineras (snarare än alla) så länge som
fälten markerats som ”Likhet” vid indexering.
Reduktionsnivån kan anpassas individuellt per fält.
Indexet blir något större, även om skillnaden är tämligen liten. Den fil som innehåller
vektorerna (suffixet .vsm) kommer att växa med ca: 5-10 procent, eftersom vektorerna
lagras per fält, i stället för att slås ihop för hela posten.
Applikationer måste alltid ange från vilka fält ord kommer i samband med likhetsfråga.
Tidigare behövdes inte detta, då all likhetsinfo slogs ihop för hela posten. Undantaget är
om det finns exakt ett likhetsfält i tabellen, då behöver inte fältnamnet anges.
Vissa VSM-sökningar på fältnivå är aningen långsammare, beroende på att fält väljs
”on the fly”, men skillnaden är liten. Någon eller några procent kan man räkna med,
beroende på hur många fält som ingår i frågan.
Punkt fyra innebär att applikationer kanske måste justeras, för att inkludera fältnamn i SIMfrågor. Om man inte gör det, och indexerar VSM på fältnivå, ger SIM-frågor utan fältnamn ett
felmeddelande. Här följer ett exempel, för att visa hur frågeformatet ser ut: Exemplet rör en
tänkt sportartikel, med en rubrik och en brödtext.
Först ett exempel på den ”gamla” syntaxen, utan fältnamn.
SIM(Hammarby tar steget upp till elitserien.
Glada supporters jublade när …)
Så här ser den ”nya” syntaxen ut, med fältnamn:
SIM(.#@”Rubrik”:Hammarby tar steget upp till elitserien.
.#@”Text”:Glada supporters jublade när …)
Skillnaden är alltså liten; den enda skillnaden är att varje fält förekommer först på varje rad i
frågan, efter sekvensen .#@ + fältnamn + kolon. Ordningen på fälten spelar ingen roll.
Beskrivningen av Likhet, Sorteringar, Filstorlekar och Datakälla finns under speciella flikar, där
man vägleds via olika menyer, anpassade till den speciella funktion man efterfrågar.
Likhet beskrivs ovan.
Under fliken Sorteringar kan man ställa in värden, som styr huruvida en on-line sortering skall
ske via Boolware index eller via någon datakälla. Under denna flik kan man dessutom styra
prioriteten mellan on-line uppdateringar och sökare med hjälp av ett reglage. En beskrivning av
de olika sorteringsalgoritmerna finns beskriven i Kapitel 11 ”Boolwares sökspråk” sektion
”Rankning genom sortering”.
Under fliken Filstorlekar kan man ställa in filstorlekar för: datafilen, referensfilen och
närordsfilen.
Under fliken Datakälla kan man göra inställningar för tabelltyperna: Record tabell och
Filsystemtabell, vilka använder Boolware datakälla.
36
Det bästa sättet att få en uppfattning om alla möjligheter i Boolware är att köra Boolware
Manager och använda hjälpfunktionen, där alla funktioner är beskrivna.
Indexering upprepade fält
I flera databaser finns det ett behov av att söka i och presentera upprepade fält. Ett fält kallas
upprepat, då det förekommer på flera platser i en post. Ett typiskt exempel kan vara ett
företagsregister, där man har styrelseledamöterna samlade i en kolumn Styrelse. Styrelsen
består vanligtvis av flera personer och om var och en av styrelseledamöterna finns följande
uppgifter: efternamn, förnamn, adress och position. I posten för övrigt kan det finnas uppgifter
om exempelvis VD; efternamn, förnamn och adress. För att inte blanda ihop de olika
efternamnen, förnamnen och adresserna och för att söka bland alla ledamöter i en styrelse
behöver Boolware veta de olika namnens tillhörigheter.
Ett sätt, vilket Boolware använder sig av, är att koda texten på ett hierarkiskt sätt med XML.
Kort om XML
XML är ett standardiserat sätt att beskriva komplicerade datastrukturer. XML lagras alltid som
vanlig text, där texten innehåller särskilda markeringar (sk ”element”, eller ”taggar”), som anger
var fält börjar och slutar.
Exempel:
<?xml version=”1.0”>
<chapter no=”5” >
<head>
<title volume=”Boolware”>Kapitel X</title>
<subtitle>Indexering av XML</subtitle>
<overview>Detta kapitel beskriver …</overview>
<pages>27</pages>
</head>
<body>
<h1>Vad är XML?</h1>
<para>XML är ett standardiserat sätt att …</para>
<para>Exempel:
<code>
……………
</code>
</para>
</body>
</chapter>
Ett element markeras med tecknen <> kring ett namn, t ex <title>. Den text som följer betraktas
som ”innehåll” i elementet, fram till slutmarkeringen </title>.
Således används XML för att beskriva strukturer. Inget sker dock automatiskt utöver detta. Det
krävs ett program, som kan tolka markeringarna - en XML-tolk (XML parser) - för att
markeringarna ska få en innebörd.
Eftersom Boolware innehåller en XML-tolk, kan den förstå XML, och därför också klara att
indexera innehållet i de olika elementen.
Elementen i ovanstående exempel: ”xml”, ”chapter”, ”title”, ”subtitle” osv. indexeras inte,
eftersom de existerar enbart för att markera en struktur och är sålunda inte en del av själva
innehållet.
I Handbok programmering kan man läsa mer och se exempel på hur Boolware hanterar XML.
37
Kodning av data
Innehållet i de olika elementen kan kodas som UTF-8 eller iso-8859-1. Detta kan styras på två
olika sätt: ange kodning i attributet encoding eller markera det med hjälp av kryssrutan
Innehåller UTF-8 i fönstret Tabellegenskaper. I båda dessa fall gäller kodningen hela kolumnen,
vilken i sin tur kan bestå av flera element (subfält).
Om attributet encoding innehåller UTF-8, tolkar Boolware allt data i hela denna kolumn som
UTF-8. Allt annat än UTF-8 i detta attribut (encoding) kommer att tolkas som iso-8859-1.
Om attributet encoding utelämnas helt, gäller det som är specificerat i kryssrutan Innehåller
UTF-8 i fönstret Tabellegenskaper. Om kryssrutan är markerad betyder det att kodningen är
UTF-8, annars kommer data att tolkas som iso-8859-1.
Indexera XML med Boolware
Börja med att tala om för Boolware vilken eller vilka kolumner ur datakällan, som innehåller
XML. Detta görs från Manager genom att högerklicka på kolumnen och välja ”Lägg till XMLdefinition”. I samband med detta behöver Boolware en beskrivning av vilka delar av XMLdokumentet, som skall indexeras.
Beskrivningsfil XML
Denna beskrivning måste göras av er själv och består av några enkla deklarationer i en textfil. I
textfilen anges vilka kombinationer av element och/eller attribut som markerar indexeringsfält:
Observera att beskrivningsfilen, liksom all XML, är skiftkänslig (man måste alltså ange
elementen exakt, som de ser ut i texten).
Exempel på en definitionsfil (”SOFTBOOL XML” måste finnas på första raden i filen):
SOFTBOOL XML
EXCLUDE: a/b/i/para/u
/chapter/head/title word string
/chapter/head/subtitle word
/chapter/head/pages numeric(5,0)
/chapter/body word near similarity rank
I denna beskrivningsfil kan man ange olika indexeringsattribut för de olika fälten.
Fältet /chapter/head/title indexeras som ord och sträng. Fältet /chapter/head/subtitle
indexeras endast som ord. Fältet /chapter/head/pages indexeras som numeriskt, där man
också måste ange antalet heltalssiffror och antalet decimaler. Fältet /chapter/body indexeras
för: ord, närord, likhet och rankning.
Detta är ett annat exempel på en definitionsfil, som innehåller CDATA. Ett dokument kan
innehålla en eller flera kompletta XML strukturer, som lagras under CDATA.
SOFTBOOL XML
EXCLUDE: CDATA#
eRakenskap NOINDEX
eRakenskap/Dokument/Original/CDATA1/xbrli:xbrl/se-ar:CompanyName WORD
eRakenskap/Dokument/Original/CDATA1/xbrli:xbrl/se-ar:RegistrationNumber WORD
eRakenskap/Dokument/Original/CDATA2/xbrli:xbrl/se-ar:CompanyName WORD
eRakenskap/Dokument/Original/CDATA2/xbrli:xbrl/se-ar:RegistrationNumber WORD
eRakenskap/Dokument/Original/CDATA3/xbrli:xbrl/se-ar:CompanyName WORD
eRakenskap/Dokument/Original/CDATA3/xbrli:xbrl/se-ar:RegistrationNumber WORD
38
Ignorerade taggar
I vissa fall kan XML-dokumenten innehålla taggar, som inte betyder något för själva strukturen,
exempelvis element för att markera typografisk information som t ex <b> för fet stil, <i> för
kursiv stil etc. Eftersom de förekommer i dokumenten på samma sätt som andra taggar, kan de
göra det svårt att ange exakt, vilka avsnitt som ska indexeras. Därför kan man ange för
Boolware, att vissa taggar ska ignoreras, att Boolware ska bortse från dem i samband med
indexeringen. Detta anges i definitionsfilen, med hjälp av ordet EXCLUDE: först på raden, följt
av de taggar som ska ignoreras, separerade av snedstreck.
Exempel på en definitionsfil (”SOFTBOOL XML” måste finnas på första raden i filen):
SOFTBOOL XML
EXCLUDE: a/b/i/para/u
/chapter/head/title
/chapter/head/subtitle
/chapter/body/code
Högerklicka nu i Boolware Manager på den kolumn som innehåller XML och välj ”Lägg till XMLdefinition”. Peka ut definitionsfilen och tryck OK. Boolware kommer att läsa definitionerna och
inkludera dessa i sin beskrivning av databasen. De element som angivits för indexering kallas
subfält.
Indexera elementattribut
Även element attribut i XML kan indexeras. Detta åstadkoms genom att i beskrivningsfilen ange
vilket/vilka elementattribut, som skall indexeras. I ovanstående XML-beskrivning finns två
attribut som ska indexeras, nämligen ’no’ för element <chapter> och ’volume’ för element
<title>. Lägg till dem i xml-beskrivningsfilen enligt följande:
chapter@no
chapter/head/title@volume.
Prefixindexering
Prefixera innehåller i elementet med attributvärde för att särskilja olika förekomster i ett XMLdokument. Detta görs enligt X-PATH syntax.
Exempel på en prefixegenskap: ”chapter/head/@language/title”. Detta innebär, att alla
termer i elementet ”chapter/head/title” kommer att prefixeras med innehållet (värdet) i
attributet ”chapter/head/@language”.
Samindexera elementdata med samma elementnamn
För att kunna söka efter data från element med samma namn oavsett var i XML-hierarkin det
står, anges detta med dubbla snedstreck ’//’. Detta måste förgås av minst rotelementet i
hierarkin.
Exempel på detta kan vara ”chapter//head”. Detta betyder att all data i alla element med
namnet ”head” under rotelementet ”chapter” kommer att samsökas (lagras i samma Boolware
index).
Indexeringsegenskaper för subfält
Indexeringsegenskaper justeras på liknande sätt som för vanliga kolumner via Boolware
Manager.
39
Begränsningar
Den inbyggda XML-tolken kan läsa alla välformade XML-dokument. Med välformade dokument
menas att element inleds och avslutas på ett korrekt sätt.
Detta är begränsningarna:
•
•
Dokument kan inte valideras.
Externa DTD:er kan inte användas.
Om validering är ett krav bör dokumenten valideras innan de laddas i datakällan.
Felmeddelanden
I händelse att XML-tolken finner fel inom ett XML-dokument kommer ett felmeddelande att bli
noterat antingen i databasens egen loggfil (vid laddning) eller i Boolwares system loggfil (vid
direktuppdatering).
Exempel
Nedan följer ett mycket förenklat exempel på hur man kan använda Prefixindexering.
Följande exempel är en kort Boolware XML definition baserad på de två XML dokumenten
nedan.
SOFTBOOL XML
EXCLUDE:
article/originators/bor@TYPE/originator/names/nationality@NAT/name
I detta fall finns det två prefixgrupper: TYPE och NAT.
Prefixgruppen TYPE innehåller två attributvärden: Author och Reader, och prefixgruppen NAT
innehåller också två attributvärden: Swedish och English.
I Boolware kan man ha maximalt 50 prefixgrupper för ett XML dokument. Varje prefixgrupp kan i
princip innehålla ett obegränsat antal prefix (attributvärden).
Varje prefix skall inneslutas inom citationstecken (”) och varje prefixgrupp skall avslutas med ett
kommatecken (,). Den sista (eller enda) prefixgruppen skall avslutas med semikolon (;) istället
för kommatecken (,). Semikolon skiljer prefix från de ”vanliga” sökorden. Se Kapitel 11
Boolwares sökspråk för den exakta syntaxen för underkommandot prefix.
Följande Boolware Query Language exempel visar hur man ska hitta "Jan Guillou" enbart när
han är "Author" och nationaliteten är "Swedish":
FIND
TEXT/article/originators/bor@TYPE/originator/names/nationality@NAT/name:Prefix
("Author", "Swedish"; Jan Guillou)
Följande Boolware Query Language exempel visar hur man ska hitta "Jan Guillou" och
nationaliteten är "Swedish" oavsett om han är "Author" eller "Reader":
FIND
TEXT/article/originators/bor@TYPE/originator/names/nationality@NAT/name:Prefix
("Author" OR "Reader", "Swedish"; Jan Guillou)
Eftersom Author och Reader är de enda förekommande attributvärdena för TYPE kan man även
skriva ovanstående på följande sätt:
40
FIND
TEXT/article/originators/bor@TYPE/originator/names/nationality@NAT/name:Prefix
("*", "Swedish"; Jan Guillou)
Följande Boolware Query Language exempel visar hur man ska hitta "Jan Guillou" ELLER
"Stephen King" enbart när de är "Author" och valfri nationalitet:
FIND
EXT/article/originators/bor@TYPE/originator/names/nationality@NAT/name:Prefix(
"Author", "*"; (Guillou Jan) OR (King Stephen))
I ovanstående exempel gör man en ord-sökning på Guillou AND Jan och en ord-sökning på
Stephen AND King. Mellan de två resultaten görs en OR. Detta gör att man kan skriva orden i
valfri ordning och erhålla exakt samma resultat:
FIND
EXT/article/originators/bor@TYPE/originator/names/nationality@NAT/name:Prefix(
"Author", "*"; (Jan Guillou) OR (Stephen King))
I nedanstående exempel gör man en sträng-sökning, vilket innebär att man måste skriva de
ingående orden i rätt ordning. Resultatet i detta fall blir också detsamma, som i de två
föregående exemplen.
FIND
EXT/article/originators/bor@TYPE/originator/names/nationality@NAT/name:Prefix(
"Author", "*"; "Jan Guillou" OR "Stephen King")
Nedan följer de två xml dokumenten, som ovanstående sökexempel hänvisar till:
<?xml version="1.0" encoding="ISO-8859-1"?>
<article>
<originators>
<bor TYPE="Author">
<originator>
<names>
<nationality NAT="Swedish">
<name>Jan Guillou</name>
</nationality>
</names>
</originator>
</bor>
</originators>
<originators>
<bor TYPE="Reader">
<originator>
<names>
<nationality NAT="Swedish">
<name>Thomas Bolme</name>
</nationality>
</names>
</originator>
</bor>
</originators>
</article>
<?xml version="1.0" encoding="ISO-8859-1"?>
<article>
<originators>
<bor TYPE="Author">
<originator>
<names>
<nationality NAT="English">
<name>Stephen King</name>
41
</nationality>
</names>
</originator>
</bor>
</originators>
<originators>
<bor TYPE="Reader">
<originator>
<names>
<nationality NAT="Swedish">
<name>Jan Guillou</name>
</nationality>
</names>
</originator>
</bor>
</originators>
</article>
Automatkategorisering
När skall man använda automatkategorisering
I vissa databaser finns det ett behov av att automatiskt kategorisera poster, som läggs till eller
ändras i databasen.
Ett typiskt exempel är en tidningsdatabas innehållande artiklar, där kategorierna kan vara:
inrikes, utrikes, ekonomi, kultur och sport. Då man ställt in parametrar för kategoriseringen,
kommer systemet att beräkna den mest troliga kategorin för varje inkommande artikel. Denna
kategoristämpling kan sedan användas vid sökning för att precisera sökningen att endast gälla
en eller flera kategorier.
Exempel:
I ovanstående tidningsdatabas är man intresserad av att söka personer som heter Johansson
och förkommer i sportsammanhang. Om man endast anger Johansson som sökargument (FIND
Text:Johansson), erhåller man en mängd artiklar som handlar om: inrikes, utrikes, ekonomi,
kultur och sport. Om man däremot även anger den kategori, sport, man är intresserad av (AND
Stämpelkolumn:sport), söks endast sportartiklar fram, som innehåller namnet Johansson.
Hur kan man påverka automatkategoriseringen
Eftersom variationen är så stor, när det gäller de olika faktorer som påverkar kategoriseringen,
erbjuds ett antal möjligheter att ställa in parametrar som styr kategoriseringen. Dessa
inställningar görs i ett antal fönster, där varje fönster handhar olika typer av inställningar.
Fönstret ”Kategorisering” innehåller övergripande inställningar, fönstret ”Inställningar för
kategorisering” hanterar hur termerna skall se ut och vilka termer som skall tas med samt
fönstret ”Beskriv kategori” där man kan se och redigera kategoriunderlagen.
Målet med de olika inställningarna är att erhålla bästa möjliga underlag för den aktuella
kategoriseringen. Den viktigaste komponenten för att erhålla en så bra kategorisering som
möjligt är att se till, att kategoriseringsunderlaget är mycket bra från början.
Vad krävs för automatkategorisering
Följande definitioner kommer att användas i den nedanstående beskrivningen:
1.
Underlag för kategorisering; en fil, Kategorifil, som innehåller ”typiska” termer för
42
respektive kategori. Det måste finnas en kategorifil för varje kategori för att en
kategorisering skall gå att genomföra. Genom att jämföra innehållet i en inkommande
post mot samtliga kategorifiler, får man fram den mest troliga kategorin för denna post.
2.
Underliggande information för kategorisering; man måste ange vilka kolumner i varje
post, som skall användas för kategoribestämningen genom att markera dem i fönstret
”Inställningar för kategorisering”. Det är innehållet i dessa kolumner, som jämförs med
innehållet i de olika kategorifilerna, då en kategori skall bestämmas.
3.
Stämpelkolumn; en kolumn som skall användas för att lagra den beräknade kategorin.
Denna kolumn skall finnas i datakällan och kan manipuleras som en vanlig kolumn. Det
är endast om denna kolumn saknar värde (NULL), som systemet kommer att beräkna en
kategori. Genom en inställning, kan man spara flera kategorier i stämpelkolumnen; detta
är praktiskt, då den automatiska kategoriseringen bedömer flera kategorier ligga mycket
nära varandra.
Ovanstående tre villkor måste vara uppfyllda för att en automatisk kategorisering skall äga rum:
1. det måste finnas minst två kategorier (kategorifiler),
2. det måste finnas minst en kolumn som är markerad som kategoriunderlag och
3. det måste finnas en stämpelkolumn.
Viktigt: Då man kategoriserar om en databas - körsteget Kategorisera - får inga uppdateringar
ske i datakällan. Under detta körsteg är mekanismen (”triggers”), som styr synkroniseringen av
Boolware Index avstängd. Detta innebär, att alla uppdateringar, som ännu ej har uppdaterat
aktuell tabell skall köras, innan kategoriseringen startas. Då kategoriseringen är genomförd,
etablerar Boolware automatiskt mekanismen (skapar ”triggers”), som styr synkroniseringen.
Hur fungerar automatkategoriseringen
Detta avsnitt beskriver övergripande hur den automatiska kategoriseringen fungerar. I speciella
avsnitt nedan beskrivs varje möjlig inställning i detalj.
Beräkningen av mest troliga kategorin bygger på underlaget för kategoriseringen, vilket finns i
de olika kategorifilerna. Initialt, då databasen inte innehåller några poster, måste kategorifilerna
skapas av användaren. Det vanligaste sättet är att kopiera ”typiska” artiklar för respektive
kategori till dessa kategorifiler. Det är mycket viktigt, att kategorifilen innehåller relevant
information för den angivna kategorin, eftersom kategoriseringen initialt kommer att grunda sig
på denna information. Genom att verkligen se till att endast relevant information finns i denna fil
- genom att ta bort allmängiltig information och tillföra relevanta termer - erhåller man bästa
möjliga grund för en bra kategorisering. Efter laddning och uppdateringar kommer databasen att
innehålla automatiskt kategoriserade poster grundade på kvaliteten på informationen i
kategorifilerna.
Den automatiskt beräknade kategorin sparas i den angivna stämpelkolumnen. Användaren kan
ange, att systemet skall spara flera kategorier i stämpelkolumnen, då flera kategorier ligger
”nära” varandra.
Poster, som har blivit stämplade med flera kategorier, indikerar att systemet har haft problem att
entydigt bestämma en lämplig kategori. För att snabbt hitta dessa poster finns ett
underkommando dupstamp() (se syntaxbeskrivning i Kapitel 11 ”Boolwares sökspråk”), vilket
söker fram samtliga poster som har stämplats med mer än en kategori.
Då man erhållit en viss mängd automatiskt kategoriserade poster i databasen, kan dessa
finjusteras genom att man manuellt ändrar värdet i stämpelkolumnen; byt ut den automatiskt
påförda kategorin mot en annan lämpligare kategori.
När innehållet i databasen är finjusterat med avseende på kategori, kan man ur databasens
innehåll skapa nya kategorifiler (ställa om siktet). Dessa nya kategorifiler grundar sig på
43
innehållet i befintliga poster i databasen. Det finns ett speciellt körsteg i Boolware Manager
”Skapa nya kategoriunderlag”. för att skapa nya kategorifiler.
När utförs automatkategoriseringen
Den automatiska kategoriseringen utförs vid laddning och uppdatering, men kan också - när
som helst - köras som ett separat steg via Boolware Manager.
För att en post skall automatkategoriseras, måste stämpelkolumnen sakna värde (vara NULL) i
datakällan.
Inställningar för automatkategoriseringen
Genom att trycka på knappen ”Kategorier…” i fönstret Tabellegenskaper erhålls följande
fönster:
Definierade kategorier
Först måste man bestämma vilka kategorier som skall ingå i databasen. I ovanstående
exempel, tidningsdatabasen, har vi valt: Ekonomi, Inrikes, Kultur, Sport och Utrikes som
kategorier.
Dessa kategorier definieras genom en fil, vilken innehåller ”typisk” text för den aktuella
kategorin.
Genom att trycka på knappen ”Ny...” erhålls ett editeringsfönster, där man skall ange namnet på
kategorin samt infoga text, vilken är typisk för den aktuella kategorin. Till att börja med räcker
det med att ”klistra in” artiklar, som är typiska för den aktuella kategorin. Det är mycket viktigt,
att den text som skall utgöra underlaget för kategoriseringen är relevant. Denna procedur
upprepas för varje kategori.
Ett annat sätt att skapa en kategorifil är att skriva in ord, som är utslagsgivande för den aktuella
kategorin. När man skapar en kategorifil på detta sätt, kan man ange att vissa ord som
vanligtvis förekommer flera gånger i artiklar skall förekomma mer än en gång genom att skriva
44
det aktuella ordet på följande sätt: term/n/, där term är det aktuella ordet och n är antalet gånger
det skall förekomma. Detta för att slippa upprepa ordet flera gånger.
Naturligtvis finns det också möjlighet att ändra och ta bort kategorier. Genom att trycka på
knappen ”Redigera…” kan man när som helst editera det befintliga underlaget. Knappen ”Ta
bort…” används, då man vill ta bort den valda kategorin.
Namnsättning av dessa kategorifiler sköts av systemet och får inte ändras.
Genom att dubbelklicka på en markerad kategori eller trycka på ”Redigera…”, erhålls
nedanstående fönster:
Den övre textrutan innehåller användarens skapade kategoriunderlag (”Använd mina
kategoribeskrivningar”), medan den undre textrutan innehåller kategoriunderlag skapade av
systemet från innehållet i den befintliga databasen (”Använd systemgenererade
kategoribeskrivningar”).
Texten i den övre textrutan kan naturligtvis redigeras; lägga till, ändra eller ta bort information,
medan texten i den nedre textrutan endast kan raderas genom att trycka på ”Rensa”.
Bestämning av stämpelkolumn
En speciell kolumn, stämpelkolumn, skall anges, där den beräknade kategorin för den aktuella
posten sparas. När denna kolumn är tom (NULL) kommer Boolware att beräkna den närmaste
och mest troliga kategorin samt spara denna i stämpelkolumnen.
Om denna kolumn redan har ett värde kommer inget nytt värde att automatiskt beräknas fram
och sparas.
Slå på/av automatisk kategorisering
Om kryssrutan “Kategorisering aktiv för tabellen” är ikryssad kommer automatiskt alla poster –
nya eller ändrade – bli kategoriserade om stämpelkolumnen är tom(NULL).
45
Om kryssrutan inte är ikryssad kommer ingen kategorisering ske för varken nya eller ändrade
poster. Kategorisering kan dock ske vid senare tillfälle genom att använda det speciella
körsteget ”Kategorisera” i Boolware Manager.
Stämpla flera kategorier
Om denna kryssruta är markerad, kommer samtliga kategorier som ”ligger nära” varandra vid
den automatiska kategoriseringen att lagras i stämpelkolumnen. Kategorierna kommer att
lagras så att bästa kategorin lagras först. Vad som avgör närheten kan ställas in i reglaget
”Minsta marginal mellan bästa och näst bästa kategorival” (se nedan). Om kryssrutan inte är
markerad, kommer endast den kategorin med bästa poängen att lagras i stämpelkolumnen. Alla
poster som stämplats med mer än en kategori kan sökas fram med hjälp av underkommandot
dupstamp() (se syntaxbeskrivning i Kapitel 11 ”Boolwares sökspråk”).
Använd mina kategoribeskrivningar
Genom att kryssa i denna ruta, anmodar man systemet att använda de kategoriseringsunderlag
som användaren skapat. Om både denna kryssruta och kryssrutan för ”Använd
systemgenererade kategoribeskrivningar” är förkryssade, kommer båda att användas som
underlag vid kategoriseringen.
Använd systemgenererade kategoribeskrivningar
Genom att kryssa i denna ruta, anmodar man systemet att använda de kategoriseringsunderlag
som systemet skapat. Om både denna kryssruta och kryssrutan för ”Använd mina
kategoribeskrivningar” är förkryssade, kommer båda att användas som underlag vid
kategoriseringen.
Ingen grundformning
Då Boolware hanterar termer från de poster som ingår i tabellen och från kategoribeskrivningar
används normalt grundformning. Detta innebär, att varje term ”normaliseras”; alla böjningar och
ändelser för verb, adjektiv och substantiv tas bort så att endast grundformen av termen sparas.
Genom att kryssa i denna ruta, kommer grundformningen sättas ur spel och termer sparas
precis som de ser ut. Detta kan vara mycket användbart, om man använder ”nyckelord”, som
inte skall ”förändras”, för att bygga upp sina egna kategoribeskrivningar.
Både kategoribeskrivningarna och posterna måste genomgå den nya inställningen.
Viktigt: Då man ändrar inställningen ”Ingen grundformning”, är det mycket viktigt att den
aktuella tabellen byggs om i sin helhet.
Genom att trycka på knappen ”Alternativ…” erhålls följande fönster:
46
Markera de kolumner som används för att åtskilja kategorier
De kolumner som kan komma ifråga, när det gäller att åtskilja kategorier, listas i detta fönster.
Innehållet från de markerade kolumnerna kommer att användas vid jämförelse med
kategoriunderlaget för varje kategori för att bestämma kategoritillhörighet för varje post.
Exempel:
I vår tidningsdatabas är det lämpligt att välja kolumnen (Text), som innehåller texten för den
aktuella artikeln.
Minsta marginal mellan bästa och näst bästa kategorival
Detta värde sätts genom att reglaget flyttas. Det värde som väljs används för att varna, då en
post är svår att entydigt kategoribestämma; de framräknade värdena för en eller flera av
kategorierna ligger nära den kategori som får högsta värdet. Den lägsta toleransen för att en
varning skall skrivas ut är 1%, medan högsta inställbara toleransen är 10%. Varningarna skrivs
ut i databasloggen.
Om kryssrutan ”Stämpla flera kategorier” är markerad, kommer samtliga kategorier inom den
angivna toleransen dessutom att sparas i stämpelkolumnen.
Exempel:
I vår tidningsdatabas har marginalen mellan bästa och näst bästa kategorival ställts till 2%.
Under en körning ligger två av de beräknade kategorivärdena endast 1,5% från bästa värdet.
Den bästa kategorin är Inrikes, den näst bästa är Kultur och den tredje bästa (inom 2 %) är
Utrikes. I databasloggen skrivs identifikation för den aktuella posten samt Inrikes, Utrikes och
Kultur. Om kryssrutan ”Stämpla flera kategorier” är markerad, kommer dessutom Inrikes,
Utrikes och Kultur att sparas i stämpelkolumnen.
47
Kategoridominans
Denna inställning används, då man vill skapa nya kategoriseringsfiler ”Skapa nya
kategoriunderlag” (se nedan).
Genom att justera detta reglage anges önskat värde. Kategoridominansen kan anta ett värde
mellan 1,0 och 10,0.
Vilken kategori en term skall tillhöra bestäms genom algoritmer beskrivna nedan (”Körsteg för
automatkategorisering”).
För varje term som inte ignoreras räknas en frekvens ut. Frekvensen baserar sig på i hur många
poster termen förekommer i inom respektive kategori. Frekvensen ensas sedan med avseende
på den kategori som innehåller flest poster.
För att en term skall vara kategoridominant - endast få förekomma för en kategori - skall den
förekomma oftare i en kategori än i någon annan kategori. Hur mycket oftare bestäms av det
värde som sätts i kategoridominansen. Om kategoridominansen sätts till 1,5, måste frekvensen
för den kategorin med högsta frekvensen vara minst 1,5 gånger större än frekvensen för alla
andra kategorier.
Exempel:
I vår tidningsdatabas har kategoridominansen satts till 1,5. En term har följande frekvenser i de
olika kategorierna: Inrikes (10), Utrikes (8), Kultur (4), Ekonomi (2) samt Sport (16). I detta fall
kommer termen att endast finnas med i kategorifilen Sport (envar av frekvenserna i de övriga
kategorierna gånger 1,5 är mindre än 16).
Vektor-reduktion vid kategorisering
Reglaget i detta fönster anger vilka ord som skall ignoreras, då termer skall extraheras för
kategoriseringen. Ju högre värde man väljer dess fler ord kommer att tas med. Om värdet ställs
högt, kommer även många irrelevanta termer tas med, då vanlig text är involverad. Denna
inställning fungerar på samma sätt som reglaget för likhetssökning (se ”Alternativ för Likhet”
tidigare i detta kapitel).
Detta värde är mycket svårt att bestämma, utan måste testas fram. Exempelvis visar det sig att
underlag, som innehåller beskrivande text bestående av ”vanliga” ord ger bästa resultat relevans -, då reglaget befinner sig omkring 5%.
Angivande av synonymfil vid kategorisering
I fönstret ”Inställningar för kategorisering” finns det också möjlighet att ange och redigera en
synonymfil, vilken skall likställa specificerade termer. Denna fil fungerar på samma sätt som
synonymfilen för likhetssökning (se ”Alternativ för Likhet” tidigare i detta kapitel).
Körsteg för automatkategorisering
Som nämnts ovan kategoriseras poster automatiskt vid laddning och uppdatering, om de tre
ovan beskrivna kategorivillkoren är uppfyllda. Det finns dessutom möjlighet, att när som helst
påverka kategoriseringen genom två separata körsteg.
De två separata körstegen som handhar den automatiska kategoriseringen heter ”Kategorisera”
och ”Skapa nya kategoriunderlag”. Båda dessa körsteg aktiveras i Boolware Manager.
48
Kategorisera
”Kategorisera” innebär, att alla poster, som inte har något värde i stämpelkolumnen (NULL)
kommer att få den kategori som systemet beräknar. Om stämpelkolumnen innehåller något
värde, är det detta som kommer att utgöra kategorin för den aktuella posten.
För att kunna utföra automatisk kategorisering så måste kategorifiler finnas samt innehålla data
som är representativt för varje kategori.
Genom att svara ”Ja” på frågan ”Vill du stämpla om alla rader i tabellen?”, kommer samtliga
poster i tabellen att omkategoriseras oavsett värdet i stämpelkolumnen.
Skapa nya kategoriunderlag
För att möjliggöra en automatisk kategorisering måste det finnas ett underlag för
kategoriseringen. Detta underlag sparas i en kategorifil, en fil för varje kategori. Kategorifilen
skall innehålla ”typisk” information för den aktuella kategorin.
Dessa kategorifiler kan skapas ur en befintlig databas genom körsteget ”Skapa nya
kategoriunderlag”. För att kategorifilerna skall bli så relevanta som möjligt, används följande
algoritmer för att välja ut typiska kategoritermer ur den befintliga databasen:
1.
2.
3.
Ignorera vanligt förekommande termer i samtliga kategorier (konjunktioner,
prepositioner etc.). Styrs av reglaget Vektor-reduktion i fönstret ”Inställningar för
kategorisering” (se ovan).
Extrahera kategoridominanta termer. (se sätt Kategoridominans ovan).
En term får förekomma i högst hälften av kategorierna.
Dessa algoritmer innebär att en term kan representera flera kategorier (3.), men en
kategoridominant term finns endast för den kategorin (2.).
Exempel för automatkategorisering i stegform
Nedan följer ett exempel på tillvägagångssätt för att erhålla bäst resultat vid automatisk
kategorisering.
1.
Välj kategorier för den aktuella tabellen.
2.
Skapa relevanta kategoriunderlag för varje kategori.
3.
3.1
3.2
3.3
3.4
3.5
Gör inställningar
Vektor-reduktion för att ignorera ”vanliga” termer.
Grundformning för att ta hand om synonyma termer.
Kategoridominans så att vissa termer endast är aktuella för en kategori.
Tillåta flera kategorier för en post.
Ställa tolerans mellan bästa och näst bästa kategori.
4.
Ladda en del av databasen (några tusen poster)
5.
5.1
5.2
Analysera resultatet manuellt/maskinellt
Använd underkommandot dupstamp() för att se hur många poster som fått en ”osäker”
kategorisering.
Kontrollera om den åsatta kategorin är den bästa.
6.
Gör nödvändiga ändringar
49
6.1
6.2
Ändra kategori i stämpelkolumn (genom att manuellt uppdatera posten i databasen).
Ändra i kategoriunderlag.
7.
Tag fram systemgenererade kategoriunderlag
7.1 Använd Boolware för att söka fram relevanta poster
7.1.1 Likhetssökning kombinerat med relevansjustering kan vara till stor hjälp för att söka fram
och skapa bra kategoriunderlag
7.2 Kör steget ”Skapa nya kategoriunderlag”
8.
8.1
8.2
Kategorisera om
Välj både egna och systemgenererade kategoriunderlag
Kör steget ”Kategorisera”
9.
9.1
Analysera resultatet
Börja om från punkt 5.
Målet är att på ett begränsat material från en liten del av databasen generera bästa möjliga
kategoriunderlag. Detta kategoriunderlag skall sedan användas vid laddning av den totala
databasen.
Nya kategoriunderlag behöver sedan bara skapas, då nya kategorier tillförs eller då gamla
kategorier tas bort ur databasen.
Ett annat skäl att ändra kategoriunderlagen är om många nya uttryck och termer tillkommer för
vissa kategorier; språket utvecklas.
Kort om vyer
En vy är ett slags virtuell tabell. Virtuell i den bemärkelsen att den inte lagras permanent i
databasen, utan snarare skapas varje gång den efterfrågas. En vy består av en SQL Selectfråga som kan kombinera data från en eller flera tabeller
Begränsningar
Vid uppdatering av vyer ska inte ”triggers” användas. Uppdateringen av en vy måste göras
”manuellt”, där man använder en kö-tabell.
Prestanda (att tänka på)
Boolware behöver snabb åtkomst till enskilda rader inom vyn. I vanliga tabeller ordnas detta per
automatik med hjälp av tabellens primärnyckel, men i vyer finns inte samma automatik vilket i
sin tur kan orsaka långsamma prestanda.
Tänk därför på att definiera vyn så att den använder en effektiv kombination av nycklar mot sina
underliggande tabeller, annars går det långsamt att hämta enskilda rader.
Om det tar lång tid att hämta enstaka rader ur vyn, rekommenderas ni att pröva att köra
motsvarande SQL mot datakällan, och att analysera dess ”plan” (vilket sätt den underliggande
databashanteraren använder för att hitta raden). Leta efter ”table scan” och försök att eliminera
dessa genom att lägga på ett eller flera index för tabellen.
Viktigt: ”Triggers” kan inte användas vid uppdatering av vyer.
50
Kapitel 6
Bygga Boolware Index
Detta kapitel beskriver hur man bygger Boolware Index, vilket innebär att index skapas för
samtliga kolumner i alla tabeller i databasen, som markerats för indexering.
Bygga Boolware Index
Om den registrerade datakällan innehåller data, kan man nu bygga Boolware Index genom att
klicka på ”Bygg” i Verktygslisten.
Boolware Index för stora databaser med miljontals rader kan ta lång tid att bygga, men de flesta
databaser går relativt fort. Som alltid är byggtiden beroende av olika faktorer:
•
•
Klockfrekvensen på CPU, hastighet på diskar och tillgängligt internminne.
Vilka indexeringsmetoder som är valda; fler val tar längre tid.
Om databasen existerade tidigare i Boolware (det finns aktuella index), pågår sökverksamheten
på normalt sätt i den existerande databasen under byggandet.
Om byggandet av Boolware Index avslutades, utan några fel, växlas de nya indexen
automatiskt in och ersätter de gamla.
Om det inträffar något fel vid byggandet, används den tidigare versionen av index och ett
felmeddelande talar om, att det ej gick att bygga index korrekt. I databasloggen finns en
detaljbeskrivning på de fel och varningar som inträffat under en bygg av index.
Det finns en möjlighet att automatiskt radera index - för att spara diskutrymme -, innan
byggandet träder i kraft. I detta fall kan ingen sökverksamhet pågå under byggandet och om fel
uppstår finns ingen gammal databas.
Viktigt: Då kategorisering ingår, som en del i byggandet av Boolware Index, får inga
uppdateringar ske i datakällan. Under detta körsteg är mekanismen (”triggers”), som styr
synkroniseringen av Boolware Index avstängd. Då kategoriseringen är genomförd (sista steget i
byggandet av Boolware Index), etablerar Boolware automatiskt mekanismen (skapar ”triggers”),
som styr synkroniseringen.
Direktuppdatering
Då ett Boolware Index är byggt, skall detta inte behöva byggas om vid förändringar i datakällan.
Boolware har stöd för synkroniserad direktuppdatering mellan datakällan och sina index.
Detta innebär, att när det sker uppdateringar i datakällan slår dessa automatiskt igenom i
Boolware Index. Du som administratör behöver inte ingripa för att detta skall hända.
För mer information se avsnittet Synkronisering av Boolware Index i Kapitel 10
51
Kapitel 7
Underhåll av Boolware Index
Detta kapitel beskriver hur man underhåller Boolware Index för att uppnå högsta sök- och
uppdaterings prestanda.
Validera databasen
I dagligt bruk av indexfilerna kan det uppstå mindre problem i indexstrukturerna av diverse olika
orsaker:
•
•
Klientprogram som inte avslutar på ett korrekt sätt.
Skrivfel i minne eller på hårddiskarna skapar i regel felaktigheter i indexfiler såsom brutna
länkar etc.
Boolware Index kan verifieras med avseende på syntax och semantik genom ett speciellt
körsteg; Validering, som kontrollerar alla i indexets ingående filer för en tabell.
Indexfilerna bör valideras:
•
•
•
När en applikation erhåller meddelande att databasen är korrupt eller felaktiga resultat
efter sökning
Regelbundet för att upptäcka förstörda datastrukturer och fel allokerat datautrymme
När det finns en misstanke att index är förstörda.
Det rekommenderas också att validera efter laddning av Boolware Index.
Funktionen Validering finns tillgänglig i Boolware Manager. Efter validering kan man se i
loggfilen för databasen hur det gått. Om felaktigheter har hittats så kommer de 100 först
påträffade felen loggas i denna fil.
Efter en validering kan också varningar erhållas. Varning innebär, att indexet fortfarande är
felfritt och kan användas, men indexeringsmetoderna stämmer inte helt överens med det de
indexeringsmetoder, som angivits i redigering av indexeringsegenskaperna. Detta kan bero på
flera saker, men oftast har något inträffat mellan redigering av indexeringsegenskaperna och
ombyggnad av index. Genom att indexera om de kolumner, som erhållit varningar, kommer
Boolware index att synkroniseras med datakällan.
Under en validering sätts databasen/tabellen i ”readonly” läge, vilket innebär, att
sökverksamheten kan fortgå som vanligt, men eventuella uppdateringar köas.
Reorganisera databasen
Efter en lång tids användning av Boolware Index innefattande många uppdateringar, mister
indexfilerna litet av sin effektivitet, eftersom de blir fragmenterade. Fragmentering innebär det
blir ”luckor” - outnyttjat utrymme - i indexfilerna exempelvis när en terms alla referenser
försvinner helt ur databasen eller att termer flyttas till andra platser i filerna efter en uppdatering.
För att komma till rätta med fragmenterade indexfiler använder man funktionen ”Reorganisera
Index” i Boolware Manager.
Reorganiseringen sker i två steg:
52
•
•
Defragmentera alla filer, återanvänd ”luckor” i indexfilerna.
Ordna indexfiler för optimal åtkomst. Denna funktion tar längre tid än defragmentera.
Defragmenteringsnivån är den snabbaste och används för att återfå förlorat diskutrymme.
Ordna indexfiler är mer krävande och skriver om indexfilerna i sin helhet för att optimera för
optimal sökprestanda.
Under en reorganisation sätts databasen/tabellen i ”readonly” läge, vilket innebär, att
sökverksamheten kan fortgå som vanligt, men eventuella uppdateringar köas.
Denna funktion kan och bör automatiseras; se Kapitel 9 Underhåll av systemet.
53
Kapitel 8
Ta bort Boolware Index
Detta kapitel beskriver hur man avregistrerar Boolware Index för en databas.
Avregistrera Boolware Index
Markera databas i Boolware Manager för vilken Boolware Index ska avregistreras och tryck på
minus knappen ”-” i verktygslisten.
OBS! Se till att aktuell datakälla är startad och åtkomlig för Boolware vid avregistrering av
Boolware Index.
Följ instruktionen, som ges i Boolware Manager.
I Boolware Manager Hjälp (Avregistrera en databas) beskrivs i detalj vad som skall göras.
Viktigt: ingenting kommer att tas bort från datakällan kopplad till Boolware Index, förutom
”triggers” som Boolware har lagt till. Det är enbart Boolware Index som kommer att tas bort.
54
Kapitel 9
Underhåll av Boolware
Detta kapitel beskriver hur man underhåller Boolware systemet. Ämnen som berörs är: filer,
filsystem, starta och stopp av Boolware, konfigurering av Boolware, handhavande av temporära
filer, kopplingar mot klienten, hantering av loggfiler, automatiskt underhåll av Boolware Index
och schemaläggning, övervakning, stegvis laddning av Boolware Index för en databas samt
felsökning.
Indexfiler
Boolware Index lagras i en separat katalog per Tabell och består av filer med följande suffix:
.dsc filen
beskrivningsfil för en Tabell, en för varje Tabell i datakällan. Filen innehåller vald
indexeringsmetod för varje kolumn i Tabellen.
.tab filen
en för varje Tabell i datakällan. Filen innehåller koppling mellan Boolware index
och datakällan.
.idx filen
en för varje Kolumn. Filen innehåller samtliga unika söktermer.
.ref filen
en för varje Kolumn. Filen innehåller referenser till poster i datakällan för varje
sökterm.
.pxw filen en för varje Kolumn. Filen innehåller ordpositioner för samtliga söktermer i alla
poster i datakällan.
.rnk filen
en för varje Kolumn. Filen innehåller rankningsinformation för varje sökterm i
samtliga poster i datakällan.
.rnk2 filen en för varje Kolumn. Filen innehåller rankningsinformation för samtliga poster i
datakällan.
.vsm filen en för varje Tabell. Filen innehåller likhetsinformation för varje post i datakällan.
.data filen en för varje Tabell i datakällan. Filen innehåller text från specificerade kolumner,
vilka används vid snabbvisning av information. Behöver ej gå via datakällan för att
erhålla text.
Namngivning av ingående filer
Boolware indexfiler namnges med kolumnnamnet, som fås från datakällan. Vissa bokstäver är
dock ej tillåtna i filnamn. Dessa bokstäver ersätts med understrykningstecken (_).
Filerna DSC, TAB, DATA och VSM, vilka gäller för hela tabellen, använder enbart namnet på
tabellen från datakällan.
Filerna DSC och TAB måste alltid finnas, medan VSM endast finns, om likhetssökning är aktiv.
DATA innehåller information från några eller alla kolumner för snabb visning av kolumndata.
Filerna IDX, REF, PXW och RNK får namnet från kolumnen. Dessa filer innehåller index för
varje indexerad kolumn.
Två av dessa filer är obligatoriska: IDX och REF. De andra filerna PXW och RNK finns endast
om indexeringsmetoderna närord och rankning är satta för aktuell kolumn.
Primärnyckel sparas i ett speciellt index $PK och består endast av de obligatoriska filerna IDX
och REF.
Om Fritextsökning är valt, skapas även filerna $FREETEXT.idx och $FREETEXT.ref.
55
Om Likhet är valt, skapas även filerna $VSM.idx och $VSM.ref.
Om Kategorisering är valt, skapas även filerna $CATEGORY.idx och $CATEGORY.ref.
Köra Boolware Index Server som en service
Vid installationen av Boolware skapas och registreras en service.
Starta och stoppa en service
Om Boolware körs på en Windows server kan denna service startas och stoppas med hjälp av
Tjänstehanteraren i Windows.
För Linux gäller att, förutsatt att man har behörighet, så startar och stoppar man Boolware
genom att använda de shell-script som skapas under installationen.
Ex.
/etc/init.d/boolware start
/etc/init.d/boolware stop
Man kan inte använda Boolware Manager för att starta/stoppa Boolware.
Hantera sessioner kopplade mot Boolware Index Server
I fliken ”Sessioner” i Boolware Manager, kan man se alla anslutna användare.
Följande uppgifter finns om varje uppkopplad klient: Namn på användaren, vilken datakälla som
används, nätverksadress, typ av uppkoppling mot Boolware, den tid som sessionen varit inaktiv,
den tid som användaren just nu är aktiv samt det kommando som användaren just nu utför.
Man kan logga av användare genom att markera dem och sedan välja högerklicksalternativet
”Logga av”.
Dessutom kan man i detta fönster skicka meddelande till markerade eller samtliga uppkopplade
användare genom att använda högerklicksalternativet Meddelande. Meddelandet skickas med
hjälp av Windows-kommandot ”net send” till det IP-nummer som rapporteras av Boolware.
Konfigurering
För att konfigurera Boolware systemet väljer du i Boolware Manager huvudmeny alternativen
”Inställningar / Konfigurering”.
Följ instruktionen, som ges i Boolware Manager.
I Boolware Manager Hjälp (Konfigurera server) beskrivs i detalj vad som skall göras.
56
Övervakning av prestanda
Välj fliken ”Prestanda” i Boolware Manager för att visa prestandainformation.
För de vanligaste och mest tidskrävande funktionerna i systemet mäts tiden kontinuerligt.
Genom att använda funktionen ”Prestanda”, finns det möjlighet att bilda sig en uppfattning om
eventuella flaskhalsar. Funktionen kan också användas för att mäta kapaciteten hos Boolware
tillsammans med den hårdvara som finns i datorn.
Funktionen är tänkt att användas för att mäta aktiviteten i systemet under ett visst tidsintervall.
Detta åstadkommes i högerklicks menyn genom att nollställa (”Nollställ”) alla variabla värden
och därefter avläsa de uppmätta värdena. Avläsningen kan ske explicit genom att trycka på
knappen ”Uppdatera” eller implicit genom att aktivera ”Uppdatera automatiskt” vilken avläser
värden varje sekund. De olika värden som kan avläsas gäller för den tid som ses i ”Mättid”.
Förklaring till de olika värdena finns i Boolware Manager Hjälp (Boolware server prestanda).
Server-logg
Genom ”Visa / Server-logg” kan man följa vad som inträffat i Boolware.
I denna loggfil kan man välja vilka diagnostiska meddelanden som skall skrivas genom att välja
loggningsnivå i ”Inställningar / Konfigurering...”.
Inställningar för denna fil beskrivs utförligt i Kapitel 10 Inställningar och direktuppdatering.
Indexeringshistorik
Genom ”Visa / Indexeringshistorik” kan man se aktuell historik från: Load, Validate, Optimize,
Reindex etc.
Följande information sparas: Datum, Datakälla, Åtgärd samt Meddelande, där man ser den tid
den aktuella åtgärden tagit.
Inställningar för denna fil beskrivs utförligt i Kapitel 10 Inställningar och direktuppdatering.
Server-tillägg…
Genom att välja menyalternativet ”Visa / Server-tillägg…” kan man se vilka tilläggsprogram
Boolware server laddat. Typiska tilläggsprogram är adaptrar för olika datakällor,
indexeringstillägg etc.
Automatiskt underhåll av Boolware index
Boolware schemaläggare
Använd Boolwares schemaläggare för att automatisera driften av Boolware.
Ett flertal funktioner i Boolware kan schemaläggas för att på så sätt förenkla och säkerställa
driften.
57
I Boolware Manager Hjälp (Schemaläggare) ges en detaljerad beskrivning av vad som kan
schemaläggas.
Boolware Manager kommandoradsprogram (bwc)
Ett speciellt program ”bwc” kan tolka parametrar specificerade på kommandoraden.
Parametrarna kan användas till att aktivera funktioner i Boolware.
I Boolware Manager Hjälp (bwc) ges en detaljerad beskrivning av vad som kan utföras via detta
program.
Stegvis laddning av Boolware index
I vissa fall kan det vara lämpligt att bygga Boolware Index stegvis. Detta innebär att varje steg,
som ingår i byggandet av ett index, körs i ett separat steg.
De steg som ingår i byggandet av ett Boolware Index är: Ordutplock, Sortering, Bygg index
samt Kalkylera vektorer.
Ytterligare några funktioner kan köras från denna meny: Replikera, Bygg duplikatregler,
Relationsexekveringsplan, Kategorisera samt Skapa nya kategoriunderlag.
Funktionerna används via menyalternativet ”Stegkörning” som återfinns i Boolware Managers
startfönsters högerklicksmeny.
Ordutplock
Samtliga poster ur den valda databasen läses från datakällan och alla ord extraheras ur dessa
poster. Vilka tabeller och vilka kolumner som skall hanteras framgår av de inställningar man
gjort för den valda databasen och dess tabeller.
Fininställningen av indexeringsmetoder bestämmer vilka indextermer som skall skapas för varje
extraherat ord. Observera att ett ord kan ha flera indexeringsmetoder och alltså förekomma som
flera indextermer.
Kolumntillhörighet åsätts varje indexterm.
Sortering
De skapade indextermerna sorteras i vald sorteringsordning. Observera att det går att ställa om
sorteringsordningen för Index; se avsnittet Listor och tabeller i Kapitel 10
Generera index
De sorterade indextermerna läses och används för att bygga Boolware Index. Beroende på
valda indexeringsmetoder skapas olika antal filer för de olika kolumnerna.
Filerna *.idx och *.ref måste alltid finnas (se början detta kapitel under Indexfiler).
58
Om indexeringsmetoden Närord valts, skapas även filen *.pxw.
Om indexeringsmetoden Rankning valts, skapas filen *.rnk. Om båda dessa
indexeringsmetoder är valda för en kolumn skapas endast filen *.pxw.
Kalkylera vektorer
Om någon kolumn är indexerad för Likhet, kommer detta steg att köras. Posterna läses från
datakällan och de ord, som ingår i kolumner vars indexeringsmetod är Likhet extraheras. Dessa
ord används sedan för att skapa en likhetsvektor för varje post. Alla likhetsvektorer för tabellen
sparas i filen tabellnamn.vsm.
Replikera
Om man kör Boolware i ett speglat Boolware kluster, kan man från Masternoden när som helst
replikera Boolware index för den aktuella Databasen eller den aktuella Tabellen till samtliga i
klustret ingående söknoder.
Bygg duplikatregler
Skapar filer med utgångspunkt från de duplikatregler som har angivits för denna tabell. De
skapade filerna används vid sökning, då man med hjälp av underkommandot dupeliminate kan
slå bort duplikat.
Relationsexekveringsplan
Om det finns en eller flera etablerade relationer i en databas, som är markerade för optimerad
relationssökning (join), kan man skapa dem här. Om man har valt en databas, kommer samtliga
markerade relationer i den databasen att exekveras (skapas på nytt). Om man har valt en tabell,
kommer samtliga markerade relationer i den tabellen att exekveras (skapas på nytt). Vid
laddning av en databas/tabell, som har markerade relationer, kommer de optimerade
relationsfilerna skapas på nytt. De optimerade relationsfilerna uppdateras vid en
direktuppdatering av en ingående tabell och optimeras, då databasen/tabellen optimeras.
Viktigt: För att det skall vara möjligt att skapa en optimerad relationsfil, måste de i relationen
ingående kolumnerna vara indexerade.
Kategorisera
Kategoriserar posterna i den valda tabellen enligt de inställningar som finns för tillfället.
Kategoriseringen påverkas normalt vid laddning, men kan på detta sätt köras utan att man
laddar om tabellen. Se Kapitel 5. ”Redigera Indexeringsegenskaper” avsnitt
”Automatkategorisering” för att få en bättre förståelse för denna funktion.
Skapa nya kategoriunderlag
Skapar nya kategoriunderlag. Om man har gjort förändringar i de befintliga underlagen och vill
att de skall gälla från och med nu. Se Kapitel 5. ”Redigera Indexeringsegenskaper” avsnitt
”Automatkategorisering” för att få en bättre förståelse för denna funktion.
59
Larma Boolware manager
Problem kan uppstå i Boolware - som i alla programvaror - både under normal och onormal
användning. Till exempel kan diskutrymmet på den dator, där Boolware Index Server körs ta
slut. En annan orsak kan vara att Boolware har otillräckliga rättigheter.
Oavsett orsaken, är det viktigt, att den som ansvarar för Boolware Index Server måste
uppmärksammas på problemet omedelbart för att ha möjlighet att åtgärda felet. Detta är
speciellt viktigt, då Boolware Index Server används i en kritisk applikation.
I Boolware Index Server finns möjlighet att uppmärksamma en eller flera personer, då det
uppstår problem, som stör verksamheten. Vid installation av Boolware kan man ange ett
operativsystemkommando, som skall aktiveras, då problem uppstår. Det går att ändra detta
kommando i Boolware Manager från verktygsmenyn; Inställningar / Konfigurering….
Detta innebär att det lämnas full frihet att bestämma vilka som skall uppmärksammas och på
vilket sätt detta skall ske.
Boolware aktiverar det specificerade kommandot och bifogar det aktuella felmeddelandet från
Boolware. Antag att det specificerade kommandot är ”net send olle” och felmeddelandet är:
”Diskutrymmet slut”, så kommer Boolware Index Server att exekvera följande kommando:
net send olle ”Diskutrymmet slut.”
Om mer avancerad utsändning av meddelande krävs, går det att ange fler kommandon i en
“.bat-fil” istället. Självklart går det att ange namnet på ett eget-skrivet program, vilket anropas av
Boolware.
Felsökning, nätverksuppkopplingar
Denna del beskriver eventuella problem i samband med uppkopplingar mellan klient(er) och
Boolware Index Server. Om problem uppstår vid uppkoppling, följ nedanstående anvisningar för
att bestämma orsaken till problemet.
Uppkoppling nekas
Om klienten misslyckas med att få kontakt med servern eller om Boolware Index Server inte
svarar, erhålls felet “Åtkomst nekas”. Nedan finns en lathund, som kan användas för att
bestämma orsaken till felet.
Finns det en fysisk fungerande nätverkskoppling mellan klienten och Boolware?
Man kan enkelt kontrollera, om klienten inte kan nå Boolware p.g.a. felkonfigurerad
nätverkskoppling eller om det inte finns någon fysisk kontakt mellan klienten och Boolware
Index Server genom att använda kommandot ping. Kommandosyntax är:
ping servernamn
Felmeddelanden från kommandot ping indikerar att det är nätverksproblem. Kontrollera att
nätverkssladden sitter kopplad till avsedd kontakt och att kablar inte är skadade.
60
Om nätverkskopplingen från servern till klienten fungerar, kan man utesluta att
nätverkskopplingen är felaktigt konfigurerad.
Kan klienten erhålla serverns värd-namn?
Boolware klienter kan ange servernamn antingen med namn eller som IP-adress. Om namn
används av klienten, måste klienten kunna erhålla namnet på servern. För TCP/IP görs detta
antingen med en värd-fil på klienten för översättning av värd-namn till IP-adress eller att klienten
ber en DNS-server att översätta värd-namnet till en IP-adress.
Är Boolware placerad bakom en brandvägg?
Om Boolware Index Server är placerad bakom en brandvägg, kan all nätverkstrafik vara
förhindrad, vilket innebär att klienten inte kan nå Boolware Index Server överhuvud taget. En
brandvägg tillåter eller förhindrar klientens tillgänglighet till ett portnummer på servern. Om en
brandvägg skiljer klienten och servern åt, kan inte klienten ta kontakt med servern.
Lyssnar Boolware på porten?
Om inte programmet SoftboolSrv.exe (Boolware Index Server) är startat på servern, kommer
det inte något svar tillbaka till klienten som försöker ta kontakt med Boolware på port 7008.
Starta Boolware. Kontrollera givet portnumret i Boolware Manager, menyalternativ Inställningar /
Konfigurering.
Åtkomst nekas
Har Boolware åtkomst till Boolware Index?
Boolware Index Server-processen måste ha tillgång att läsa och skriva sina Boolware Index på
operativsystemsnivå. Kontrollera att rätt behörighet finns för den angivna användaridentiteten
på Boolware Index Server-processen.
Har Boolware behörighet att skapa filer i Boolware Index katalogen?
Processen SoftboolSrv måste ha skrivbehörighet i hemkatalogen för SoftboolSrv (skönsvärde
C:\Program\Softbool under Windows). Servern måste även ha skrivrättigheter för temporära filer
och loggfiler.
Support, skicka felrapport
För att förenkla och snabba upp supportfrågor finns ett menyalternativ i Manager – Hjälp /
Skapa supportrapport… Detta kommando sammanställer information om versioner, loggfiler etc.
som oftast är det första som Softbool frågar efter för att kunna hjälpa till.
En dialog visas, där administratören av Boolware kan välja vilken information som ska skickas:
•
•
•
•
Serverinställningar
Serverloggar
Databaslogg
Berörda databastabeller
61
•
•
Indexeringsinställningar
Övriga inställningar
Boolware sammanställer den valda informationen i en arkiverad zip-fil som sedan skickas över
till Boolware Manager, så att operatören kan skicka den via t ex e-mail.
OBS! Arkiveringsfunktionen kräver att det finns ett zip-program installerat på servern.
62
Kapitel 10
Inställningar och direktuppdatering
Detta kapitel beskriver hur man konfigurerar och fininställer systemet för god prestanda. Ämnen
som berörs är: listor och tabeller, synonymer och tesaurus, grundformning, stoppord,
temporärfiler, loggfiler, språk, synkronisering av Boolware index, prestanda och handhavande,
datakällor och adapters.
Listor och Tabeller
För att justera indexeringsmöjligheterna ytterligare beroende på språk och datainnehåll,
erbjuder Boolware stöd för olika typer av listor och tabeller för olika inställningar.
Tabeller som specificerar: hur en sökterm ska se ut, vad som utgör en sökterm och i vilken
ordning söktermerna skall presenteras i indexlistan. Dessa tabeller är: Neutralisering, Fonetisk
neutralisering, Sorteringsordning och Ordformning. Dessa tabeller går att redigera via Boolware
Manager Inställningar/Teckenstandard. Var och en av dessa tabeller finns under en egen flik.
Redigeringen i de olika tabeller sker tecken för tecken, där man talar om hur det aktuella tecknet
skall tolkas. Detta förfarande kallas att man ”mappar” ett tecken till ett annat tecken.
För att enklare beskriva hanteringen av ovanstående tabeller används ANSI, där varje tecken
har ett värde mellan 0 - 255; exempelvis representeras A av 65, siffran 0 av 48 och
specialtecknet ; av 58. Sedan version 2.4 hanterar Boolware också UTF8, vilket beskrivs i
kapitel 12 ”UNICODE”.
Neutralisering
Neutraliseringstabellen används för att tala om för Boolware hur ett tecken skall lagras i
Boolware index. Med hjälp av denna tabell kan man likställa stora och små bokstäver, när
sökning sker. Bokstäver med accenttecken kan även dessa neutraliseras till bokstäver utan
accenttecken. Skönsinställningen är att alla gemener tolkas som versaler, vilket innebär att
samma svar erhålls oberoende på sökordets skiftläge. Exempelvis: FIND Kalle, FIND KALLE,
FIND kalle och FIND KaLlE kommer att ge samma svar, eftersom sökorden kommer att tolkas
på samma sätt KALLE. Genom att sätta alla gemener som gemener kan man få Boolware att
skilja mellan sökord skrivna med versaler och gemener (skiftkänslig sökning).
Fonetisk neutralisering
Fonetiseringstabellen används på samma sätt som neutraliseringstabellen, men neutraliserar
beroende på uttalet av tecknet.
Sorteringsordning
För att presentera indextermerna i önskad ordning, kan även sorteringsordningen justeras via
Sorteringstabellen. I rena textkolumner kan det - vid presentation av index - vara viktigt att se
termer, vilka inleds med en bokstav, före termer, vilka inleds med siffror och specialtecken. För
att åstadkomma detta ”mappar” man siffror och specialtecken till tecken, som har högre värde
än bokstäver. Skönsinställningen är exempelvis att siffror ”mappats” på följande vis: 0 (48) till
236, 1 (49) till 237 osv. Specialtecken har också ”mappats” efter bokstäver: & (38) till 254, / (47)
till 247 m.fl. Ändring av sorteringsordning påverkar inte sökningen, utan endast den ordning
indexorden presenteras.
Ordformning
Ordformningstabellen används för att avgöra vad som ska utgöra en sökterm. Varje tecken
tillhör en av följande ”kategorier”: 1) Bokstav, 2) Siffra, 3) Behåll mellan siffror; bryt annars, 4)
Behåll mellan siffror och bokstäver; bryt annars, 5) Bryttecken, 6) Ignoreras, 7) Behåll mellan
siffror; ignorera annars, 8) Behåll mellan siffror och bokstäver; ignorera annars samt 9) ignorera
mellan siffror bryt annars.
63
1 och 2 innebär, att tecknet ingår i en sökterm. 5 innebär, att tecknet avslutar en sökterm
(typiska tecken är blank och tab). 6 innebär, att tecknet skall ignoreras (tänkbart tecken kan
vara bindestreck (-)). Övriga 3, 4, 7, 8 och 9 är villkorliga tecken, vilka skall ingå, ignoreras eller
bryta sökordet beroende på om de står mellan bokstäver och/eller siffror; exempel på sådana
tecken är: punkt (.), komma (,), kolon (:), snedstreck (/) etc. Detta innebär, att det finns möjlighet
att styra vilka tecken som skall ingå i ett sökord.
Alla dessa tabeller har en skönsinställning, som är den mest vanliga, så förmodligen behöver de
inte redigeras överhuvudtaget.
Vid manipulering av dessa tabeller är det bekvämt att använda den inbyggda testindexeringen i
Boolware för att se att ändringarna givit önskat resultat. Se Kapitel 5 avsnitt ”Redigera
indexeringsegenskaperna för en tabell/vy”.
Omfånget för den levererade uppsättningen tabeller är hela Boolware systemet. Med hjälp av
Boolware Manager kan man sedan modifiera dessa tabeller på: databasnivå, tabellnivå och
kolumnnivå.
Viktigt: I Boolwares sökspråk har vissa tecken, som kan vara en del av en sökterm, en speciell
betydelse. Nedan följer de tecken, som skall användas med försiktighet, då man anger vilka
tecken som får bilda en sökterm.
Blanktecknet är en avskiljare mellan kommandon, termer, underkommandon och operatorer och
skall hanteras med största försiktighet.
*
används för att ersätta 0-126 bytes med vilka tecken som helst (trunkering)
?
används för att ersätta 1 tecken med vilket tecken som helst (trunkering)
!
används för att ersätta 1 tecken med vilken bokstav som helst (trunkering)
#
används för att ersätta 1 tecken med vilken siffra som helst (trunkering)
.
används i slutet av en term för att upphäva en automatisk trunkering (exakt
sökning)
:
används för att skilja kolumnnamn från sökterm
”
används för att markera strängsökning
#
används för att identifiera argument i numerisk likhetssökning
$
används för att identifiera argument i numerisk likhetssökning
(
används för start av parentesuttryck vid sökning
..
används för att markera ett slutet intervall
<[=] används för att markera ett öppet intervall
>[=] används för att markera ett öppet intervall
Viktigt: Om dessa tabeller har redigerats måste berörda Boolware Index laddas om för att
uppnå önskat resultat.
Samtliga registrerade datakällor sparas i filen sysfile.ini, vilken skall finnas i den katalog där
Boolware är installerad.
I filen SoftboolSrv.ini sparas information om hur Boolware är konfigurerad. Denna fil måste
också ligga i den katalog, där Boolware är installerad.
Viktigt: Om någon av ovanstående två konfigurationsfiler: sysfile.ini och SoftboolSrv.ini
redigeras utanför Boolware Manager, är det ytterst viktigt att de sparas i ISO-8859-1.
Synonymer och Tesaurus
Vid interaktiv sökning används termer, fraser eller kombinationer av dessa för att specificera
önskade kriterier. Ett sätt att göra detta är att skriva termerna med operatorn ’OR’ emellan, men
detta kan vara vanskligt, eftersom det kan vara svårt att veta vilket vokabulär, som använts då
texten skapades.
64
Ett bättre sätt är att ange en synonymfil, som innehåller alla synonymer och då behöver man
endast skriva en term och låta Boolware söka efter termer med samma innebörd automatiskt via
synonymfilen.
Två olika filer används för att specificera vilka termer som hör ihop: synonyms.xx och
thesaurus.xx. Suffixet xx ska ersättas med en två tecken lång landskod; en för engelska, sv för
svenska etc. I synonymfilen, synonyms.xx, är synonymerna lagrade, medan filen thesaurus.xx
innehåller både synonymer och dess barn.
Som tidigare nämnts påverkas inte indexfilerna av ändringar i dessa filer, man specificerar
endast i frågan - med hjälp av ett underkommando -, att synonymer eller tesaurus ska
användas.
Utseendet på en synonymfil och en tesaurusfil ses i Boolware Manager, då man tar upp den för
redigering.
Synonymfilen har en enkel syntax:
huvudsynonym(synonym1, synonym2, synonym3, … synonymN)
Det finns ingen begränsning på antalet synonymer eller huvudsynonymer.
Man skall vara noga med att inte ange samma synonym för flera huvudsynonymer. Man skall
inte heller ha dubbletter för huvudsynonymer.
Både huvudsynonymen och synonymerna kan bestå av mer än ett ord:
upplands väsby(upplandsväsby, upplands-väsby)
saltsjööboo(saltsjö boo, saltsjö-boo)
Vid sökningen måste man skriva synonymer, som består av mer än ett ord inom citattecken:
FIND text:syn("saltsjöö boo")
Viktigt: Dessa filer kan redigeras: infoga nya termer, tag bort gamla termer eller ändra befintliga
termer utan att Boolware Index behöver laddas om. Alla nya sessioner som startar efter denna
ändring kommer att använde den nya versionen av dessa filer.
Grundformning
Ett annat sätt för Boolware Index Server att söka termer är att använda
grundformningsfunktionen. Denna funktion skiljer sig från synonymer och tesaurus genom att
den påverkar index.
Grundformning indexerar enbart ordstammen av en term vilket gör att termer som: kort, kortare,
kortast indexeras som samma term nämligen kort.
De flesta termer följer normala grundformningsregler och får automatiskt sin grundform, men
självklart finns det undantag: t.ex. gå, gick, gått. Dessa tas om hand av grundformningsfilen
stemming.xx.
Eftersom grundformning är språkberoende finns en uppsättning för varje språk; suffixet xx ska
ersättas med en två tecken lång landskod; en för engelska, sv för svenska etc.
Viktigt: Redigering av denna fil innebär att Boolware Index måste laddas om.
65
Stoppord
Filen noise.xx innehåller alla ord som ska betraktas som stoppord och inte tas med i Boolware
Index. Ofta förekommande ord, som egentligen inte har någon innebörd för innehållet, kan
specificeras i denna fil. Typiska sådana ord kan vara: prepositioner, konjunktioner, räkneord etc.
Användningen av stoppord har begränsad effekt på söktider och storleken på indexfilerna.
Naturligtvis finns det inget sätt att söka på någon term som ingår i noise.xx, vilket kanske kan
vara en nackdel.
Eftersom stoppord är språkberoende finns en uppsättning för varje språk; suffixet xx ska
ersättas med en två tecken lång landskod; en för engelska, sv för svenska etc.
Viktigt: Efter att filen noise.xx har redigerats bör Boolware Index laddas om.
Inställning av temporära filer
Under användandet av Boolware skapas ett antal temporära filer: sorteringsfiler, sökordsfiler,
historikfiler, filer för rankningsresultat, loggfiler etc.
Dessa temporära filer har olika livslängd och är av mycket varierande storlek. Eftersom speciellt
sorteringsfilerna kan bli mycket stora, är det viktigt att dessa filer placeras i en katalog, som har
mycket fritt diskutrymme.
I Boolware Manager kan man i ”Inställningar / Konfigurering” specificera lämplig katalog. Om
ingen katalog specificeras här, använder Boolware den katalog som angetts i systemets TMP
eller TEMP variabel.
Inställning av loggfiler
I filen SoftboolSrv.log, vilken finns i samma katalog som Boolware Index Server, skrivs
meddelandehistorik som rör alla kopplade databaser i systemet: laddning, optimering, validering
etc. Med hjälp av denna fil kan man följa vad som skett mot de kopplade databaserna.
Diagnostiska meddelanden för varje session, som skapas under användandet av Boolware,
sparas i en system loggfil, vilken gäller för en dag. Varje dag skapas en ny loggfil, vilket gör att
dessa filer bör tas bort med jämna intervaller. Filerna lagras i en katalog, vilken kan specificeras
med hjälp av Boolware Manager: ”Inställningar / Konfigurering...” under ”Katalog för Loggfiler”.
Om ingen katalog specificeras här, använder Boolware Index Server den katalog som angetts i
systemets TMP eller TEMP variabel. Dessa loggfiler namnsätts enligt följande: ååååmmdd.log
och följaktligen kommer loggfilen för den 20 januari 2002 att heta: 20020120.log.
Under ” Inställningar / Konfigurering...” går det också att ställa in nivån på de meddelanden, som
skall skrivas till denna fil.
Installerat operativsystem innehåller ofta en “Event Viewer” applikation som loggar många
varningar och meddelanden som hänför sig till problem i operativsystemet: minnesfel, I/O fel
och nätverksfel. Flera av dessa fel kan påverka stabiliteten i Boolware Index Server.
Språkinställning
Boolware Manager understöder två dialog-språk: engelska och svenska. Under ” Inställningar /
Språk...” går det att ställa om till önskat språk. Denna språkinställning gäller endast dialogen i
66
Boolware Manager: alla hjälptexter, menyer, knappar, fönster rubriker etc. skrivs på det valda
språket.
En annan språkinställning finns, som gäller tabeller. I detta fall är det innehållet i tabellerna, som
påverkas: stoppordsfil, synonymfil, tesuarusfil, grundformningsfil och fonetiseringsfil. Detta
beskrivs i Kapitel 5 Redigera indexegenskaper för en tabell/vy.
Synkronisering av Boolware Index
Boolware använder sig av “triggers” i DBMS för att synkronisera Boolware index. Alla DBMS
som stödjer “triggers” för INSERT, UPDATE och DELETE kan använda sig av Boolwares
direktuppdatering. Genom en ”User Defined Function”, vilken måste registreras i DBMS, blir
Boolware uppmärksammad på att en förändring skett i datakällan.
Viktigt: Kommunikationen mellan Boolware och datakällan sker genom en UDF på port 8008.
Viktigt: Då man kategoriserar om en databas - körsteget Kategorisera -, får inga uppdateringar
ske i datakällan. Under detta körsteg är mekanismen (”triggers”), som styr synkroniseringen av
Boolware Index avstängd. Detta innebär, att alla uppdateringar, som ännu ej har uppdaterat
aktuell tabell skall köras, innan kategoriseringen startas. Då kategoriseringen är genomförd,
etablerar Boolware automatiskt mekanismen (skapar ”triggers”), som styr synkroniseringen.
Olika DBMS (datakällor)
De flesta datakällor har stöd för “triggers” på litet olika sätt. Detta innebär, att ”triggers” kan se
litet olika ut beroende på datakällan, men de har samma syfte; att uppmärksamma Boolware på
att en förändring skett i datakällan. För att en fullständig synkronisering skall vara möjlig, måste
Boolware få en signal att en förändring skett samt få den gamla och nya lydelsen på den
ändrade informationen.
Detta görs genom en s.k. “User Defined Function” som innehåller följande parametrar:
<srv><table><reserved><type>[<mask>]
där:
<srv>
<table>
<reserved>
<type>
<mask>
namnet på den server, där Boolware Index Server finns
det kompletta namnet på tabellen
reserverad för framtida bruk
typ av ändring; ”I” för tillägg, ”U” för uppdatering och ”D” för borttag
bitmask som talar om vilka kolumner som berörs vid UPPDATERING.
Så här fungerar Boolware “triggers”
Som tidigare påtalats används “triggers” för att hålla Boolware Index synkroniserade med
datakällan. Definitionen på en ”trigger” är:
En procedur, som exekverar, då data i en angiven tabell modifieras i datakällan. ”Triggers”
skapas ofta för att se till att data i en tabell, som relaterar till data i andra tabeller, påverkar alla
tabeller den hänvisar till vid en förändring.
Trigger händelser
67
Närhelst datakällan modifieras - som ett resultat av en av händelserna INSERT, UPDATE eller
DELETE - kommer tabellens ”trigger” att aktiveras. Denna “trigger” innehåller kod, som
Boolware Manager genererar, då man kopplar en tabell mot Boolware. ”Triggern”
uppmärksammar Boolware, då någon förändring sker i den aktuella tabellen.
Beroende på typen av förändring, INSERT, UPDATE eller DELETE, sänds olika parametrar till
“User Defined Function”.
Namnen på den triggerkod som genereras av Boolware beror på tabell och händelse. Namnsättningen följer följande standard: <tabellnamn>_tr_ins, <tabellnamn>_tr_del och
<tabellnamn>_tr_upd för händelserna INSERT, DELETE och UPDATE.
Triggerkoden skapas av Boolware, då en tabell aktiveras. För att ha möjlighet att ta hand om
ändringarna från datakällan, skapar Boolware en Data Capture Table samtidigt med att
triggerkoden skapas. Namnet på Data Capture Table är: <tabellnamn>_Q.
Då en tabell deaktiveras, tas de triggerkoder som Boolware skapat (<tabellnamn>_tr_ins,
<tabellnamn>_tr_del och <tabellnamn>_tr_upd) bort tillsammans med Data Capture Table
(<tabellnamn>_Q).
Synkronisering då DBMS saknar stöd för ”triggers”
Då den aktuella datakällan saknar inbyggt stöd för ”triggers”, är det möjligt att via
användarapplikationen ”simulera” denna funktion.
Det som fordras för att Boolware skall ha möjlighet att synkronisera index med datakällan är:
1. en signal som talar om att en förändring skett i datakällan
2. den gamla och nya lydelsen för den ändrade raden. Den gamla och nya lydelsen skall lagras
i en speciell tabell med namnet: tabellnamn_Q, där tabellnamn är namnet på den aktuella
tabellen.
Denna tabell, tabellnamn_Q, innehåller exakt samma kolumner som den aktuella tabellen med
ett tillägg av två kolumner: UPD$TYPE och UPD$SEQ. Typen för de två extrakolumnerna är:
char (1) respektive integer.
UPD$TYPE skall innehålla typen av uppdatering (tillägg/borttag/ändring) och UPD$SEQ skall
innehålla ett sekvensnummer. Det är mycket viktigt att tabellnamnet, är korrekt angivet och att
de två extra kolumnerna skrivs exakt som angivits ovan (versaler).
De kolumner som ingår i den aktuella tabellen skall överföras till tabellnamn_Q och varje rad
måste förses med information i de två extrakolumnerna. De uppdateringstyper som kan
förekomma i kolumnen UPD$TYPE är: ’I’, ’D’, ’N’ och ’O’. ’I’ (insert) används för rader som
läggs till, ’D’ (delete) används för rader som skall tas bort och ’N’ (new) används för nya
lydelsen i en ändrad rad, medan ’O’ (old) används för den gamla lydelsen i en ändrad rad.
Den andra extrakolumnen, UPD$SEQ, skall vara ett unikt sekvensnummer, som måste finnas
för alla rader som överförs till tabellen tabellnamn_Q. Detta sekvensnummer måste vara unikt
för varje rad. Dessutom skall en rad som uppdateras efter en annan rad i datakällan ha ett
högre sekvensnummer än den tidigare uppdaterade raden. Detta är viktigt, då samma rad i
datakällan kan uppdateras flera gånger innan uppdateringen i Boolware äger rum. Det är också
viktigt vid en ändring - då både den nya och gamla lydelsen skall överföras till tabellen
tabellnamn_Q -, att raden med UPD$TYPE ’N’ kommer omedelbart före raden UPD$TYPE ’O’;
UPD$TYPE ’N’ skall alltså ha ett lägre sekvensnummer än motsvarande UPD$TYPE ’O’.
Viktigt: Det är mycket viktigt, att sekvensnumren (UPD$SEQ) för UPD$TYPE ’N’ och
motsvarande UPD$TYPE ’O’ kommer direkt efter varandra; ingen annan transaktions sekvensnummer (UPD$SEQ) får komma mellan dem.
68
För att signalera till Boolware, att en förändring har skett i datakällan, är det lämpligt att använda
programmet ”bwc”, vilket beskrivs i detalj i Kapitel 9 ”Underhåll av systemet”. Det är med hjälp
av aktionen ”status” man styr, när en uppdatering av Boolware index skall äga rum.
Exempel:
Tidningsdatabasen som används i de flesta exemplen innehåller en tabell ”artiklar”, vilken
består av följande kolumner: Artikel nr, Tidskrift, Utgivningsdatum, Författare, Kategori, Storlek,
och Text.
Skapa en Q-tabell, ”artiklar_Q”, som skall innehålla ändringarna i datakällan och kopiera
ändrade rader till denna tabell. I exemplet har artiklar med följande artikelnummer påverkat
datakällan: artikel 4 har tagits bort, två artiklar har lagts till och fått 132.451 och 132.452 som
artikelnummer samt artiklarna 20.032 och 132.451 (den nyligen tillagda artikeln) har ändrats.
Det aktuella sekvensnumret är just nu 12.403, vilket innebär, att så många rader har tidigare
lagts ut i ”artiklar_Q” och troligtvis redan uppdaterat Boolware index.
I denna ordning har de olika aktionerna gjorts i datakällan:
1.
2.
3.
4.
5.
Lägg till en rad (får artikelnummer 132.451)
Tag bort en rad (artikelnummer 4)
Ändra en rad (artikelnummer 20.032)
Lägg till en rad (får artikelnummer 132.452)
Ändra en rad (artikelnummer 132.451)
Följande saker skall göras av applikationen:
Sätt status i Boolware så att endast sökningar tillåts:
bwc -c status Tidningar.artiklar readonly
Kopiera rader till tabellen ”artiklar_Q” (använd vanlig SQL syntax). Resultatet i ”artiklar_Q”
kommer då att vara:
132451
4
20032
20032
132452
132451
132451
SvD
DN
SvD
SvD
DN
SvD
SvD
20030321
19571009
20030321
20000712
20010321
20030321
20030321
Sylvén
Jolo
Kajenn
Kajenn
Hultén
Sylvén
Sylvén
Sport 200
Inrikes
Inrikes
Inrikes
Kultur
Sport 800
Sport 200
Text…
I
12404
1350 Text… D
12405
900
Ny text
N
12406
700
Gammal text O
12407
200
Text… I
12408
Ny text
N
12409
Gammal text O
12410
De sju första kolumnerna överensstämmer med tabellen ”artiklar”, medan de två sista utgörs av
extrakolumnerna UPD$TYPE och UPD$SEQ.
Eftersom varje rad är försedd med ett sekvensnummer, behöver inte raderna ligga i någon
speciell ordning i tabellen ”artiklar_Q”; det viktiga är att sekvensnumret kommer i stigande
ordning.
I exemplet ligger de i denna ordning bara för att det skall bli enklare att läsa.
Viktigt: Som framgår av exemplet är det mycket viktigt, att sekvensnumren (UPD$SEQ) för
UPD$TYPE ’N’ och motsvarande UPD$TYPE ’O’ kommer direkt efter varandra; ingen annan
transaktions sekvensnummer (UPD$SEQ) får komma mellan dem.
Då samtliga rader, som uppdaterat datakällan, har kopierats till ”artiklar_Q” kan man aktivera
uppdatering av Boolware Index med hjälp av följande kommando:
bwc -c status Tidningar.artiklar online update
Detta kommando aktiverar Boolware server, som synkroniserar index med datakällan.
69
Genom att schemalägga den senaste aktiviteten - aktivera Boolwares uppdatering - kan man
utföra de ganska resurskrävande uppdateringarna, då systemet är lågt belastat. Detta
naturligtvis under förutsättning att uppdateringarna inte behöver vara sökbara omedelbart.
Boolware tabeller
Boolware recordtabell
Varje tabell har en "q-fil" knuten till sig, med samma namn som tabellen, samt suffixet ".q".
Denna fil använder sig av samma format som import-filen, dvs använder samma separatorer
mellan rader och kolumner (importfilen är den fil som använts för att ladda tabellens index första
gången). Varje post i q-filen representerar antingen en ny rad (Insert), en borttagen rad (Delete)
eller en ändrad rad (Update).
Varje post inleds med en obligatorisk del bestående av två fält - uppdateringskoden vilken är
den första bokstaven på varje rad: I, D eller U - samt primärnyckeln. Om primärnyckeln är
sammansatt ska nyckeln anges med fälten konkatenerade med binärt 1 som separatortecken. T
ex, om idno och date tillsammans bildar primärnyckel, och idno är 77 och date är 20080603 ska
en sån primärnyckel kodas som:
77120080603.
OBS, den fetmarkerade ettan i tredje positionen avser binärt ett, inte ascii-tecknet ett.
Exempel på Insert, Update och Delete av en rad där de två första kolumnerna tillsammans
bildar primärnyckel:
I;"6109011234120080608";6109011234;20080608;Rubrik;"Ny post"
U;"6109011234120080608";6109011234;20080608;Rubrik;"Ny post, kompletterad"
D;"6109011234120080608"
När en onlineuppdatering för en recordtabell initieras så kommer Boolware till att börja med att
kontrollera om en .qq fil finns och isåfall använda den i första hand vid start av en uppdatering.
När uppdateringen gått till slut eller om det inte finns någon .qq fil så kommer Boolware att byta
namn på .q filen till .qq, skapa en ny .q fil och därefter starta uppdateringen och använda sig av
.qq filen för processen. Om ett allvarligt formatfel upptäcks i .qq filen så kommer uppdateringen
att avbrytas med ett felmeddelande i Boolwares systemlogg och i detta fall måste
administratören av Boolware manuell korrigera indatafelen i .qq filen och därefter starta
uppdateringen på nytt.
Det program som skapar poster i q-filen måste således ta hänsyn till att filen under korta
ögonblick, då Boolware byter namn och skapar en ny, inte finns/är tillgänglig samt, för att
Boolware ska kunna byta namn på q-filen, se till att stänga q-filen efter sig.
Uppdateringskoden följs av en kolumnseparator och sedan en primärnyckel. Efter
primärnyckeln följer ytterligare en kolumnseparator, sedan kommer radens alla fält i samma
ordning som de visas i Managers fönster för kolumner.
Exempel: antag en tabell som innehåller nyhetsartiklar. Tabellen innehåller tre fält: ett numeriskt
ID (primärnyckel), en rubrik och en text.
I;45;45;"Volvo säljs av Ford";"Volvo är säkert värt 53 miljarder..."
Notera att primärnyckeln förekommer två gånger. Dels i den fasta delen (de två första
kolumnerna), men även i dataraden. Anledningen är att man ska kunna ändra primärnyckeln då måste både den gamla och nya primärnyckeln vara känd.
D;45
70
Borttag är den enklaste typen av ändring. Endast primärnyckeln behöver anges. Den gamla
lydelsen kommer att läsas från Boolwares egen datafil och avindexeras.
U;45;46;"Volvo säljs av Ford";"Volvo är kanske värt..."
Detta är ett exempel på hur både primärnyckeln och ett kolumnvärde ändras. Primärnyckeln
ändras från 45 till 46, och ordet "säkert" ändras till "kanske" i texten. Boolware kommer att läsa
den gamla lydelsen från sin egen datafil, infoga den nya lydelsen och sedan göra nödvändiga
förändringar i sina index.
Felmeddelanden
Undersök alltid databas- och systemloggen efter eventuella felmeddelanden och kontrollera qfilernas korrekthet i händelse av problem.
Boolware filsystemstabell
Varje tabell har en "q-fil" knuten till sig, med samma namn som tabellen, samt suffixet ".q".
Denna fil använder CRLF som radavgränsare och komma som kolumnavgränsare. Varje post i
q-filen representerar antingen en ny rad (Insert), en borttagen rad (Delete) eller en ändrad rad
(Update). Detta styrs med den s.k. uppdateringskoden, den första bokstaven på varje rad: I, D
eller U.
Inserts och Deletes kräver bara ett ytterligare värde, namnet på filen som lagts till. Updates
kräver dessutom namnet på den sparade fil som innehåller den gamla lydelsen.
OBS: åtkomst till q-filen måste synkroniseras så att ingen skriver till denna fil samtidigt som
Boolwares uppdatering läser den. Boolware tillhandahåller ingen sådan automatisk
synkronisering utan det förväntas att anropande program sköter det. Gången är normalt att
anropande program först skriver till q-filen, sedan startar Boolwares uppdatering och väntar tills
den är färdig innan nytt data skrivs till q-filen.
Gör så här för att lägga till en ny fil i indexet:
1. Spara filen
2. Skriv en rad i tabellens q-fil: I,c:\data\newcompany.xml
3. Starta uppdatering för tabellen på vanligt sätt.
Gör så här för att uppdatera index för filer när de ändras.
1. Kopiera originalfilen till en annan katalog.
2. Spara den nya lydelsen i filen.
3. Skriv en rad i tabellens q-fil: U,c:\data\company.xml,c:\save\company.xml
4. Starta uppdatering för tabellen på vanligt sätt.
Gör så här för att ta bort en fil ur indexet:
1. Flytta den gamla filen till en annan katalog
2. Skriv en rad i tabellens q-fil: D,c:\data\abc123.xml,c:\save\abc123.xml
3. Starta uppdatering för tabellen på vanligt sätt.
Det första steget sparar undan den gamla lydelsen av dokumentet. Boolware behöver denna för
att kunna avindexera de termer som inte längre finns kvar i den aktuella lydelsen.
Felmeddelanden
Undersök alltid databas- och systemloggen efter eventuella felmeddelanden och kontrollera qfilernas korrekthet i händelse av problem.
71
Åtgärder som sker automatiskt i Boolware under uppdateringen
För att undvika onödiga stopp i uppdateringen och för att göra vissa uppdateringssekvenser
effektivare, ändrar Boolware automatiskt den specificerade uppdateringstypen (I, D, N, O eller
U) i vissa fall. Då något av nedanstående inträffar, lämnar Boolware ett meddelande i serverloggfilen, där åtgärden beskrivs.
Skapandet av uppdateringstyper skiljer sig litet, då Boolware är datakällan eller då en
"etablerad" datakälla används. Uppdateringstyperna "I" och "D" skapas på samma sätt. "N" och
"O" posterna för en etablerad datakälla skapas av en trigger kopplad till datakällan. Då
datakällan är Boolware används uppdateringstypen "U", vilken innehåller den nya lydelsen och
den gamla och nya primärnyckeln (oftast densamma).
Uppdateringsposterna läses en i taget och man erhåller då en post med "första" uppdateringstypen. Om uppdateringstypen är "N", läses en ny post och man erhåller den "andra"
uppdateringstypen, som måste vara "O".
Nedan finns en förteckning över de förändringar Boolware gör:
Byte för att göra uppdateringen mer effektiv:
- Om uppdateringstyp "D" följs av en uppdateringstyp "I" och de har samma primärnyckel,
ändrar Boolware uppdateringstyperna till "O" respektive "N". Det är mycket effektivare att
utföra en ändring av en befintlig post än att först ta bort den och sedan lägga till en ny post.
Byte för att undvika stopp i uppdateringen:
- Om uppdateringstypen är "D" och den angivna primärnyckeln inte finns i Boolware index,
kommer posten att ignoreras och uppdateringen går automatiskt vidare med nästa post.
- Om uppdateringstypen är "N" och den angivna primärnyckeln är felaktig för Boolware
(innehåller exempelvis ett segment, som är NULL), kommer "N" att ignoreras och "O" posten
görs om till "D". Den nya lydelsen kan inte läggas till, men den gamla tas bort.
- Om primärnyckeln i en "O" post inte finns i Boolware index, kommer "N" att göras om till "I"
och "O" posten kommer att ignoreras. Om datakällan är Boolware, är det en "U" post, som
görs om till "I". Den gamla lydelsen kan inte tas bort (kan redan vara borttagen), men den
nya lydelsen läggs till Boolware index.
- Om datakällan är Boolware och "första" uppdateringstypen inte är "I", "D" eller "U", kommer
posten att ignoreras.
- Om "O" är "första" uppdateringstypen (och Boolware inte är datakällan), sker något av
följande:
a) Om det är den absolut första posten i en uppdatering, ignoreras posten. Posten ignoreras
inte, om det är den enda posten i uppdateringen.
b) Om det inte är den absolut första posten i uppdateringen, uppdaterar man alla poster
man hittills har läst. Den "felaktiga" "O" posten kommer sedan i nästa uppdatering och då
kan en motsvarande "N" post ha skapats.
Prestanda
Detta avsnitt innehåller tips och information om hur Boolware bör konfigureras och skötas för
bästa resultat. I tipsen ingår konfigurering av såväl datakällan och Boolware Index som
maskinvaran.
Se till att er dator har tillräckliga resurser i form av internminne vilket förbättrar prestanda
avsevärt samt mycket och snabbt skivminne.
72
Prestanda kan också förbättras genom att installera flera CPU:er. Boolware och många SQL
datakällor är kapabla att utnyttja fler än en CPU om de finns installerade i datorn.
Sprid filer över flera hårddiskar. Lägg till exempel SQL-databasen på en hårddisk och Boolware
Index på en annan disk.
En del datakällor använder som standard något som kallas ”Clustered primary keys”. Detta är
troligen ett gott utgångsvärde, men innebär också att det går långsammare för Boolware att
indexera databasen. Av denna anledning om möjligt rekommenderas att ”Clustered” inte
används på primärnycklar i datakällan.
Om både datakällan och Boolware körs på samma dator, är risken stor att de kommer att tävla
om datorns resurser, vilket är skadligt för systemet som helhet. Standardinställningen för de
flesta datakällor är ofta att allokera enorma mängder minne för att snabba upp sin egen
bearbetning. Detta innebär i sin tur att andra program lämnas för litet resurser för att fungera
bra. Åtgärda detta genom att begränsa det minne som datakällan tillåts använda.
Experimentera med olika inställningar för minne i datakällan tills bästa prestanda uppnås.
För bästa prestanda, överväg även att köra Boolware och datakällan på olika datorer.
Det går snabbare att ladda Boolware Index ett i taget, snarare än att försöka ladda alla på en
gång.
Direktuppdatering av närordsindexerade kolumner är resurskrävande. Skillnaden i uppdatering
av kolumner med och utan närordsindexering kan vara upp till en faktor 8.
Viktigt: Direktuppdatering bygger på, att det som sker i datakällan skall överföras till Boolware
Index. Kommunikationen mellan datakällan och Boolware sker via ”triggers” och ”Data Capture
Table”. Att automatiskt via datakällan eller ”manuellt” via ett program sköta hanteringen av ”Data
Capture Table”, är ganska resurskrävande och påverkar även tiden för uppdateringar i
datakällan. Detta innebär, att stora förändringar i datakällan - ändring av många hundra tusen
poster - blir mycket effektivare, om man ”slår av” ”triggers”, utför uppdateringen i datakällan och
sedan laddar om de tabeller eller kolumner, som har påverkats. Därefter aktiverar man ”triggers”
och den automatiska direktuppdateringen kommer att fungera som tidigare.
Testindexera
Knappen “Testindexera” kan varmt rekommenderas för att kontrollera kolumnens
indexeringsegenskaper. Här visas alla varianter av indextermer, som kommer att genereras vid
kolumnens aktuella inställning.
Det går att skriva egen text för att kontrollera speciella kombinationer av text. Om egen text inte
skrivs, kommer Boolware att extrahera de första 100 raderna ur datakällan som exempeldata.
Om fler indexeringsmetoder används på en kolumn är det omöjligt för Boolware att automatiskt
avgöra vilken av metoderna som avses. I dessa fall finns det underkommandon i Boolwares
sökspråk som ger explicit stöd för önskad funktionalitet.
Om man i Boolware Manager får meddelandet: “Boolware kan inte indexera tabellen
‘tabellnamn’, tabellen saknar primärnycklar”, innebär det att tabellen saknar primärnyckel och
raderna i tabellen ej entydigt kan identifieras. Lägg till en primärnyckel, t.ex. ett identitetsfält och
Boolware kommer att kunna indexera tabellen.
73
Datakällor
Boolware kommunicerar med respektive datakälla via en adapter. I nästkommande avsnitt
redogörs för olika egenheter som kan förekomma för en viss datakälla. Kontakta oss eller se vår
hemsida (http://www.softbool.com/) för att erhålla de senaste uppgifterna angående vilka
datakällor, som understöds.
Adapter
Med datakälla menas det underliggande system, som innehåller informationen som Boolware
indexerar, t ex SQL Server, Oracle, MySQL, Sybase etc.
Boolware implementerar datakällor som “adaptrar”, ett slags inpluggningsmoduler – en för varje
typ av datakälla. Varje adapter består av ett delat program (DLL för Windows, “shared library”
för UNIX) som kan hantera sin egen datakälla. När Boolware startas, hittar den sina adapters i
samma katalog. Varje adapter har ett standardiserat namn, t.ex. “plugin_SQL Server.dll” eller
“plugin_Oracle.dll”.
DBMS spegling och Boolware
Ett flertal relationsdatabaser maximerar databasernas tillgänglighet genom “spegling”, d.v.s. att
spegla databasen på två eller flera datorer. Tanken är att datorn med kopian ska vara redo att
träda in, i händelse att huvuddatorn stannar. På så sätt minimeras databasens nedtid för
affärskritiska tillämpningar, genom att se till att det alltid finns kopia som är startklar.
Om huvudservern stannar och övertagandet sker, vill man att också trafiken för Boolware
automatiskt styrs om till den nya, övertagande databas-servern. Detta kan göras genom ett
enkelt SQL-anrop i samband med skiftet. T ex, (för Sybase och MS SQL Server)
exec xp_boolero '192.168.1.105', _
'', _
'reroute ip "192.168.1.110" to "192.168.1.112" dbms "Sybase"', _
'CMD'
(understrykningstecknen används för att bryta den långa raden av tydlighetsskäl)
Anropet till Boolware görs via samma i DBMS registrerade ”udf” som används för att signalera
till Boolware att en tabell ändrats. Den heter xp_boolero för MS SQL Server och Sybase, men
kan ha lite varierande namn i andra RDBMS.
•
•
•
•
P1: IP-numret till Boolware-servern
P2: Ska vara en tom sträng i detta anrop
P3: Boolware-kommandot REROUTE för att styra om trafiken för ett visst (eller alla)
DBMS från den gamla servern till den nya. Kommandot måste innehålla det gamla och
nya IP-numret, och kan dessutom innehålla ett DBMS-namn. Om ”dbms” inte anges
skiftas all trafik.
P4: Texten ”CMD” för att Boolware ska se detta som ett kommando.
Tillgängliga DBMS-namn:
SQL Server, DB2, Oracle, Sybase, MySQL, PostgreSQL, Informix, Access.
74
SQL Server
Denna adapter implementerar stöd för SQL Server 2000 via ODBC 3.5. Äldre versioner av SQL
Server stöds inte på grund av tekniska problem att hantera långa textfält i samband med
direktuppdateringar.
Särskilda krav som Boolware ställer för Windows:
SQL Server 2000, med “service pack” 2 eller senare
ODBC (Open Database Connectivity). Minst version 3.520.9001 av ODBC krävs.
Särskilda krav som Boolware ställer för Linux:
För att kunna köra vår Linux SQL Server adapter så måste man först ta ner Easysoft's Linux 32
bitars ODBC-driver för SQLServer (http://www.easysoft.com/products/data_access/odbc-sqlserver-driver/index.html?location=Easysoft) och installera denna. Licens erfordras (ca. $1.000
mars 2010).
Under installationen skapas en ODBC.ini i /etc/ katalogen, vilken innehåller exempel på hur en
system-DSN ska definieras, vilket man kan följa för att lägga in din system-DSN för er
SQLServer databas i denna fil. Och det är denna DSN man i Boolware Manager väljer vid
registrering av databas.
Hur Boolware påverkar SQL Server
Boolware Index Server registrerar en särskild ”User Defined Function” hos SQL Server för att
hantera synkroniserad direktuppdatering. Denna registreras i databasen “master” och har
namnet “xp_boolero” och finns i det dynamiska länkbiblioteket udf_sql server.dll. Vid
avinstallation kommer xp_boolero automatiskt att avregistreras. I händelse av problem med
automatisk avinstallation kan xp_boolero avregistreras med hjälp av Enterprise Manager.
Öppna databasen “master” och “extended stored procedures”. Högerklicka på “xp_boolero” och
välj “Ta bort” från menyn.
Varje tabell, som indexeras av Boolware Index Server, förses dessutom med en “trigger”.
Denna trigger aktiveras av SQL Server så fort någon ändring sker i tabellen (infoga, ändring,
borttag). Skriptet i triggern genereras av Boolware Index Server och innehåller ett anrop till ovan
nämnda procedur ‘xp_boolero’ för att signalera till Boolware Index Server att en ändring har
skett.
Beroende på tabellens struktur i datakällan, använder Boolware Index Server en av två olika
typer av ”Triggers”:
•
en AFTER “trigger” anger, att “triggern” aktiverar Boolware Index Server efter det alla
angivna operation i “triggern” utförts korrekt. Alla hänvisningar och kontroller måste också
ha utförts innan “triggern” exekveras. En AFTER “trigger” kan inte definieras för vyer. Det
kan förekomma flera AFTER “triggers” för samma tabell.
Denna typ av ”trigger” används, då tabellen inte innehåller några långa textfält (typ ”text”
eller ”ntext”).
•
en INSTEAD OF “trigger” indikerar, att “triggern” exekverar ”i stället för” SQL ”trigger” och
således åsidosätter dess funktioner. Endast en INSTEAD OF “trigger” kan definieras per
INSERT, UPDATE eller DELETE för en tabell eller vy. Det är emellertid möjligt att
definiera vyer på vyer, där varje vy har sin egen INSTEAD OF ”trigger”.
För uppdateringsbara vyer med “CHECK OPTION” är INSTEAD OF “triggers” inte tillåtna;
om en sådan ”trigger” skapas, genererar SQL Server ett fel. Användaren måste då ta bort
den valmöjligheten och använda ”ALTER VIEW”, innan man skapar INSTEAD OF
”triggern”.
INSTEAD OF “trigger” måste användas, då tabellen innehåller långa text kolumner, som
75
skall indexeras av Boolware.
Timestamp kan ej hanteras på ett korrekt sätt (indexering samt återsökning) då man
använder en INSTEAD OF “trigger” vilket betyder att användning av Timestamp skall
undvikas.
En tabell kan ha flera AFTER “triggers” av en given typ förutsatt att de har olika namn; varje
”trigger” gäller endast för en tabell, men en ”trigger” kan gälla för vilken kombination som helst
av de tre funktionerna: UPDATE, INSERT och DELETE.
Endast en INSTEAD OF “trigger” av en given typ är tillåten per tabell.
Datakällans tabell kan inte bestå av en kombination av textkolumner med hänvisningar, som
tillåter borttag i flera tabeller. I dessa fall rekommenderas ”varchar” som typ för kolumnen (vilken
kan innehålla 8.000 tecken) i stället för text.
Om man får felmeddelandet:
“Cannot Index Table …’’ tillsammans med meddelandet “Cannot CREATE INSTEAD OF
DELETE or UPDATE TRIGGER because the table has a FOREIGN KEY with cascaded
DELETE or UPDATE”, innebär detta att SQL Server databasen inte accepterar de ”triggrar” som
Boolware Index Server försöker skapa.
Om en tabell innehåller en kombination av ”text” kolumner och ”cascading updates / deletes”,
kan inte Boolware Index Server indexera tabellen ifråga. För att komma runt problemet måste
antingen “text” ersättas med “varchar” eller flytta på “text” kolumnen till annan tabell som inte
behöver “cascaded deletes”.
Viktigt: Då en INSTEAD OF ”trigger” används, är det nödvändigt för andra applikationer att
testa felkoder från datakällan. Eftersom Boolwares ”trigger” innehåller flera SQL-satser till
datakällan, kan en felkod för varje anrop genereras. Detta medför att andra applikationer måste
testa på samtliga felkoder.
Oracle
Denna adapter implementerar stöd för Oracle 9.2 eller senare via Oracle OCI klientbibliotek.
Äldre versioner av Oracle stöds inte.
Då ODBC inte används för att ”koppla” Boolware Index Server mot Oracle ställs andra krav på
installationen av Boolware Index Server.
Särskilda krav vid installation
Oracle kräver att ”User Defined Functions” ska finnas i den egna hemkatalogen,
(ORACLE_HOME), där Oracle är installerad.
Boolware-filen udf_oracle.dll måste därmed kopieras dit för att direktuppdatering av Boolware
Index ska fungera. För 9.2 eller senare gäller ORACLE_HOME/lib eller ORACLE_HOME/bin
katalogen.
Särskilda krav som Boolware ställer:
Boolware Index Server måste ha tillgång till Oracle Client därför att Boolwares adapter för
Oracle kräver tillgång till Oracles klientbibliotek OCI.DLL och dess ingående komponenter.
OBS! OCI klienten skall vara 10.2 eller senare.
76
Boolware hanterar unicode data förutsatt följande:
OCI-klienten måste vara inställd till UTF8 "Language_Territory.Characterset", exempelvis
"AMERICAN_AMERICA.UTF8" eller ”SWEDISH_SWEDEN.UTF8” etc.
Miljövariabeln, "NLS_LANG", måste vara synlig för Boolware vid uppstart.
Linux:
Tillgång till Oracle 32/64-bits OCI klient 10.2 (libclntsh.so.10.2) och accessbar av Boolware
(LD_LIBRARY_PATH och behörighet att använda/köra denna)
Är Oracle OCI 11 installerad kan man skapa en symbolisk länk till denna med rätt namn
libclntsh.so.10.2
ln -s libclntsh.so.11.2 libclntsh.so.10.2
Miljövariabeln LD_LIBRARY_PATH ska innehålla (ORACLE_HOME)/lib katalogen
Oracle 9.2 eller senare
Linux:
Miljövariabeln SOFTBOOL_HOME skall finnas och peka på installationskatalogen för Boolware.
Hur Boolware påverkar Oracle
Boolware Index Server registrerar en särskild “UDF” hos Oracle för att hantera synkroniserad
direktuppdatering. Denna installeras med hjälp av setupudf.exe resp. installudf.
Vid avinstallation kommer xpboolero automatiskt att avregistreras. I händelse av problem med
automatisk avinstallation kan xpboolero avregistreras med hjälp av SQL*Plus.
Gör så här vid manuell registrering av UDF:
Kopiera udf_racle.dll eller libudf_oracle.so till Oracles BIN installationskatalog.
Starta ett SQL*Plus och logga in med tillräcklig användarbehörighet i önskat schema.
(Filnamnet ska anges fullständigt enligt detta exempel.)
Kör följande kommandon:
create or replace library softbool as
'C:\opt\Oracle\product\11.2.0\db_1\BIN\udf_oracle.dll';
/
create or replace function xpboolero
(srv in string, tbl in string, extra in string, code in string, mask in
string)
return binary_integer
as
external
language C
library softbool
name "xpboolero"
parameters (srv string, tbl string, extra string, code string, mask string);
/
grant execute on softbool to public;
/
grant execute on xpboolero to public;
/
77
Gör så här vid manuell avregistrering av UDF:
Starta ett SQL*Plus och logga in med tillräcklig användarbehörighet i önskat schema.
Kör följande kommandon:
drop function xpboolero
drop library Boolware
Varje tabell som indexeras av Boolware Index Server förses dessutom med en “trigger”. Denna
trigger aktiveras av Oracle så fort någon ändring sker i tabellen (infoga, ändring, borttag).
Skriptet i triggern genereras av Boolware Index Server och innehåller ett anrop till ovan nämnda
funktion ‘xpboolero’ för att signalera till Boolware Index Server att en ändring har skett.
Hur Boolware identifierar en Oracle instans
För att Boolware skall få kännedom om en eller flera Oracle databas-instanser
krävs en fil, ”boolware.datasources”, som skall finnas i den katalogen där Boolware Index
Server är installerad.
Denna fil ska innehålla ett förklarande namn, motsvarande DSN namnet för ODBC datakällor,
för en enkel identifiering i/av Boolware, och en, för Oracle, korrekt angiven instansadress, (SID).
Uppbyggnaden av denna fil är identisk med en vanlig konfigureringsfil, (INI-fil), se exempel.
I detta exempel finns det två angivna instansnamn som ska var kända för Boolware Index
Server, PRODFTG, och LOKEFTG. Dessa två instanser finns på två olika datorer. En dator
med namnet ”CHARLIE” och SID=PROD och en med IP-adressen ”192.168.1.101” med
SID=LOKE.
OBS! I dessa exempel är bredden på sidan för smal, det skall endast vara en rad för adressen.
[PRODFTG]
datainstance=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=CHARLIE)(PORT=1521)
))(CONNECT_DATA=(SERVICE_NAME=PROD)))
[LOKEFTG]
datainstance=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.101)(PORT
=1521)))(CONNECT_DATA=(SID=LOKE)(SERVER=DEDICATED)))
“Remote Procedure Calls” (RPC)
Eftersom Boolwares updateringsmekanism förlitar sig på externa proceduranrop måste Oracle
instansen vara konfigurerad för detta så att uppdateringen ska fungera.
Följande exempel visar hur filerna LISTENER.ORA och TNSNAMES.ORA ska konfigureras för
att använda inter-process kommunikation (IPC) och kunna anropa externa procedurer.
Filerna finns i katalogen $ORACLE_HOME/network/admin.
För ytterligare information om hur filerna ska konfigureras för externa proceduranrop se ”Oracle
Net8 Administrator's Guide”.
#LISTENER.ORA Configuration File
LISTENER =
(ADDRESS_LIST =
(ADDRESS=
(PROTOCOL= IPC)(KEY= EXTPROC0)
) )
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC = (SID_NAME = extproc)
(PROGRAM=extproc)))
78
#TNSNAMES.ORA Configuration File
extproc_connection_data.world =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL=IPC)(KEY=EXTPROC0))
(CONNECT_DATA = (SID=extproc)
))
Restriktioner och begränsningar för Boolware
Fält av typen LONG indexeras inte av Boolware därför att dessa inte är tillåtna i Oracles
”triggers” vilket medför att direktuppdatering av Boolware Index ej kan utföras.
Tips, konvertera dessa till lämplig LOB-typ för att få dem indexerade. Se Oracle egen
dokumentation för mer detaljer hur detta går till.
Vyer kan indexeras. Om alla ingående kolumner härstammar från en och samma källtabell och
ingen av kolumnerna är av fälttypen LOB skapas triggers typen (instead of trigger) som används
för vyer. Dessa triggers hanterar inte LOB fält som krävs för att direktuppdatering av Boolware
Index automatiskt skall fungera. Synonymer hanteras inte av Boolware.
Sybase
Denna adapter implementerar stöd för Sybase Open Client 15.0 och senare via klientbiblioteken
libct och libcs. Äldre versioner av Sybase stöds inte.
Särskilda krav vid installation
Sybase kräver att ”User Defined Functions” ska finnas under den egna hemkatalogen i en
katalog som miljövariabeln innehåller, ($SYBASE/$SYBASE_ASE/lib). Boolware-filen
udf_sybase.dll / libudf_sybase.so måste därmed kopieras dit för att direktuppdatering av
Boolware Index ska fungera. Detta görs vid installation av Boolware.
Särskilda krav som Boolware ställer:
Boolware måste ha tillgång till Sybase Open Client därför att Boolwares adapter för Sybase
kräver tillgång till Sybase klientbibliotek libct.dll och libcs.dll och dess ingående komponenter.
För att stödja direktuppdatering krävs att XP Server finns installerad. Använd programmet
setupudf.exe eller installudf för att installera.
Linux:
Miljövariabeln LD_LIBRARY_PATH ska innehålla ($SYBASE/$SYBASE_ASE)/lib katalogen
Miljövariabeln SOFTBOOL_HOME skall finnas och peka på installationskatalogen för Boolware
Index Server.
Hur Boolware påverkar Sybase
Boolware registrerar en särskild “UDF” hos Sybase för att hantera synkroniserad
direktuppdatering. Funktionen ’xp_boolero’ registreras i masterdatabasen i Sybase med hjälp av
setupudf.wexe eller installudf.
Vid avinstallation kommer xp_boolero automatiskt att avregistreras. I händelse av problem med
automatisk avinstallation kan xp_boolero avregistreras med hjälp av isql.
79
Gör så här vid manuell avregistrering:
Starta isql och logga in med tillräcklig användarbehörighet.
Kör följande kommandon:
use master
go
drop procedure xp_boolero
go
Varje tabell som indexeras av Boolware förses dessutom med en “trigger”. Denna trigger
aktiveras av Sybase så fort någon ändring sker i tabellen (infoga, ändring, borttag). Skriptet i
triggern genereras av Boolware och innehåller ett anrop till ovan nämnda funktion ‘xp_boolero’
för att signalera till Boolware att en ändring har skett.
Hur Boolware identifierar en Sybase-instans
För att Boolware skall få kännedom om en eller flera Sybase databaser krävs en fil,
”boolware.datasources”, som skall finnas i den katalogen där Boolware är installerad. Denna fil
skapas och redigeras av Boolware Manager.
Denna fil ska innehålla ett förklarande namn, motsvarande DSN namnet för ODBC
datakällor, för en enkel identifiering av Boolware, och ett för Sybase, korrekt angivet
servernamn och databasnamn. Sybase är skiftkänsligt så var noga med stavningen.
Uppbyggnaden av denna fil är identisk med en vanlig konfigureringsfil, (INI-fil), se exempel.
I detta exempel finns det två angivna instansnamn som ska var kända för Boolware, TORFTG
och LOKEFTG.
[TORFTG]
server=TOR
database=Företag
[LOKEFTG]
server=LOKE
database=Företag
“Remote Procedure Calls” (RPC)
Sybase använder sig av en server för kommunikationen mellan ASE och de externa
procedurerna som kallas XP server. För mer information och konfigurering se dokumentation för
Sybase.
MySQL
Denna adapter implementerar stöd för MySQL 4 eller senare. Äldre versioner av MySQL stöds
inte.
Särskilda krav vid installation
Särskilda krav som MySQL ställer:
Windows:
Miljövariabeln ”path” ska innehålla den katalog där biblioteket udf_mysql.dll installeras.
Linux:
Miljövariabeln LD_LIBRARY_PATH måste innehålla katalogen, där libudf_mysql.so finns
(vanligtvis /usr/lib). Standard libstdc++.so.5 krävs också.
80
Datatypen ”unsigned” förekommer i MySQL, men tas inte om hand som en egen datatyp i
Boolware. Genom att - internt inom Boolware - behandla denna datatyp som närmast ”större”
datatyp, kommer datatypen ”unsigned” att hanteras på ett korrekt sätt.
Exempelvis så kommer ”tinyint unsigned”, ”smallint unsigned” och ”int unsigned” - internt inom
Boolware - behandlas som: ”smallint”, ”int” respektive ”bigint”.
Denna lösning påverkar inte något i datakällan, utan berör endast Boolwares interna format.
I MySQL 5.0.1 och senare kan vyer indexeras. Triggers kan inte skapas på vyer dock skapas
skuggtabell.
MySQL 5.0.3 och senare har stöd för triggers och udf-anrop. Boolware skapar triggers på
indexerade tabeller. För att detta ska fungera måste användaren som är registrerad som
Boolware-användare av en tabell ha behörighet ’SUPER’. Detta erhålls med mysql-kommandot:
GRANT SUPER ON *.* TO ’boolwareuser’;
där *.* är den databas/tabell som ska få ’SUPER’ behörighet och ’boolwareuser’ är den
användare, som Boolware loggar in till MySQL; se MySQL-dokumentation för att ange
behörighet till användare från olika servers.
I Boolware triggers finns anrop till en extern funktion, ’XPBOOLWARE’, som finns lagrad i
biblioteket udf_mysql.dll / libudf_mysql.so. För att det ska vara möjligt att registrera en extern
funktion i MySQL, måste instansen av MySQL som körs vara dynamiskt länkad. Se MySQL
dokumentationen angående detta.
Denna funktion måste vara registrerad i MySQL och görs vid med hjälp av setupudf.exe eller
installudf.
Gör så här vid manuell registrering av UDF:
Kopiera udf_mysql.dll eller libudf_mysql.so till därtill avsedd katalog, se MySQL dokumentation.
Kör följande kommando i mysql:
Windows:
CREATE FUNCTION xpboolware RETURNS INTEGER SONAME ’udf_mysql.dll’;
Linux:
CREATE FUNCTION xpboolware RETURNS INTEGER SONAME ’libudf_mysql.so’;
Före version 5.1.2 av MySQL var det tillräckligt att udf_mysql.dll resp libudf_mysql.so var
installerad i en katalog där MySQL server hade tillgång till den via miljövariabeln PATH så att
denna kunde hittas vid en dynamisk inläsning.
Fr.o.m. MySQL version 5.1.2 finns en speciell ”plugin” katalog i MySQL där dessa externa
bibliotek ska lagras, se MySQL manual angående global variabel ”plugin_dir”.
Lokalisera MySQL pluginkatalog genom att i MySQL skriva:
SHOW VARIABLES LIKE ’plugin_dir’;
Informix
Denna adapter implementerar stöd för Informix Dynamic Server 9.4 via ODBC 3.5. Äldre
versioner av Informix stöds inte.
Särskilda krav vid installation
Informix kräver att ”User Defined Functions (Routine)” ska finnas under den egna hemkatalogen
i en katalog som path miljövariablen innehåller, ($INFORMIXDIR). Boolware-filen
81
udf_informix.dll måste därmed kopieras dit samt registreras i Informix ”sysmaster” databas för
att direktuppdatering av Boolware Index ska fungera. Detta görs vid installation av Boolware och
installationen kräver att en SYSTEM DSN finns upplagd för Informix ”sysmaster” databasen.
Särskilda krav som Boolware ställer:
Informix Dynamic Server 9.4 eller senare.
ODBC (Open Database Connectivity). Minst version 3.520.9001 av ODBC krävs.
Hur Boolware påverkar Informix
Boolware registrerar en särskild “UDF” hos Informix för att hantera synkroniserad
direktuppdatering. Denna registreras i Informix ”sysmaster” databas av Boolwares
installationsprogram och har namnet “xp_boolero”. Vid avinstallation kommer xp_boolero
automatiskt att avregistreras. I händelse av problem med automatisk avinstallation kan
xp_boolero avregistreras med hjälp av DBAccess.
Gör så här vid manuell avregistrering:
Öppna databasen och starta ett SQL-fönster.
Kör kommandona:
”database sysmaster;”
“drop procedure xp_boolero(lvarchar, lvarchar, lvarchar, lvarchar, integer);”
Varje tabell som indexeras av Boolware förses dessutom med en “trigger”. Denna trigger
aktiveras av Informix så fort någon ändring sker i tabellen (infoga, ändring, borttag). Skriptet i
triggern genereras av Boolware och innehåller ett anrop till ovan nämnda procedur ‘xp_boolero’
för att signalera till Boolware att en ändring har skett.
Restriktioner och begränsningar för Boolware
Fält av typen BLOB/CLOB indexeras inte av Boolware därför att dessa ej är åtkomliga via
ODBC. Fält av typen BYTE/TEXT kan användas istället.
Vyer kan indexeras.
Direktuppdatering av Boolware Index kan ej göras via en vy på grund av att Informix ej har stöd
för triggers på vyer vilket behövs för att automatisk direktuppdatering av Boolware Index skall
fungera.
Synonymer hanteras inte av Boolware.
Endast en ”trigger” kan finnas per tabell och händelse (INSERT, DELETE och UPDATE). Detta
medför, att Boolware ”triggers” inte kan skapas automatiskt om det för en händelse finns
användar-skrivna ”triggers”. Om så är fallet, skapar Boolware en fil med samma namn som den
existerande ”triggern” och spar denna fil i en underkatalog, ”Informix”:
<installationskatalog>\Informix.
Exempel: En tabell, Tab1, har en användar-skriven ”trigger” för händelsen INSERT som heter
”Tab1_insert”.
En fil med namnet ”Tab1.Tab1_insert.sql” skapas i kaltalogen, <installationskatalog>\Informix,
av Boolware. Filen innehåller de ”statements”, som Boolware har genererat, vilket den
existerande ”triggern” måste kompletteras med för att erhålla synkronisering med Boolware
index.
Då en tabell deaktiveras i Boolware, kommer Data Capture Table (<tabellnamn>_Q) och de
”triggrar” som skapats av Boolware (<tabellnamn>_tr_ins, <tabellnamn>_tr_del och
<tabellnamn>_tr_ins) att tas bort.
82
OBS, ”triggers” med andra namn än de angivna, lämnas orörda och dessa måste modifieras
manuellt med den information som sparats i <installationskatalog>\Informix för att fungera mot
Boolware.
DB2
Detta kapitel beskriver stödet för IBM DB2 UDB 8.0 och senare via CLI (Call Level Interface).
Äldre versioner stöds ej, varken av Softbool eller IBM.
Stöd finns för 32/64-bitars LUW (Linux, Unix, Windows), version 5 av DB2 UDB för iSeries
(AS/400) och z/OS. Med 32/64-bitars avses endast IBM:s DB2-klient; själva DB2 kan köras i
t.ex. 64-bitars läge utan problem.
Särskilda krav vid installation
Systemkrav för Boolware:
Boolware måste ha tillgång till DB2:s klient (db2cli) och dess komponenter.
Linux:
Miljövariabeln SOFTBOOL_HOME måste peka på Boolwares installationskatalog (ofta
/usr/local/boolware).
Hur Boolware påverkar DB2
Boolware kan köras på samma maskin som DB2, eller på en annan maskin. Den använder två
moduler för att kommunicera med DB2: plugin_db2 och en UDF (User Defined Function).
Modulen plugin_db2 används av Boolware för att ”tala till” DB2, och UDF:en används av DB2
för att ”tala till” Boolware.
Installationsprogrammet sköter alla detaljer. Det följande är en manuell beskrivning av vad som
händer under installation och drift av Boolware.
Hur DB2 talar med Boolware
Boolware använder en särskild UDF (User Defined Function) för att stödja direktuppdatering för
DB2. Den registreras automatiskt i alla databaser, som skall indexeras/uppdateras med
Boolware. Den heter ”boolware_udf” och finns i Java-klassfilen ”boolwareudf.class”. Denna fil
(tillsammans med två stödklasser NetDataTypes.class och OutputStreamBuffer.class).
OBS: se till att dessa filer finns i en katalog som inbegrips i Javas ”CLASSPATH”.
Boolware skapar ”triggers” för varje tabell, som skall indexeras med Boolware. Denna ”trigger”
aktiveras automatiskt av DB2 så fort något data ändras i tabellen (Insert, Update, Delete).
Skriptet, som genereras av Boolware, tar hand om ändringen och skickar en signal till Boolware
för att upplysa om att en förändring har skett.
DB2 tillåter att en tabell har flera “triggers” för en given typ förutsatt, att de har olika namn; varje
sådan “trigger” kan utföra ett antal funktioner. Varje “trigger” kan emellertid endast gälla för en
tabell, fastän en “trigger” kan vara kopplad till vilken “aktion” (UPDATE, INSERT och
DELETE) som helst.
Boolware använder en s.k. “skuggtabell” för att hålla reda på förändringar. Dessa tabeller har
samma kolumner som originaltabellen, men innehåller endast ändrade rader, som väntar på att
indexeras av Boolware. Namn på tabeller kan vara upp till 18 tecken långa, och eftersom
83
skuggtabeller namnges genom att häkta på “_Q” i slutet av namn, är den praktiska gränsen 16
tecken för Boolware.
För att koppla Boolware till en DB2-databas används en fil ”boolware.datasources”. Den måste
finnas i samma katalog som Boolware server.
Följande är ett exempel på vilken information som behövs för varje DB2-databas:
[SampleDB2]
driver=DB2 CLI
database=SAMPLE
server=127.0.0.1
remark=IBM sample database
iseries=0/1
schemalist=SCHEMA1, SCHEMA2
Ett Boolware-namn (SampleDB2), ett DBMS-ID (DB2 CLI), ett databasalias (SAMPLE), och IPnumret till den maskin som kör DB2 (127.0.0.1).
DB2 uppför sig litet olika beroende på vilken maskin som används. I nyckeln "iseries" kan man
ange, om DB2 finns på en iSeries (AS/400) 1, eller en Windows/Linux/Unix 0. Om inget anges
antas 0 (Windows/Linux/Unix).
Det finns också en möjlighet att filtrera tabeller i en databas, så att Boolware endast visar
tabeller från ett eller flera scheman. Praktiskt i stora databaser. Detta kopplas in genom att ange
ett eller flera kommaseparerade schemanamn i nyckeln ”schemalist” i boolware.datasources.
Tips
SQL1224N A database agent could not be started to service a request, or was
terminated as a result of a database system shutdown or a force command.
Detta är ett problem med DB2:s konfiguration. Det uppstår om Boolware och DB2 körs i samma
dator och Boolware får lokala anslutningar genom DB2/CLI. Lokala anslutningar i DB2 använder
delat minne (shared memory), och mängden delat minne är förmodligen inte tillräckligt stor.
Lösning:
Undvik delat minne genom att omkatalogisera databasen på en ”remote” TCP/IP loopback nod:
catalog tcpip node loopback remote 127.0.0.1 server db2_boolware
uncatalog database xxx
catalog database xxx as xxx at node loopback
SQL1042C An unexpected system error occurred. SQLSTATE: 58004.
Detta kan vara ett symptom på att DB2 inte är riktigt installerad Installationsprogrammet för 8.2
”glömmer” att inkludera en del viktiga kataloger i systemets sökväg för so-filer. Kontrollera i filen
home/user/db2dump/db2diag.log efter felmeddelanden. Om det finns meddelande om att DB2
inte kan hitta .so-filer, t ex ”libjava.so Cannot open shared object file”, är det ett symptom på
detta problem.
Lösning
Korrigera sökvägen för “shared object files”, antingen via miljövariabeln LD_LIBRARY_PATH
(endast aktuell användare) eller genom att redigera filen /etc/ld.so.conf och sen köra
programmet /sbin/ldconfig.
Nödvändiga sökvägar är:
/opt/IBM/db2/V8.1/lib
84
/opt/IBMJava2-141/jre/bin
/opt/IBMJava2-141/jre/bin/classic
PostgreSQL
Denna adapter implementerar stöd för PostgreSQL 8.4 eller senare via PostgreSQL
klientbibliotek LIBPQ
Särskilda krav vid installation
Särskilda krav som Boolware ställer:
Boolware Index Server måste ha tillgång till PostgreSQL Client därför att Boolwares adapter för
PostgreSQL kräver tillgång till PostgreSQL klientbibliotek LIBPQ.DLL/LIBPQ.SO och dess
ingående komponenter.
För att PostgreSQL klienten ska få access till angiven PostgreSQL installation måste detta
tillåtas av databasinstallationen. Detta konfigureras och hanteras av PostgreSQLs
konfigurationsfil pg_hba.conf, se vidare i PostgreSQL handbok.
Linux:
Tillgång till PostgreSQL klient (libpq.so) och accessbar av Boolware. Sätt miljövariabeln
LD_LIBRARY_PATH att innehålla sökvägen till PostgreSQL klientbibliotek.
Windows:
Tillgång till PostgreSQL klient (libpq.dll) och accessbar av Boolware. Sätt miljövariabeln PATH
att innehålla sökvägen till PostgreSQL klientbibliotek.
Hur PostgreSQL talar med Boolware
Boolware Index Server registrerar en särskild “UDF” hos PostgreSQL för att hantera
synkroniserad direktuppdatering. Denna registreras i de databaser som indexeras av Boolware
och har automatisk uppdatering påslaget. Namnet på denna registrerade funktion är “xpbo”. Vid
avinstallation kommer xpbo automatiskt att avregistreras.
PostgreSQL kräver att ”UDF” ska finnas lagrade katalogen definierad av PostgreSQL som
$libdir.
Gör så här vid manuell registrering av UDF:
Kopiera udf_postgres.dll eller libudf_postgres.so till $libdir katalogen.
Logga in i PostgreSQl med deras klient och kör följande kommandon:
(Filen ska anges med absolut filnamn enligt exemplet nedan.)
CREATE OR REPLACE FUNCTION xpbo(bytea, bytea) RETURNS int4 AS 'C:/Program
Files/PostgreSQL/9.0/lib/udf_postgresql.dll', 'xpbo' LANGUAGE C VOLATILE
STRICT;
GRANT EXECUTE ON FUNCTION xpbo(bytea, bytea) TO public;
Gör så här vid manuell avregistrering av UDF:
Logga in i PostgreSQl med deras klient och kör följande kommandon:
DROP FUNCTION IF EXISTS xpbo(bytea, bytea) CASCADE;
85
Hur Boolware identifierar en PostgreSQL-instans
För att Boolware skall få kännedom om en eller flera PostgreSQL databaser krävs en fil,
”boolware.datasources”, som skall finnas i den katalogen där Boolware är installerad. Denna fil
skapas och redigeras av Boolware Manager.
Denna fil ska innehålla ett förklarande namn, motsvarande DSN namnet för ODBC
datakällor, för en enkel identifiering av Boolware, och ett för PostgreSQL korrekt angivet
servernamn, databasnamn och socket portnummer.
Uppbyggnaden av denna fil är identisk med en vanlig konfigureringsfil, (INI-fil), se exempel.
[postgresDN]
driver=PostgreSQL
database=DN
portno=5432
Access
Denna adapter implementerar stöd för Access via ODBC 3.5.
Särskilda krav vid installation
Särskilda krav som Boolware ställer för Windows:
ODBC (Open Database Connectivity). Minst version 3.520.9001 av ODBC krävs.
För att koppla sig till en Access databas måste en system-DSN finnas och vara registrerad som
en ODBC datakälla mot ”Microsoft Access Driver (*.mdb)”.
86
Kapitel 11
Boolwares sökspråk
Boolwares Sökspråk
För att på ett entydigt sätt kunna specificera vad och hur en sökning skall genomföras har
Boolware tagit fram en speciell syntax och denna kallas för ”Boolware Query Language”
förkortas ”QL”. Här nedan är en beskrivning och några exempel på detta sökspråk.
Schematisk komponentöversikt
Fråga
Eller:
TABLES(scope) FIND/AND/OR/NOT/XOR/BACK/FORWARD
underfråga
RELATE(Tabellnamn) FIND/AND/OR/NOT/XOR/BACK/FORWARD
underfråga
RELATE(Mål tabell, resultat tabell )
Eller:
TABLES(Tabellnamn1 [...,TabellnamnN]
TABLES(*)
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
term [operator term]
SIM(text)[,tröskel][,optimering]
NEAR(ord ord [ord ord] [,distans[,order]])
XNEAR(ord ord [ord ord]; [exOrd exOrd...] [,distans[,order]])
FUZZY(ord [ord..ord] [,nochars[,limit]])
QUERYLIM(ord [ord..ord] [;n])
NUMRANGE(N..M)
SEARCHVIAINDEX(N[,P..Q, M])
SEARCHVIAINDEXNOGEN(N[,P..Q, M])
STRING(sträng av ord)
"fras av ord "
"lista med ord"
WITHINSTRING(sträng av ord)
WORD(ord [ord.. ord])
ORSEARCH(ord [ord .. ord])
ORSEARCH(@fullständigt filnamn)
ORSEARCHEX(ord [ord .. ord])
ORSEARCHEX(@fullständigt filnamn)
COMPRESS(ord [ord .. ord])
CASE(ord [ord .. ord])
WITHIN(ord [ord .. ord])
WORDASIS(ord [ord .. ord])
STRINGASIS(sträng av ord)
GEOCIRCLE(latitud; longitud; r=n)
GEORECTANGLE(latitud; longitud1; latitud2; longitud2;)
GEOPOLYGON(latColumn; longColumn; polygon((long lat,,)) )
SYN(ord [ord...])
THES(ord [ord...])
STEM(ord [ord...])
SOUND(ord)
NOTI(ord [ord .. ord])
NOTI (@fullständigt filnamn)
PREFIX(”p11” OR ”p12”, ”p21”, ”p31”; term [operator term])
DUPSTAMP()
Eller:
Omfång
Under-fråga:
87
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Eller:
Operator:
DUPELIMINATE(duplikatregel)
NOLINKWORDS(ord [ord … ord])
SET(id)
QUERY(id)
RESULT(id)
SCRATCH[1][2][3][4][5]()
RPATH(tab1.col1, tab2.co1..tabN.colN)
MAXQUERYEXECUTIONTIME(N)
( - underfråga - )
AND/OR/NOT/XOR/ANDF/ORF/NOTF/XORF
Term:
Eller:
KOLUMN_NAMN: ord
KOLUMN_NAMN: intervall
Eller:
Eller:
Eller:
Eller:
ord..ord
<ord
<=ord
>ord
>=ord
Intervall:
BACK
FORWARD
En frågesträng är uppbyggd av: ett Kommando, Termer, Underkommandon och Operatorer.
Kommandona FIND/AND/OR/NOT/XOR/BACK/FORWARD och termerna kan givetvis skrivas
med stora eller små bokstäver.
I dessa exempel är kommandona skrivna med versaler för att göra det mer läsligt.
Ett kolon (:) avskiljer kolumnnamnet och sökordet; ett kolumnnamn följs alltid av ett kolon.
Om en kolumn innehåller specialtecken - annat än bokstäver och siffror - exempelvis: blank,
kolon, punkt etc. måste kolumnnamnet omslutas av anföringstecken; ”Kolumn namn”:term.
Om ett sökord ej prefixeras med ett kolumnnamn, antas det att ”Alla fält” (fritext) avses.
Ett ord kan bestå av jokertecken (*, ?, ! och #), där * ersätter 0 - 126 bytes vilka som helst, ?
ersätter ett (1) tecken vilket som helst, ! ersätter en (1) bokstav och # ersätter en (1) siffra.
Jokertecknen får finnas på valfri plats i sökordet och valfritt antal gånger.
Viktigt: Endast två jokertecken: * och ? kan användas i strängar.
Genom en inställning kan man erhålla automatisk trunkering, vilket innebär, att de Termer som
anges, automatiskt förses med ett avslutande Jokertecken (*) (se ”Handbok programmering”).
Då man i detta fall vill söka exakt, måste den specificerade Termen avslutas med en punkt (.)
för att upphäva trunkeringen.
Ett Kommando måste alltid inleda en söksträng. Följande kommandon är tillåtna:
FIND/AND/OR/NOT/XOR/BACK/FORWARD.
Kommandona AND/OR/NOT/XOR kan förekomma mellan orden som operatorer. Dessutom kan
en specialvariant av var och en av dessa operatorer förekomma: ANDF, ORF, NOTF och
XORF. Dessa operatorer som avslutas med ett F, markerar att ett nytt kommando börjar, vilket
kan användas för att erhålla ”mellanresultat” för de ställda frågorna (se exempel
Setsökning/Sökhistorik nedan i detta kapitel) och för att underlätta vid relaterad sökning (se
avsnittet (Sök relaterat (Join) nedan). AND(F), OR(F), NOT(F) och XOR(F) kan naturligtvis
också vara en Term. Om man vill söka på en term som har samma 'namn' som en operator
(AND, OR, NOT, OR eller XOR), måste man upprepa termen/operator. Om orden AND(F),
88
OR(F), NOT(F) och XOR(F) förses med något Jokertecken (*, ?, ! eller #) eller en avslutande
punkt (.) för att upphäva en automatisk trunkering, kommer de också att tolkas som Termer och
inte Operatorer.
Exempel:
FIND and
FIND sten AND stanley
i detta uttryck kommer AND alltid att betraktas som en term; en
operator kan inte följa direkt på ett kommando/operator.
i detta uttryck kommer AND att uppfattas som en operator och endast
termerna sten, stanley kommer att sökas med operatorn AND.
För att söka på alla tre termerna: sten, and, stanley, måste man upprepa termen/operatorn:
FIND sten AND and stanley
i detta uttryck kommer alla tre termerna (sten, and, stanley) att
sökas med operatorn AND.
FIND sten and. stanley
i detta uttryck kommer alla tre termerna (sten, and., stanley) att
sökas med operatorn AND (termen and. (final punkt) är inte en
operator).
BACK/FORWARD används för att backa respektive stega framåt i sökhistorik.
Om kommandot är FIND, har en ny frågesession påbörjats; alla andra kommandon
AND/OR/NOT/XOR är påbyggnadskommando på föregående resultat.
Boolwares frågespråk innehåller ett antal underkommandon, som förfinar frågorna.
Följande underkommandon är tillåtna: sim, near, xnear, fuzzy, querylim, numrange,
searchviaindex, searchviaindexnogen, string, word, orsearch, orsearchex, compress,
within, case, wordasis, stringasis, withinstring, geocircle, georectangle, geoplygon, syn,
thes, stem, sound, noti, prefix, dupstamp, dupeliminate, nolinkwords, set, query, result,
scratch och rpath. Alla dessa underkommandon, förutom sim, rpath och
maxquerexecutiontime, kan förekomma inom en frågesträng tillsammans med andra
söktermer.
Exempel:
FIND Rubrik:sport Text:near(Sven Johansson)
Hittar endast Sven Johansson i sprortartiklar.
En del underkommandon kan vara inbäddade:
near(case(IT bolag))
near(wordasis(Ericsson Development))
nolinkwords(sound(LM Ericsson))
sound(nolinkwords(LM Ericsson))
Söker IT och bolag som skiftkänsligt
Söker Ericsson och Development exakt
Söker fonetiskt utan "länkord"
Söker fonetiskt utan "länkord"
Det finns två olika söksätt i Boolware Index Server: den traditionella booleanska sökningen och
likhetssökning (sim).
Den booleanska sökningen kombinerar sökord med operatorer, medan likhetssökning jämför
den bifogade texten med innehållet i alla dokument i databasen och sorterar dem i
likhetsordning.
Underkommandot sim talar om att dokumenten skall återsökas på likhet istället för förekomst av
ett specifikt sökord. Vilket booleanskt kommando som helst kan föregå ett sim kommando, men
OR får ej förekomma efter sim. Det finns två valfria möjligheter att påverka resultatet av en
likhetssökning: tröskel och optimering. Tröskel är ett tal mellan 0 och 1, där man anger vilka
poster som skall exkluderas ur resultatet. Om man angivit 0.300 som tröskelvärde, kommer
samtliga poster som har en poäng understigande 0.300 att exkluderas ur sökresultatet.
Skönsvärdet för tröskel är 0.200. Optimering innebär, att man kan välja mellan snabbhet och
relevans. Det värde man anger ligger mellan 0 och 1. Nära noll innebär snabbhet, medan nära
89
1 innebär hög relevans. Skönsvärdet för optimering är 0.5. Eftersom detta är mycket
databasberoende rekommenderar vi att man experimenterar med dessa värden för att erhålla
den bästa balansen mellan snabbhet och relevans.
Underkommandot near, närordssökning, anger att de specificerade söktermerna skall
förekomma inom ett visst avstånd från varandra och i vissa fall även i angiven ordning.
Avståndet och ordningen bestäms med hjälp av två parametrar, vilka skrivs direkt efter de
angivna söktermerna. Avståndet är ett tal som anger hur många ”främmande ord” minus 1, som
får förekomma mellan de specificerade söktermerna. Om den andra parametern ordning, är ett
tal skilt från 0 (noll), måste söktermerna återfinnas i den specificerade ordningen. Skönsvärdet
för dessa två parametrar är 5 (4 "främmande ord" får förekomma) respektive 0 (vilken ordning
som helst). Ett specialfall är när de angivna sökorden skall stå i ordning (andra parametern skall
vara 1) och inga andra ord får förekomma mellan söktermerna (avståndet ska vara 1); detta blir
en frassökning. Ett annat sätt att specificera en frassökning är att innesluta sökorden inom
anföringstecken. Om kolumnen är markerad för strängsökning och sökorden är inneslutna inom
anföringstecken, kommer en strängsökning att utföras istället för en frassökning. Det finns
ytterligare ett sätt, att hantera strängsökning; genom att använda underkommandot string.
Skillnaden mellan strängsökning och närordssökning är den, att strängarna hämtas direkt från
Boolware Index, medan en närordssökning söker varje sökord individuellt och kontrollerar
avståndet och ordningen mellan sökorden. Detta innebär att fraser, som söks fram med hjälp av
närordssökning, kan finnas på vilken plats som helst i texten, medan en sträng alltid finns i
början av texten.
Exempel 1:
FIND Text:near(röd bil)
Skönsvärden för parametrar (5, 0) kommer att användas. Hittar alla poster, där det inte
förekommer mer än 4 "främmande ord" mellan röd och bil. Orden får förekomma i valfri ordning
En röd stor bil
En röd bil
En bil som är röd
En röd sko på en stor blå bil
OK endast ett "främmande ord"
OK inga "främmande ord" mellan röd och bil (fras)
OK två "främmande ord" och valfri ordning
Inte OK 5 "främmande ord" mellan röd och bil
Exempel 2:
FIND Text:near(röd bil,,1)
Fortfarande tillåts 4 "främmande ord" mellan röd och bil, men de måste komma i angiven
ordning.
En röd stor bil
En röd bil
En bil som är röd
En röd sko på en stor blå bil
OK röd och bil i rätt ordning
OK rätt ordning (fras)
Inte OK felaktig ordning
Inte OK 5 "främmande ord" mellan röd och bil
Exempel 3:
FIND Text:near(bil röd,3,1)
Tillåter 2 "främmande ord" mellan bil och röd och de måste komma i angiven ordning.
En röd stor bil
En röd bil
En bil som är röd
En röd sko på en stor blå bil
Inte OK felaktig ordning
Inte OK felaktig ordning
OK 2 "främmande ord" och rätt ordning
Inte OK felaktig ordning
Exempel 4:
FIND Text:near(röd bil,1,1)
Detta är en "frassökning" och orden röd och bil måste stå tillsammans i angiven ordning.
En röd stor bil
En röd bil
Inte OK "främmande ord" förekommer
OK fras
90
En bil som är röd
En röd sko på en stor blå bil
Inte OK "främmande ord" förekommer och felaktig ordning
Inte OK "främmande ord" förekommer
Underkommandot xnear, närordssökning med exkludering, är ett mycket speciellt
underkommando, vilket beskrivs utförligare under avsnittet Närordssökning nedan. I kommandot
finns två grupper av ord: de som skall inkluderas i sökningen (som för det vanliga near
underkommandot) och de som skall exkludera poster från sökresultatet. Dessa två grupper av
ord avskiljs med två tecken: semikolon (;) och blank. De specificerade sökorden innan
semikolon (;) skall förekomma inom ett visst avstånd från varandra och i vissa fall även i
angiven ordning, medan de ord, som är angivna efter semikolon (;) inte får förekomma
tillsammans med orden innan semikolon (;).
Då man använder underkommandot near, kan man även ange två andra (inbäddade)
underkommandon: case och wordasis. I dessa fall kommer sökning att använda case-regler
respektive söka exakt.
Exempel 5:
FIND text:near(case(OM Gruppen) börsen, 2, 0)
I detta fall kommer case-regler att användas vid sökningen; detta för att inte förväxla
företagsnamnet OM med konjunktionen om. Man kan här blanda ord, som skall sökas med
case-regler och ord, som skall sökas på vanligt sätt.
Exempel 6:
FIND name:near(wordasis(OM Gruppen))
I detta fall kommer sökningen ske på exakt det man skrivit; detta för att inte förväxla
företagsnamnet OM med konjunktionen om. I detta fall kan man inte blanda exakt och vanlig
sökning.
Underkommandot fuzzy används, då man även vill godkänna sökord som inte ger en exakt
träff; stavfel, omkastade bokstäver etc. Genom att jämföra sökordet med ord som finns
indexerade kan även man godkänna ord, där det endast skiljer litet mellan sökordet och ordet i
indexet. Med hjälp av parametrarna nochars och limit, kan man bestämma hur mycket ordet i
indexet får skilja sig från det aktuella sökordet. Parametern nochars anger hur mycket orden får
skilja i längd, medan limit anger hur många bokstäver som får vara omkastade. Om
parametrarna utelämnas sätts nochar till 1 (ordet i index får vara ett längre eller kortare än
sökordet) och limit till 98 (betyder att 2 (100 – 98) omkastade bokstäver får förekomma). Första
bokstaven i index termen måste alltid vara densamma som den i sökordet.
Exempel:
FIND Förnamn:fuzzy(lars)
Förutom ordet Lars kommer även ord som: lasse, larz, lasr, larry, lage, lara, laura, liss, lassi etc.
att medtagas i sökningen.
Om man ökar toleransen till: skillnad i längd 2 och tre omkastade bokstäver,
FIND Förnamn:fuzzy(lars, 2, 97), tillkommer följande ord i sökningen: larson, larsen etc.
Underkommandot querylim används, då man vill exkludera termer som förekommer i många
poster. Om man har ett sökuttryck med operatorn OR och endast termer, som förekommer i
färre än 100 poster skall medtagas i sökningen skriver man på följande sätt:
FIND text:querylim(fastighetsbolaget OR balder OR och OR partners OR ab;100)
I detta exempel kommer endast de termer som förekommer i färre än 100 poster att medtagas i
sökningen.
Underkommandot numrange används, när man vill söka slutet intervall på ett numeriskt
begrepp, då kolumnen inte är indexerad som numerisk (kolumnen innehåller också vanlig text).
Om man i en vanlig ord-indexerad kolumn söker intervallet 10..20, får man träff på alla värden
som är större än eller lika med 10, vilket är: 10, 11, 12, 13 etc., men även 1111, 1211 etc. Detta
innebär att alla värden, där de två första siffrorna är större än eller lika med 10 är godkända. På
91
motsvarande sätt förhåller det sig med värden, som är mindre än eller lika med 20: 20, 19, 18,
17 etc., men även 1911, 1894 etc. Detta innebär att alla värden, där de två första siffrorna är
mindre än eller lika med 20 är godkända. Om man istället använder numrange, talar man om
för Boolware, att man skall söka exakt på det angivna intervallet (samma antal siffror). Detta
innebär, att endast de tal som ligger mellan 10 och 20 (inklusive) är godkända: 10, 11, 12, 13
,14, 15, 16, 17, 18 ,19 och 20.
Underkommandot searchviaindex används, då man - i stället för sökargument - har ett
absolut ordningsnummer på motsvarande term i aktuellt Boolware index. Detta kan användas i
grafiska applikationer, där man i stället för sökformulär använder Boolware index för att
"bläddra" fram till rätt sökord. Se exempel i se ”Handbok programmering” Kapitel 3 "XML API"
avsnitt "Hämta indextermer". Om man använder kommandot searchviaindexnogen, anger
man, att strängar genererade av Hookfunktioner (shrink) inte skall tas med. Det som skall stå
inom parenteserna är absoluta termnummer från det aktuella indexet. Dessa nummer kan
specificeras som enskilda nummer eller som slutna intervall. Ett slutet intervall i detta
sammanhang kan skrivas på två sätt: 1..100 eller 1-100. Numren och intervallen kan överlappa
varandra och får anges i vilken ordning som helst, dock måste intervallet följa vanliga regler
(startintervall är mindre än slutintervall). Alla nummer och intervall separeras med komma (,).
Skönsmässigt är det typen sträng, som antas, men genom att som första parameter ange en
indextyp (en siffra, som står beskriven i ”Handbok programmering” Kapitel 3 "XML API" avsnitt
"Hämta indextermer") avslutad med ett semikolon (:), kan man söka med en annan indextyp.
Nedan följer några korrekt angivet underkommando:
FIND Företagsnamn:searchviaindexnogen(7, 5, 1..10, 100, 70-77, 62)
I detta fall kommer indextermer som hämtas från indextypen sträng (inga termer genererade av
Hookfunktioner (shrink)) att ingå i sökningen.
FIND Företagsnamn:searchviaindex(1;7, 5, 1..10, 100, 70-77, 62)
I detta fall kommer indextermer som hämtas från indextypen ord att ingå i sökningen.
Underkommandot orsearch, effektiv eller-sökning, kommer att söka på alla specificerade ord
och utföra operatorn OR mellan varje ord. Det kommando (FIND/AND/NOT/XOR) som föregår
orsearch bestämmer vad man skall göra med resultatet. Då de aktuella orden finns i en fil, kan
man ange denna fil genom att specificera det kompletta filnamnet direkt föregånget av ’@’.
Exempel: AND Text:orsearch(@c:\boolware\testdatabas\storsökning.txt). Filen
innehåller de ord man skall söka i kolumnen Text. Kommandot utför en logisk OR mellan alla
ord och en logisk AND kommer att utföras mot det tidigare resultatet.
De ord man specificerar i underkommandot orsearch hanteras på samma sätt som ord, som
anges i en vanlig sökning. Observera, att automatisk trunkering inte gäller för dessa ord; för att
erhålla trunkering måste ordet avslutas med en asterisk (*). Om kolumnen är indexerad endast
för ordsökning, kommer de specificerade orden att hanteras som ord. Om kolumnen endast är
indexerad för strängsökning, kommer de specificerade orden att hanteras som strängar;
observera, att strängar som innehåller specialtecken (blank etc.), måste inneslutas inom
citationstecken (”) för att hanteras på ett korrekt sätt. Om kolumnen är indexerad för både
ordsökning och strängsökning, måste man ange vilken indexeringstyp man vill använda. Vanliga
regler gäller: om första ordet inleds med ett citationstecken, kommer samtliga ord att hanteras
som strängar, annars kommer ordsökning att utföras. Det går inte att blanda ordsökning och
strängsökning i samma orsearch, utan första ordet bestämmer.
Underkommandot orsearchex fungerar sökmässigt exakt som underkommandot orsearch.
Skillnaden är att detta underkommando dessutom spara alla ord som inte återfinns i Boolware
index i en speciell fil. Innehållet i denna fil kan sedan hämtas med hjälp av ett Executekommando, fetchnotfound (se Handbok programmering Kapitel 1. avsnitt ”Kommandon till
Boolware”).
Underkommandot compress tar han om singelbokstäver, som kan särskrivas eller skrivas
ihop med följande "skiljetecken". De skiljetecken som kan användas är blank (särskrivning),
punkt (.) snedstreck (/), plus (+) och ampersand (&). Kolumnen måste ha
indexeringsegenskapen compress.
92
Exempel:
FIND
FIND
FIND
FIND
FIND
FIND
FIND
etc.
Företagsnamn:compress(IFK Kalmar)
Företagsnamn:compress(I F K Kalmar)
Företagsnamn:compress(I/F/K Kalmar)
Företagsnamn:compress(I&F&K Kalmar)
Företagsnamn:compress(I+F+K Kalmar)
Företagsnamn:compress(I.F/K Kalmar)
Företagsnamn:compress(I&F+K Kalmar)
ger samma resultat som
ger samma resultat som
ger samma resultat som
ger samma resultat som
ger samma resultat som
ger samma resultat som
Det är dessutom onödigt att ange ett underkommando, då kolumnen har indexeringsegenskapen
compress. Ovanstående frågor kan skrivas utan underkommandot compress.
FIND Företagsnamn:IFK Kalmar
ger samma resultat som ovanstående compress
FIND Företagsnamn:I.F.K Kalmar ger samma resultat som ovanstående compress
FIND Företagsnamn:I/F/K Kalmar ger samma resultat som ovanstående compress
etc.
Underkommandot within gör det möjligt att söka på en "fras" inom ett ord. Med "fras" menas en
kombination av intilliggande bokstäver som ingår i ett ord.
Exempel:
FIND Företagsnamn:within(ba*)
Lumumba AB
Bamab International AB
Sandsjöbacka AB
Vaksala Tobak AB
Bombadill
Malens havsbad
Toshiba AB
Pizzabageriet AV
etc.
FIND Företagsnamn:within(ba)
Lumumba AV
Toshiba AB
kan ge följande resultat
ger följande resultat på samma tabell som ovan
Underkommandot case ger möjlighet att söka på ord skiftkänsligt. Normalt vill man inte skilja på
versaler och gemener i ett ord, men i vissa fall kan man få svårt att söka med precision: i en
databas innehållande företagsinformation i vanlig text, kan det vara svårt att söka fram företaget
”OM”, eftersom det kommer att förväxlas med det vanliga ordet ”om”. I detta fall är det viktigt att
separera detta ”ords” två betydelser genom att använda underkommandot case. Vid sökning
anger man då de ord, som är indexerade skiftkänsligt exakt som de skall se ut.
Exempel: FIND text:case(OM) AND börsen.
I detta fall kommer alla poster som innehåller OM med två versaler och ordet börsen, att sökas
fram.
Underkommandot case kan även användas i närordssökning:
FIND text:near(case(OM Gruppen) börsen, 2, 0)
I detta fall skall både ordet OM och Gruppen sökas skiftkänsligt, medan ordet börsen sökes på
vanligt sätt. Mellan de tre orden, vilka får stå i vilken ordning som helst, får inte mer än 2 andra
ord förekomma.
Under avsnittet ”Redigera indexeringsegenskaper för en tabell/vy” i kapitel 5, anges hur man
anger regelverket för att erhålla bästa möjliga precision.
93
Underkommandot wordasis ger möjlighet att söka på ord skiftkänsligt. Normalt vill man inte
skilja på versaler och gemener i ett ord, men i vissa fall kan man få svårt att söka med precision,
då exempelvis bokstäver med och utan diakriter har olika betydelse. I detta fall kan det vara
användbart att indexera orden med exakt lydelse. När man sedan söker, måste man specificera
söktermerna exakt, som de förekommer i texten för att erhålla träff.
Underkommandot wordasis kan även användas i närordssökning:
FIND name:near(wordasis(OM Gruppen))
I detta fall måste alla ord (OM och Gruppen) sökas exakt; ingen blandning mellan exakt sökning
och vanlig sökning är tillåten.
Underkommandot stringasis ger möjlighet att söka på strängar skiftkänsligt. Underkommandot
fungerar precis som wordasis, men hanterar strängar i stället för ord.
Underkommandot withinstring gör det möjligt att söka på en "fras" inom en sträng. Med "fras"
menas en kombination av intilliggande ord som ingår i en sträng.
Exempel:
FIND Personnamn:withinstring(karl urban*)
Andersson Karl Urban
Karlsson Karl Urban Willhelm
Svensson Karl Urbano
FIND Personnamn:withinstring(karl urban)
Andersson Karl Urban
kan ge följande resultat
kan ge följande resultat
Underkommandot geocircle används, då man vill söka geografiskt inom ett visst område. Med
hjälp av latitud och longitud kan man bestämma en punkt och genom att ange en radie
beskriver man det område man vill söka inom. Underkommandot fungerar sedan som vilket
annat underkommando som helst; man kan kombinera det med andra operatorer och
kommandon. Latitud och longitud definieras med kolumnnamn och det finns flera olika format
(GPS (WGS84), RT90 och System32/34) för att ange koordinaterna, som skall följa
kolumnnamnen.
Exempel:
Antag att man från en given punkt vill söka fram alla restauranger inom 300 meter.
FIND Bransch:restaurang AND geocircle(lat:N59 20 43.36; long:E17 57 54.65;
R=300)
OBS Det är mycket viktigt, att parametrarna anges i rätt ordning: latitud; longitud.
Underkommandot georectangle används, då man vill söka geografiskt inom ett visst område.
Med hjälp av latitud och longitud kan man bestämma två punkter. Dessa två punkter antas vara
motstående hörn i en rektangel och ytan i denna rektangel är det område man vill söka inom.
Underkommandot fungerar sedan som vilket annat underkommando som helst; man kan
kombinera det med andra operatorer och kommandon. Latitud och longitud definieras med
kolumnnamn och det finns flera olika format (GPS (WGS84), RT90 och System32/34) för att
ange koordinaterna, som skall följa kolumnnamnen.
Exempel:
Antag att man från två givna punkter vill söka fram alla biografer. Punkterna är två motstående
hörn i en rektangel.
FIND Bransch:bio* AND georectangle(lat:N59 20 43.36; long:E17 57 54.65; lat:
N59 24 43.36; long:E18 00 17.65)
94
Underkommandot geopolygon används, då man vill söka geografiskt inom ett visst område.
Detta område ska vara en sluten polygon som anges med koordinatpar för varje hörn i
polygonen. Polygonen beskrivs m.h.a. koordinatpar enligt standarden ”Well Known Text”;
POLYGON((x1 y1, x2 y2,…, x1 y1)). Observera att x-axeln är longitudvärdet och y-axeln är
latitudvärdet och koordinaterna åtskiljs av ett blanktecken och koordinatparen åtskiljs av ett
kommatecken.
Underkommandot fungerar sedan som vilket annat underkommando som helst; man kan
kombinera det med andra operatorer och kommandon. Latitud och longitud definieras med
kolumnnamn och det finns flera olika format (GPS (WGS84), RT90 och System32/34) för att
ange koordinaterna.
Exempel:
Hitta alla poster inom angiven nedan beskriven polygon med brytpunkterna (75, 40), (100, 50),
(120, 75), (130, 30), (75, 40). Latitudkolumnen heter lat och longitudkolumnen heter long.
Y-värden
80
70
60
50
40
Y-värden
30
20
10
0
0
50
100
150
Find geopolygon(lat; long; POLYGON((75 40, 100 50, 120 75, 130 30, 75 40)))
Om data är lagrat i WGS84 anges koordinaterna med citationstecken enligt:
Find geopolygon(lat; long; POLYGON(( "E 8 38 12.39" "N 49 52 11.83", "E 8 38
16.71" "N 49 52 7.10", "E 8 38 26.44" "N 49 52 3.37", "E 8 38 15.01" "N 49 52
5.51", "E 8 38 12.39" "N 49 52 11.83")))
Underkommandot syn, synonymer, kommer att - före sökningen startar - hämta alla
synonymer för angivet sökord. Alla funna synonymer som hittas för sökordet kommer att slås
samman med operatorn OR innan det begärda kommandot utförs.
Underkommandot stem, grundformning, är ett sätt att neutralisera söktermer och enbart söka
på dess ordstam. Exempelvis om sökning sker på ordet stolar kommer dokument som
innehåller orden stol, stolarna, stolen etc. och självklart stolar finnas med i resultatet.
Underkommandot sound, fonetisk, kan användas i samband med sökningar på namn, när man
inte vet den exakta stavningen. Sökningen utgår i detta fall mer från uttalet än stavningen; t.ex.
det svenska bolaget Ericsson kommer att hittas även om Ericsson är stavat: Eriksson, Erikson,
Ericson, Erixon etc.
95
Man kan i vissa fall erhålla "konstiga" kombinationer, då man använder sound och "linkwords"
tillsammans. För att råda bot mot detta kan man kombinera underkommandot nolikwords (se
nedan) och underkommandot sound.
Exempel: FIND Namn:nolinkwords(sound(jon eriksson))
I detta fall kommer endast sökning ske på de fonetiska orden jon och eriksson; inga "linkwords"
kommer att användas i sökningen.
Underkommandot noti, exkluderad sökning, kan användas i samband med sökningar, då man
vill söka fram alla poster som inte innehåller specificerade Termer. Detta görs i normala fall
med hjälp av kommandot/operatorn NOT, men det kan vara besvärligt, då man vill söka efter de
poster som saknar information över huvudtaget i en kolumn. Det kommando
(FIND/AND/NOT/XOR) som föregår noti bestämmer vad man skall göra med resultatet. Då de
aktuella orden finns i en fil, kan man ange denna fil genom att specificera det kompletta
filnamnet direkt föregånget av ’@’.
Exempel: AND Text:noti(@c:\boolware\testdatabas\not-terms.txt). Filen innehåller de
ord man skall söka fram i kolumnen Text. Endast poster som inte innehåller någon av dessa
termer kommer att vara med i resultatet. En logisk AND av detta resultat kommer sedan att
göras mot det tidigare resultatet.
Underkommandot prefix, sök prefixerat, kan användas i hierarkisk text (XML kodning) för att
öka precisionen i sökningen på fält och attributvärde. Underkommandot innehåller två delar:
attributvärden (prefix) och söktermer. Dessa två delar avskiljs med ett semikolon (;). Prefixen
delas in i grupper, vilka beskriver hierarkin i det aktuella fältet. Varje enskilt prefix måste
omslutas av citationstecken (”) och varje prefixgrupp avslutas med ett kommatecken (,). Den
sista (eller enda) prefixgruppen skall i stället för ett kommatecken avslutas med ett semikolon.
De söktermer, som följer, specificeras på vanligt sätt. En kort beskrivning av syntaxen med hjälp
av ett exempel återfinns under avsnitt ”Indexering upprepade fält” i Kapitel 5.
Underkommandot dupstamp, multipla kategorier, används, då man skall söka fram alla poster
som har åsatts mer än en kategori vid automatisk kategorisering (se avsnittet ”Stämpla flera
kategorier” i Kapitel 5).
Underkommandot dupeliminate används, då man vill eliminera duplikat ur den aktuella
svarsmängden. Duplikat elimineras med hjälp av olika duplikatregler. För varje regel anger man
vad som bestämmer vilka poster som är duplikat och vilken prioritetsordning de har. Ett
specialfall uppstår då det inte finns något resultat. I detta fall selekteras "huvud posterna" för
alla duplikat. Regler för duplikat skapas för en tabell; flera regler kan finnas för en tabell. Hur
man skapar duplikatregler beskrivs i Kapitel 5 "Redigera Indexeringsegenskaper" sektion
"Redigera Indexeringsegenskaper för en tabell/vy" under fliken DUPLIKAT.
Underkommandot nolinkwords används, då man vill undvika sökning med "linkwords". Detta
underkommando gör att inga "linkwords" kommer att användas vid sökningen. Detta är mest
användbart i kombination med underkommandot sound (se ovan).
Underkommandot set, resultat från sparat Set, kan användas, då man vill återanvända
resultatet från en redan utförd fråga. Ingen sökningen utförs, utan det sparade resultatet
används direkt i den aktuella sökningen.
Underkommandot query, söksträng från sparad Fråga, kan användas, då man vill återanvända
söksträngen för en redan utförd söksekvens. De sparade kommandona, argumenten och
operatorerna används i den aktuella sökningen.
Underkommandot result, slutresultat från sparat Resultat, kan användas, då man vill
återanvända resultatet från en redan utförd söksekvens. Ingen sökningen utförs, utan det
sparade resultatet används direkt i den aktuella sökningen.
96
Underkommandot scratch, ett sparat resultat, kan användas, då man vill återanvända resultatet
från en redan utförd sökning. Ingen sökning utförs, utan det sparade resultatet används direkt i
den aktuella sökningen. Skillnaden mellan detta underkommando och set/result är att resultatet
inte sparas på disk, utan finns i minnet. Underkommandot används vanligtvis i Boolware
Flöden.
Underkommandot rpath, används för att tala om ”stigen” mellan olika tabeller som ingår i en
relate-fråga (se avsnittet (Sök relaterat (Join) nedan). Underkommandot skall stå direkt efter
kommandot (FIND, ANDF, ORF etc.) och följs sedan av frågan. Parametrarna i rpath skall
anges parvis inom parentes på följande sätt: söktabell.kolumn, måltabell.kolumn.
Underkommandot maxqueryexecutiontime används för att sätta en maximal exekveringstid i
millisekunder för det aktuella kommandot. Underkommandot måste följa omedelbart efter det
aktuella kommandot. Den satta exekveringstiden gäller endast för detta kommando. Om ingen
tid är satt, gäller den "Max exekveringstid" man satt för söksessioner i Boolware Manager. Då
den maximala exekveringstiden för kommandot överskrids, kommer sökningen att avslutas med
en felkod.
Sökexempel:
Boolwarefråga
FIND namn:robert AND ort:boston
Betydelse
Hitta alla Robert i Boston. Hitta alla dokument, som
innehåller robert i namn Kolumnen och boston i ort
Kolumnen.
FIND text:röd AND text:bil*
Hitta alla röda bilar i Kolumnen text. Nu hittas alla
dokument, som innehåller orden röda och ord som börjar
på bil. OBS; I ett dokument kan det stå “röd stuga och en
liten bil” och detta kommer att vara korrekt.
FIND text:near(röd bil*, 3, 1)
Hitta alla röd bil, där ordavståndet inte är mer än tre ord
och i angiven ordningsföljd i Kolumnen text. I detta fall
hittas enbart de dokument innehållande röd bil.
FIND text:near(röd bil, 1, 1)
Hitta alla röd bil som en fras – inga andra ord får
förekomma mellan dess två ord - i Kolumnen text. (I
detta fall får inte Kolumnen text vara indexerad som
Sträng, men med Närord eller Närord rad).
FIND text:near(röd bil)
Då inga parametrar är angivna för ordavstånd och
ordningsföljd, används ordavstånd 5 och ingen ordning
(0).
FIND text:xnear(röd bil; Volvo Saab, 10)
Hitta alla röd bil som fras – inga andra ord får förekomma
mellan dessa två ord - i Kolumnen text. Om Kolumnen är
indexerad som Sträng, kommer strängsökning att utföras
istället för fras.
FIND text:"röd bil"
FIND namn:robert AND “”:röd AND bil
FIND bil* AND (röd or svart)
Hitta alla röd bil, där ordavståndet inte är mer än
tio ord i Kolumnen text. Orden kan förekomma i
vilken ordning som helst. Om orden röd bil endast
förekommer i samband med orden Volvo eller
Saab, finns inte dokumentet med i sökresultatet.
Hitta alla robert i namn Kolumnen och röd bil i "Fri
Text".
Hitta alla röd eller svart bil i "Fri Text".
97
FIND Vinst:>1000
Hitta alla dokument med en vinst större än 1 000.
FIND Vinst:<3000
Hitta alla dokument med en vinst mindre än 3 000.
FIND Vinst:500..900
Hitta alla dokument där vinsten ligger mellan 500 och 900
(inklusive).
AND text:near(blå
Hitta alla dokument som har sökorden blå och sammet inom 5
ords avstånd i vilken ordning som helst. AND detta resultat med
föregående frågor.
sammet)
NOT text:syn(röd)
Före sökningen påbörjas, hämta alla synonymer för ordet röd.
Dessa ord OR:as ihop och resultatet NOT:as med resultatet
från föregående sökningar.
OR text:thes(djur)
Före sökningen påbörjas, alla underord till djur hämtas. Dessa
termer OR:as ihop och resultatet OR:as med resultatet från
föregående sökningar.
AND text:stem(stolar)
Stem ordet stolar (stol) används för sökning. Detta innebär att
dokument innehållande ord som: stol, stolar, stolen etc. hittas.
Detta resultat AND:as ihop med föregående sökningar.
FIND namn:sound(eriksson)
Ordet eriksson kodas upp med en specialalgoritm för att återge
uttalet istället för stavningen innan sökning görs. Detta innebär
att dokument innehållande orden: ericsson, ericson, erixon,
erikson också kommer att hittas.
FIND namn:noti(*)
Sök fram samtliga poster som saknar information över huvud
taget i kolumnen namn.
AND sim(valfri text)
Den valfria texten, normalt inkopierad från ett dokument inom
databasen eller annan valfri text. De dokument som kommer att
hittas – i detta exempel – enbart de i nuvarande resultat
(Kommandot är AND). Resultatet sorteras I likhetsordning;
största likheten först.
FIND sim(valfri text <CRLF>
.#$Vinst:20;10 <CRLF>
.#$Oms:2000;20 <CRLF>
.#$Anst:20;15;3)
Den valfria texten behandlas som i exemplet ovan. Ny rad som
inleds med .#$ indikerar numerisk likhetssökning. I detta fall
anges kolumnerna Vinst, Oms och Anst. Värdet man skall utgå
från är specificerat direkt efter kolumnnamnet och toleransen
anges i procent separerat med semikolon. Som sista parameter
kan en vikt anges.
TABLES(*) FIND text:eriksson
Sök efter eriksson i kolumnen text i samtliga tabeller.
BACK
Backa ett steg i Sökhistoriken
FORWARD
Ett steg framåt i Sökhistoriken
FIND dupstamp()
Söker fram samtliga poster, vilka åsatts mer än en kategori vid
automatisk kategorisering.
Söker endast fram "huvud posterna" för angiven regel.
Se Kapitel 5 "Redigera indexeringsegenskaper" fliken
DUPLIKAT.
Mellan det sparade resultatet för S4 och S5 utförs en boolesk
OR.
FIND dupeliminate(regel)
FIND set(s4) OR s8
FIND query(fråga1) AND
query(fråga4)
Sökning på de kommandon, argument och operatorer som
sparats i ”fråga1” utförs och motsvarande sökning utförs för
98
kommandon, argument och operatorer som sparats i ”fråga4”
mellan de två resultaten utförs en boolesk AND.
FIND result(resultat1) NOT
result(resultat4)
Mellan det sparade resultatet för ”resultat1” och ”resultat4”
utförs en boolesk NOT.
RELATE(Customers)
FIND Products.ProuctName:Uncle
Bob’s Organic Dried Pears
Söker fram alla poster i tabellen Products kolumn
ProductName som innehåller: Uncle Bob’s Organic Dried
Pears. Detta resultat kommer sedan transformeras - via
andra tabeller till tabellen Customers. Mer detaljerat
exempel finns under rubriken: ”Sök relaterat” nedan.
FIND maxqueryexecutiontime(40)
text:near(blå sammet) AND
Ort:Kalmar
Om frågan tar mer än 40 millisekunder kommer den att
avbrytas med en felkod.
Exempel på användning för interaktiv sökning etc.
Nedan beskrivs den sökfunktionalitet som finns inbyggd i Boolware. Följande funktioner kommer
att beskrivas: inspektera indextermer i ett Boolware Index, sökning i ett Boolware Index baserad
på sökkriterier, ranka resultatet från en sökning, navigera i sökhistorik och slutligen leverera
begärt data från datakällan.
Vad ett Boolware Index är
När en datakälla blivit registrerad för att indexeras av Boolware, skapas ett antal filer för varje
markerad kolumn i alla valda tabeller. Söktermerna i de olika kolumnerna kan ges ett antal olika
attribut. Dessa attribut återspeglar sedan vilken sökfunktionalitet, som kan utnyttjas för de olika
kolumnerna. Detta innebär, att varje term kan indexeras på flera sätt. Varje term påförs en
indextyp, vilken talar om sättet den är indexerad på och i förlängningen hur man kan söka på
den. Några typiska indextyper är: ord-indexerad, sträng-indexerad, fonetiskt indexerad etc.
Varje kolumn har sitt eget index, vilket i sin tur består av ett antal filer. Antalet filer är beroende
av vilken sökfunktionalitet, som efterfrågas. Exempelvis om man efterfrågar närordssökning
eller rankning på förekomster eller frekvens, skapas speciella filer.
Två filer måste dock alltid finnas i ett Boolware Index: filen som innehåller samtliga söktermer
och filen som innehåller referenser till alla rader i datakällan.
Visa alla sökbara ord
Alla indexerade (och därmed sökbara) ord kan listas av Boolware. I API:et finns funktioner, där
man på ett enkelt sätt kan presentera samtliga söktermer i ett Boolware Index. Varje sökbar
term har en indextyp, vilken anger på vilket sätt termen kan sökas. När man presenterar
söktermerna i en kolumn, kan man därför ange vilken indextyp man är intresserad av och
endast de termer, som tillhör denna indextyp, kommer att presenteras. Man kan börja
presentationen var som helst i ett angivet index genom att specificera en term eller början på en
term och på så sätt få presentationen att börja så nära denna term som möjligt (om den angivna
termen inte finns i index). Om man inte anger någon term, kommer presentationen att börja med
första termen i det aktuella indexet. Det finns också möjlighet att starta från ett ordningsnummer
inom den aktuella indextypen.
99
Om man har utfört en fråga och endast är intresserad av termer, som fortfarande finns i det
framsökta resultatet, använder man funktionen relevant index.
Genom att ange ”jokertecken” i den specificerade termen, erhåller man endast de termer som
motsvarar den angivna termen. Denna funktion kan användas för både komplett och relevant
index (se exempel ”Handbok programmering” Kapitel 3 ”XML API”).
Det finns också möjlighet att presentera grupperat index på tre olika sätt (se nedan
”Presentation av grupperat Index”).
Att presentera index termer med avseende på förekomst (frekvens) är ett tredje sätt som kan
användas. I detta fall anges ett antal i stället för term, då man vill positionera sig i ett
frekvensindex.
Som svar erhålls, förutom söktermen, ett numeriskt begrepp, vilket anger antalet poster den
aktuella termen förekommer i. Antalet termer, som skall hämtas från Boolware Index bestäms
av applikationen.
Man kan också exportera de framsökta termerna till en angiven fil för senare bearbetning.
En utförlig beskrivning av de olika indextyperna och de olika sätt man kan hämta fram
indextermer på finns beskrivna i ”Handbok programmering” Kapitel 3 ”XML API”).
Presentation av komplett Index
Den vanligaste användningen av denna funktion är att presentera söktermer ur det kompletta
indexet, vilket innebär, att samtliga termer med den angivna indextypen för den utvalda
kolumnen kommer att presenteras. Det numeriska begreppet anger i detta fall förekomsten
inom hela databasen. Denna funktion kan användas när som helst - även innan någon sökning
förtagits.
Presentation av relevant Index
Efter en sökning har utförts, kan det i vissa fall vara intressant att undersöka vilka söktermer,
som fortfarande finns med i det aktuella resultatet. För att åstadkomma detta, skall man
använda funktionen ”Zoom”. Denna funktion arbetar på samma sätt som presentation av det
kompletta index, men endast söktermer, vilka fortfarande finns med i rader, som ingår i
resultatet kommer att presenteras. Två numeriska begrepp ingår i detta fall i svaret för varje
sökterm. Det första numeriska begreppet anger förekomsten i hela databasen (precis som för
presentation av komplett index), medan det andra numeriska begreppet anger antalet
förekomster inom det aktuella resultatet. Naturligtvis kan presentation av relevant index endast
användas efter en sökning.
Presentation av grupperat Index
Ett grupperat index består av termer, vilka grupperats med utgångspunkt från termernas
tillhörighet. Vanligtvis kan man betrakta ett grupperat index som någon typ av hierarkiskt index.
Det finns flera sätt att gruppera ett index: ett datum kan exempelvis grupperas på år, månad och
dag; en SNI-kod kan grupperas på huvudgrupp, tillverkningsgrupp och undergrupp etc.
Grupperingen har betydelse i såväl sökning (se Kapitel 5 ”Redigera indexeringsegenskaper”
avsnitt ”Grupperad”) som presentation av de termer som ingår i det grupperade indexet.
I Boolware finns det fyra sätt att presentera ett grupperat Index:
1.
Det vanliga sättet, där den lägsta nivån (hela termen) presenteras i alfabetisk
ordning
100
2.
3.
4.
Hierarkiskt sorterad på antal träffar; huvudgrupp, tillverkningsgrupp och undergrupp
Sann indexordning, där varje grupp presenteras för sig
Hierarkiskt sorterad på termer i alfabetisk ordning
Naturligtvis kan alla dessa presentationssätt kombineras med relevant Index; endast de termer
som ingår i det senaste sökresultatet presenteras.
Exempel:
I en tabell finns en kolumn som innehåller datum. Denna kolumn har indexerats med attributet
grupperad och grupperna är: år (4), år/månad (6) och år/månad/dag (8). Siffrorna inom parentes
visar antalet tecken som ingår i varje grupp. Efter en frågesession har man erhållit 100.000
träffar och vill nu presentera relevant grupperat index på de ovan nämnda fyra sätten.
1.
Hela termen presenteras i alfabetisk ordning (siffrorna beskriver antalet relevanta träffar)
19040101
19040102
(26) Detta är den första relevanta termen i detta Index
(30) Detta är den andra relevanta termen i detta Index
•
•
19500101
(47) Detta är en relevant term mitt i detta Index
•
•
20021230
20021231
2.
(21) Detta är en relevant term i slutet av detta Index
(19) Detta är en relevant term i slutet av detta Index
Hierarkisk presentation (år/månad/dag), där störst antal träffar kommer först
1945
194503
19450321
19450312
19450310
19450327
(14.837)
(1.318)
(60)
(52)
(48)
(47)
Detta år har de flesta träffarna
Denna månad i det aktuella året har flest träffar
Denna dag i denna månad i detta år har flest träffar
(1.154)
(53)
Denna månad i det aktuella året har näst flest träffar
(5.998)
(718)
(22)
(19)
Detta år har minst antal träffar
Denna månad i det aktuella året har flest träffar
Denna dag i denna månad i detta år har flest träffar
•
•
194504
19450411
•
•
1950
195003
19500310
19500327
3.
Sann indexordning, där varje grupp presenteras för sig (år/månad/dag)
(7.286)
(7.989)
Första året i detta Index
Andra året i detta Index
(6.994)
(6.004)
Näst sista året i detta Index
Sista året i detta Index
190401
(828)
190402
•
•
(698)
Första årets första månad
Första årets andra månad
1904
1905
•
•
2001
2002
•
•
101
200211
200212
(730)
(698)
Sista årets näst sista månad
Sista årets sista månad
(26)
(30)
Första årets första dag
Första årets andra dag
(21)
(19)
Sista årets näst sista dag
Sista årets sista dag
•
•
19040101
19040102
•
•
20021230
20021231
4.
Hierarkiskt sorterad på termer i alfabetisk ordning
1904
190401
19040101
19040102
(14.837)
(1.318)
(60)
(60)
Första året
Första månaden i första året
Första dagen i första månaden i första året
Andra dagen i första månaden i första året
(60)
(60)
Näst sista dagen i sista månaden i sista året
Sista dagen i sista månaden i sista året
(52)
(48)
(47)
Andra året
(1.154)
(53)
En term mitt i detta Index
(5.998)
(718)
(22)
(19)
Sista året
Första månaden i sista året
En dag i första månaden i sista året
Sista dagen i sista månaden i sista året
•
•
19041230
19041231
•
•
1905
19050310
19050327
•
•
194504
19450411
•
•
2002
200201
20020110
20021231
Presentation av Frekvensindex
Presentationen av ett Index i Boolware sker vanligtvis i alfabetisk ordning. I vissa fall kan det
vara intressant att presentera termerna i frekvensordning. Frekvens i detta sammanhang
betyder i hur många poster den aktuella termen förekommer.
Liksom för presentationen i alfabetisk ordning, kan man i detta fall presentera termer ur hela
Index eller endast ta med relevanta termer (termer som återfinns i det aktuella resultatet). Man
kan också välja typ av indexering (ord, sträng etc.).
Funktionen export fungerar i detta index precis som för index i alfabetisk ordning.
Termerna kan presenteras i stigande eller fallande (skönsvärde) ordning med avseende på
frekvens.
Om flera termer har samma frekvens, kommer de termerna alltid att sorteras i stigande
alfabetisk ordning inom den aktuella frekvensen.
För att göra denna presentation mer effektiv, kan man ange gränsvärden: >[=]n eller <[=]n, där
n är den frekvens som avses. Om man är intresserad av de vanligast förekommande termerna
kan det vara onödigt att ta med de termer som endast förekommer i ett fåtal poster.
102
Då ett index innehåller många unika termer - låt oss anta 20 miljoner i en tabell med 10 miljoner
poster -, kan det vara lämpligt att begränsa urvalet med ovanstående parametrar (>[=]n eller
<[=]n). Om man endast är intresserad av de vanligaste termerna (några tusen), kan det vara
onödigt att ordna samtliga 20 miljoner termer; att begränsa antalet termer påverkar snabbheten
markant.
Då man har extraherat de termer man är intresserad av, finns det möjlighet att positionera inom
den framsökta mängden termer genom att ange den frekvens man vill starta från. Detta görs
genom att man anger en ren antalsuppgift (n), vilken inte föregås av något tecken (>,<,=). Detta
motsvarar då man anger början av ett ord vid presentation av index i alfabetisk ordning.
Nedan följer två exempel, vilka visar hur man kan använda frekvensindex.
I dessa exempel anges endast principen för att presentera termer. Den exakta syntaxen finns
beskriven i ”Handbok programmering”.
Exempel 1:
Efter en sökning i tabellen, Artiklar, önskas de vanligaste termerna i kolumnen, Text, från det
framsökta resultatet. Resultatet från sökningen är 12.437 och man är bara intresserad av termer
(ord), som förekommer i mer än 200 poster. Presentationen skall ske i fallande ordning; de
termer som förekommer i flest poster skall presenteras först.
index Artiklar ”[Text] count desc” >200 1 0 50 0
index det aktuella kommandot
Artiklar
den aktuella tabellen
Text
den aktuella kolumnen
count
den aktuella typen frekvensordning (term eller utelämnat ger alfabetisk
ordning)
desc
fallande ordning (asc ger stigande ordning; utelämnat ger fallande ordning)
>200
man vill endast ha de termer, som finns i fler än 200 poster
(godkända värden är: >n, >=n, <n, <=n samt n, då n förekommer naket, utan
>,<,=, görs ingen ny sökning, utan endast en positionering i framsökta
termer)
1
0 = hela index; 1 = relevanta termer
0
typ; 0 = skönsvärde, 1 = ord, 2 = sträng, 3 = grundformning, 4 = fonetisk etc.
50
antal önskade termer
0
0 = positionera till angiven term; 1 = fortsätt från senaste presenterade term
Exempel 2:
Positionera till den första term som finns i 500 poster (eller närmast lägre), innan presentationen
påbörjas. Alla poster som förekommer i färre poster än 500 kommer att listas. Det finns endast
termer som förekommer i fler än 200 poster (se Exempel 1 ovan), varför presentationen slutar
vid sista termen som finns i 201 poster.
index Artiklar ”[Text] count desc” 500 1 0 50 0
index det aktuella kommandot
Artiklar
den aktuella tabellen
Text
den aktuella kolumnen
count
den aktuella typen frekvensordning (term eller utelämnat ger alfabetisk
ordning)
desc
fallande ordning (asc ger stigande ordning; utelämnat ger fallande ordning)
500
man vill starta från den term som finns i 500 poster
(godkända värden är: >n, >=n, <n, <=n samt n, då n förekommer naket, utan
>,<,=, görs ingen ny sökning, utan endast en positionering i framsökta
termer)
1
0 = hela index; 1 = relevanta termer
0
typ; 0 = skönsvärde, 1 = ord, 2 = sträng, 3 = grundformning, 4 = fonetisk etc.
103
50
0
antal önskade termer
0 = positionera till angiven term; 1 = fortsätt från senaste presenterade term
Viktigt: Funktionen frekvensindex används oftast för att selektera de vanligaste/ovanligaste
termerna i hela index eller i ett relevant index (baserat på senaste sökresultat). För att extrahera
dessa termer, måste emellertid hela index läsas (en ”godkänd” term kan ju vara den sista). Om
man sedan inte angivit något gränsvärde kommer samtliga termer ordnas innan de presenteras,
vilken kan ta mycket lång tid, då indexet innehåller många miljoner unika termer.
Det är därför en mycket god idé att alltid ange ett gränsvärde, då man inte vill presentera
samtliga termer. Antag att vi har en tabell med några miljoner poster och ett index, som
innehåller vanlig text med ca. 10 miljoner unika ord. Cirka 70% av alla termer förekommer då
vanligtvis i färre än 500 poster. Om man i detta fall sätter en gräns >500, kommer uttaget att gå
avsevärt snabbare och man kommer ändå att extrahera de 3 miljoner vanligaste termerna.
Antal träffar fördelade över ett eller flera andra värden (SubZoom)
Boolware kan visa antal funna förekomster hierarkiskt fördelat över värden i andra kolumner.
Denna funktionalitet är en utbyggnad av vanlig zoom, och kallas därför sub-zoom. Sub-zoom
kan ställa flera kolumner mot varandra i flera nivåer, och avgränsar sig (zoomar) nedåt i
resultatet med gradvis ökad precision. Sub-Zoom arbetar alltid mot aktuellt resultat.
Sub-zoom har inget eget kommando, utan det är det vanliga index-kommandot som används. I
stället har syntaxen för kolumnen utökats för att aktivera sub-zoom. Parenteser används för att
uttrycka nivåer, och komma för att separera kolumner inom samma nivå. Upp till fem kolumner
kan användas.
Om inget annat sägs ordnas funna värden inom varje nivå i alfabetisk ordning. Man kan dock
välja stigande eller fallande antalsordning i stället, genom att ange ”count asc/desc” efter de
valda kolumnerna.
Exempel: Antag att en tabell innehållande kolumnerna Land, Språk och MediaTyp. Med hjälp
Index-kommandot kan man presentera ett sökresultat fördelat på dessa kolumner.
index "table" "Land(Språk,MediaTyp)" "" 1 2 5000 0
[Land]
Finland, 7 funna
[Språk]
eng, 1 funna
swe, 6 funna
[MediaTyp]
net, 4 funna
paper, 3 funna
[Land]
Sverige, 13 funna
[Språk]
eng, 4 funna
swe, 9 funna
[MediaTyp]
net, 7 funna
paper, 6 funna
Ovanstående kommando begär fram en listning av antal träffar fördelat på Land, och inom land
på Språk och MediaTyp respektive. Observera att Språk och MediaTyp visas på samma nivå,
och att båda är fördelade över deras övre nivå Land. 1 betyder att endast termer ur aktuellt
resultat skall hämtas. 2 betyder att man vill ha strängar. 5000 är antal önskade termer och
slutligen 0 betyder att det inte är fortsättning.
Exempel 2: Visa antal företag fördelat på Geografi och Storlek (antal anställda).
104
index "table" "Ort(Postnummer([Antal anställda])) " "" 1 2 5000 0
[Ort]
SOLNA, 2290 funna
[Postnummer]
169 30, 11 funna
[Antal anställda]
1, 1 funna
2, 3 funna
3, 5 funna
4, 1 funna
8, 1 funna
[Postnummer]
169 31, 17 funna
[Antal anställda]
1, 4 funna
2, 6 funna
3, 2 funna
5, 2 funna
8, 1 funna
11
, 1 funna
12, 1 funna
[Postnummer]
169 32, 13 funna
[Antal anställda]
1, 1 funna
2, 2 funna
3, 7 funna
13, 1 funna
27, 2 funna
Som standard ordnas värdena i alfabetisk ordning. Låt oss i stället ordna värdena fallande på
frekvens:
index "table" "Ort(Postnummer([Antal anställda])) count desc" "" 1 2 5000 0
[Ort]
SOLNA, 2290 funna
[Postnummer]
169 31, 17 funna
[Antal anställda]
2, 6 funna
1, 4 funna
3, 2 funna
5, 2 funna
8, 1 funna
11
, 1 funna
12, 1 funna
[Postnummer]
169 32, 13 funna
[Antal anställda]
3, 7 funna
2, 2 funna
1, 2 funna
13, 1 funna
27, 1 funna
[Postnummer]
169 30, 11 funna
[Antal anställda]
3, 5 funna
2, 3 funna
1, 1 funna
4, 1 funna
8, 1 funna
Viktigt: Efter införandet av funktionen SubZoom version 2.5.0.40, måste kolumnnamn
innehållande parenteser omges av citationstecken.
105
Utökad statistik mellan flera Boolware index
Denna funktion är en utbyggnad av funktionen SubZoom, som beskrivs ovan.
Funktionen kan användas för att utföra enkla analyser, där värden från de olika kolumnerna
"zoomas" fram ur det aktuella resultatet.
För att kolumnerna skall vara användbara i denna funktion, måste de vara indexerade som
sträng eller numeriskt och vara lagrade i Boolware datafil, då man skapar basfiler.
Funktionen kan delas upp i tre huvuddelar: 1. skapa rapportmallar, 2. bygga basfiler samt 3.
skapa underlag för diagram med hjälp av skapade basfiler.
Nedan följer i punktform hur man använder denna funktion:
1. Skapa en rapportmall
1.1 Tilldela rapportmallen ett unikt namn
1.2 Ange vilka kolumner, som skall ingå och deras hierarkiska ordning
2. Bygg rapportmall
2.1 Skapa basfiler för alla poster, som ingår i tabellen
3. Använd den skapade rapportmallens basfiler för att skapa underlag för diagram
3.1 Välj "statistik" (max, min, sum eller avg/mean)
3.2 Ange maximala antalet observationer på lägsta nivå
De två första punkterna utförs med hjälp av Boolware Manager, medan den tredje punkten
utförs med hjälp av en applikation, som är ansluten mot Boolware (för test kan Boolware Demo
applikation användas; den innehåller emellertid inga rutiner för att framställa diagram).
Resultatet består av poster, där värdena är beräknade enligt den "statistik" man har valt.
Posterna är sorterade så att de "bästa" posterna - beroende på vilken "statistik" man valt kommer först.
Posterna skickas lämpligen till ett program, som skapar någon typ av grafisk presentation av
den önskade statistiken: stapeldiagram, liggande diagram, cirkeldiagram, histogram,
linjediagram etc., efter de har blivit "masserade" för att passa valt program.
Hur man skapar en Rapportmall
Med hjälp av Boolware Manager kan man bygga upp ett obegränsat antal namngivna
rapportmallar. Varje rapportmall innehåller de kolumner, som skall ingå och deras hierarkiska
ordning.
I trädstrukturen över databaser, tabeller och vyer väljer man "Rapportmallar" för den aktuella
databasen. Man kommer nu till ett fönster 'Rapportmall', där man börjar med att välja vilken
tabell man skall skapa rapportmallen för.
När man valt tabell, skall man trycka på 'Lägg till' och fylla i uppgifter i fönstret 'Redigera
rapportmall'.
Man börjar med att ge rapportmallen ett unikt namn samt väljer en kolumn (endast kolumner,
som är giltiga för en rapportmall visas) för den första dimensionen. Då man angivet den första
dimensionen, är det valfritt att välja ytterligare en dimension eller direkt ange kolumnen för
aggregering. Då man fyllt i alla uppgifter, trycker man OK.
Man har nu skapat en rapportmall och för att den skall bli användbar, måste man bygga basfiler
för denna rapportmall. Genom att trycka på knappen 'Bygg' aktiverar man byggandet av dessa
basfiler. Detta innebär, att värden från de angivna kolumnerna från alla poster i tabellen
extraheras i rätt hierarkisk ordning och sparas som basfiler under det angivna namnet på
106
rapportmallen. Beroende av storleken på de valda kolumnerna, kan detta ta litet tid och
förloppet kan följas på vanligt vis under fliken körningar.
De skapade basfilerna används sedan, då man vill utföra olika "statistik" mot olika resultat.
Följande "statistikmetoder" finns: Högsta värdet (max), Lägsta värdet (min), Medelvärdet
(avg/mean) samt Summan (sum).
Några exempel (som kommer att användas i "Hur man använder en Rapportmall" nedan):
Exempel 1:
I en tabell, Företag, som innehåller geografisk och ekonomisk information om företag, vill man
utföra statistik på antal anställda fördelade på orter. I fönstret 'Rapportmall' väljer man tabellen
Företag och trycker på 'Lägg till'. I fönstret 'Redigera rapportmall' ger man rapporten ett unikt
namn (FöretagOrtAntanst) och går sedan vidare och väljer Ort, som första dimension. I detta
exempel önskar man ingen andra dimension, utan specificerar direkt Antal_anställda, som
kolumn för aggregering. När man sedan trycker på 'Bygg', kommer basfiler för denna
rapportmall att byggas. Dessa basfiler kan sedan användas för att generera input till program,
som är lämpliga att presentera önskad "statistik".
Exempel 2:
Ur samma tabell, som i "Exempel 1", vill man skapa en rapportmall, där man vill utföra statistik
på omsättning fördelad på företag inom orter. I fönstret 'Rapportmall' väljer man tabellen
Företag och trycker på 'Lägg till'. I fönstret 'Redigera rapportmall' ger man rapporten ett unikt
namn (FöretagOrtFöretagsnamnOmsättning) och går sedan vidare och väljer Ort, som första
dimension. I detta fall väljer man Företagsnamn, som andra dimension, innan man väljer
Omsättning, som kolumn för aggregering. När man sedan trycker på 'Bygg', kommer basfiler för
denna rapportmall att byggas. Dessa basfiler kan sedan användas för att generera input till
program, som är lämpliga att presentera önskad "statistik".
Hur man ändrar en Rapportmall
Med hjälp av Boolware Manager kan man ändra en befintlig rapportmall. Man går tillväga på
samma sätt, som när man skapar en rapportmall, men man markerar aktuell rapportmall och
väljer 'Redigera' i stället för 'Lägg till' i fönstret 'Rapportmall'.
Då man gjort erforderliga ändringar trycker man OK och den ändrade rapportmallen måste
byggas om, innan den används.
Hur man tar bort en Rapportmall
Med hjälp av Boolware Manager kan man ta bort en befintlig rapportmall. Man går tillväga på
samma sätt, som när man ändrar en rapportmall, men man väljer 'Ta bort' i stället för 'Redigera'
i fönstret 'Rapportmall'.
Rapportmallen och tillhörande basfiler tas bort.
Hur man använder en Rapportmall (skapar underlag för grafisk presentation av
statistik)
Då man har skapat en rapportmall och byggt dess basfiler, kan man använda dessa för att
skapa enkla analyser i form av tillgänglig "statistik".
Boolware tillhandahåller ett antal poster, som utgör underlag för input till ett program, vilket kan
presentera "statistiken" grafiskt. Detaljerad beskrivning av dessa poster och alla index attribut,
som berör framtagandet av dessa poster finns i "Handbok programmering" Kapitel 3 "XML
API" avsnitt "Hämta indextermer".
107
Nedan följer några exempel på hur XML-förfrågan till Boolware kan se ut vid skapandet av olika
"statistik" för de två ovanstående exemplen:
Exempel 1:
Använd basfilerna, som skapats för rapportmallen FöretagOrtAntanst och extrahera de orter,
som har företag med flest antal anställda. I detta fall anger man "sum", som "statistisk" metod
och man vill endast ha de 9 posterna, som har flest antal anställda.
Eftersom zoom=1, kommer endast företag, som ingår i senaste sökresultatet (företag i Kalmar
Län) att ingå i aggregeringen.
<?xml version="1.0" encoding="ANSI"?>
<SoftboolXML_requests>
<SoftboolXML_request type="query">
<open_session name=""/>
<database name="Företag"/>
<table name="Företag"/>
<query>FIND Län:Kalmar</query>
<response/>
</SoftboolXML_request>
<SoftboolXML_request type="index">
<database name="Företag"/>
<table name="Företag"/>
<index
field="Ort([Antal anställda])" zoom="1" type="2" max_terms="9"
statistics="sum" skipgeneratedterms="1"
reporttemplatename="FöretagOrtAntanst">
</index>
</SoftboolXML_request>
</SoftboolXML_requests>
Exempel 2:
Använd basfilerna, som skapats för rapportmallen FöretagOrtAntanst och extrahera de orter,
som har företag med flest antal anställda. I detta fall anger man "sum", som statistisk metod och
man vill endast ha de 12 posterna, som har flest antal anställda.
Eftersom zoom=0, kommer alla företag i tabellen Företag att ingå i aggregeringen. Sökningen,
FIND Län:Kalmar, kommer att ignoreras.
<?xml version="1.0" encoding="ANSI"?>
<SoftboolXML_requests>
<SoftboolXML_request type="query">
<open_session name=""/>
<database name="Företag"/>
<table name="Företag"/>
<query>FIND Län:Kalmar</query>
<response/>
</SoftboolXML_request>
<SoftboolXML_request type="index">
<database name="Företag"/>
<table name="Företag"/>
<index
field="Ort([Antal anställda])" zoom="0" type="2" max_terms="12"
statistics="sum" skipgeneratedterms="1"
reporttemplatename="FöretagOrtAntanst">
</index>
</SoftboolXML_request>
</SoftboolXML_requests>
Exempel 3:
108
Använd basfilerna, som skapats för rapportmallen FöretagOrtFöretagsnamnOmsättning och
extrahera de orter, som har företag med största omsättningen. I detta fall anger man "max",
som statistisk metod och man vill endast ha de 15 företag, som har störst omsättning.
Eftersom zoom=1, kommer endast företag, som ingår i senaste sökresultatet (företag i
Stockholm, Göteborg och Malmö) att ingå i aggregeringen.
<?xml version="1.0" encoding="ANSI"?>
<SoftboolXML_requests>
<SoftboolXML_request type="query">
<open_session name=""/>
<database name="Företag"/>
<table name="Företag"/>
<query>FIND Ort:Stockholm OR Göteborg OR Malmö</query>
<response/>
</SoftboolXML_request>
<SoftboolXML_request type="index">
<database name="Företag"/>
<table name="Företag"/>
<index
field="Ort(Företagsnamn(Omsättning))" zoom="1" type="2" max_terms="15"
statistics="max" skipgeneratedterms="1"
reporttemplatename="FöretagOrtFöretagsnamnOmsättning">
</index>
</SoftboolXML_request>
</SoftboolXML_requests>
Sökspråket i Boolware
Boolwares sökspråk (QL) är en något förenklad form av Common Command Language (CCL)
och är anpassat för Boolware Index Server. Huvudskälet för QL är, att på ett enkelt och
enhetligt sätt specificera både enkla och komplexa sökningar. Resultatet av en sökning är rader,
vilka uppfyller de angivna sökkriteria. Detta resultat kan sedan rankas på olika sätt, innan
presentation sker.
QL är uppbyggt av kommandon, operatorer, under-kommandon och sökargument.
Alla kommandon, under-kommandon och operatorer anges i denna text på engelska.
De booleanska operatorerna (AND, OR (inklusiv), NOT och XOR (exklusiv)) i alla kombinationer
är tillåtna. För att vara säker på att erhålla rätt resultat måste parenteser användas, då det är
nödvändigt.
Under-kommandon som NEAR, XNEAR, ORSEARCH, SYN, THES, STEM, STRING, SOUND
och SIM används för att söka mot en speciell indextyp. Under-kommandot NOTI avänds för att
exkludera poster som innehåller en specificerad term.
Ett underkommando har följande syntax: UNDERKOMMANDO(termer). Om det förekommer
”obalanserade” parenteser i ”termer” för underkommandona: NEAR, XNEAR, ORSEARCH och
ORSEARCHEX, måste syntaxen ändras till UNDERKOMMANDO([[termer]]); inledande
parentes byts mot ([[ och avslutande parentes byts mot ]]).
Exempel:
FIND Text:ORSEARCH([[”1.) Kapitel 1” ”2.) Kapitel 2”]])
Mellan strängarna: 1.) Kapitel 1 och 2.) Kapitel 2 utförs en logisk OR.
Sökargumenten består av söktermer, vilka kan innehålla ”jokertecken” (*, ?, ! och #), som kan
kombineras på alla sätt. Med ”jokertecken” menas, att dess förekomst representerar alla tecken
109
inom en viss kategori. En sökterm kan vara maximalt 126 bytes och varje angiven * ersätter 0 126 bytes vilka som helst, ? ersätter 1 (ett) tecken vilket som helst, ! ersätter 1 (bokstav) samt #
ersätter 1 (en) siffra.
Viktigt: Endast två jokertecken: * och ? kan användas i strängar.
Det finns tre viktiga inställningar som kan aktiveras (on) respektive deaktiveras (off), vilka
påverkar funktionaliteten i Boolware sökspråk:
1.
Automatisk trunkering innebär, att Boolware automatiskt söker på allt som börjar som den
angivna söksträngen.
2.
Sökhistorik innebär, att Boolware sparar all information om samtliga frågor i minnet, vilket
möjliggör navigering inom en söksession (se avsnitt Setsökning nedan).
3.
Sökset innebär, att Boolware sparar all information om samtliga frågor inom en
söksession på disk. Detta gör att man kan använda resultatet från tidigare sökningar utan
att söka om.
En utförlig beskrivning över funktionaliteten finns i detta kapitel och en beskrivning över hur
inställningarna aktiveras/deaktiveras finns i ”Handbok programmering” under kapitel
”Kommandon till Boolware”.
Viktigt: I Boolwares sökspråk har vissa tecken, som kan vara en del av en sökterm, en speciell
betydelse. Nedan följer de tecken, som skall användas med försiktighet, då man anger vilka
tecken som får bilda en sökterm (se Kapitel 10; Listor och Tabeller).
*
?
!
#
.
:
”
används för att ersätta 0-126 bytes med vilka tecken som helst (trunkering)
används för att ersätta 1 tecken med vilket tecken som helst (trunkering)
används för att ersätta 1 tecken med vilken bokstav som helst (trunkering)
används för att ersätta 1 tecken med vilken siffra som helst (trunkering)
används i slutet av en term för att upphäva en automatisk trunkering (exakt sökning)
används för att skilja kolumnnamn från sökterm
används för att markera strängsökning och för att skilja mellan en term och en operator
(AND(F), OR(F), NOT(F) och XOR(F))
.#$ används för att identifiera argument i numerisk likhetssökning
( används för start av parentesuttryck vid sökning
.. används för att markera ett slutet intervall
<[=] används för att markera ett öppet intervall
>[=] används för att markera ett öppet intervall
Interaktiv sökning i ett Boolware Index
Nedan följer några exempel på både enkla och mer komplexa sökfrågor. Dessutom ges det
exempel på hur man begränsar respektive vidgar resultatet.
Det finns ingen begränsning på hur man kombinerar de olika sökningarna.
Exempel
I en stor databas, vilken innehåller miljontals artiklar från åtskilliga tidskrifter, vill man utföra olika
typer av sökningar. Databasen består av en tabell och följande kolumner (fält): Artikel nr,
Tidskrift, Utgivningsdatum, Författare, Kategori, Storlek, och Text. Kolumnen Artikel nr
innehåller en unik identifikation (Primärnyckel) för de artiklar, som finns lagrade i databasen. I
kolumnen Tidskrift lagras namnet på den aktuella tidskriften, i vilken artikeln publicerats.
Kolumnen Utgivningsdatum innehåller det datum, då artikeln publicerades i formen
110
ååååmmdd, namnet på författaren finns i kolumnen Författare. Vilken typ av artikel det rör sig
om: sport, inrikespolitik, utrikespolitik, kultur, finans, nöje etc., lagras i kolumnen Kategori,
medan kolumnen Storlek anger hur stor artikeln är uttryckt i antal ord. Slutligen finns det en
kolumn benämnd Text, där det egentliga innehållet i den aktuella artikeln finns.
Enkel fråga
Uppgiften är att hitta alla artiklar, som handlar om bilar. Troligtvis är det kolumnen Text som
skall användas och den enkla frågan ser ut som följer: FIND Text:bilar. Låt oss anta att det
finns 12.000 artiklar, vilka innehåller söktermen bilar.
Då man undersöker resultatet, upptäcker man ganska snart att en mängd artiklar saknas;
endast artiklar, som innehåller termen bilar (i pluralis) och inte artiklar, där orden bil, bilen,
bilarna etc. förekommer. Genom att ändra sökfrågan en aning: FIND Text:bil* vidgas resultatet
och man erhåller artiklar, som innehåller ord som börjar på bil; bilen, bilarna, bilens, bilarnas
etc., eftersom * ersätter 0 - 126 bytes, vilka som. Resultatet efter denna sökning ger kanske
97.000 artiklar, men detta är naturligtvis alldeles för mycket för att kunna hanteras. Genom att
ange, att det endast är gula bilar man är intresserad av begränsar man träffmängden. För att
åstadkomma detta adderar man endast AND Text:gul* till föregående resultat. Resultatet
innehåller nu artiklar där orden bilen, bilarna, bilens, bilarnas ... och orden gul, gulare, gulast
ingår. Resultatet har nu kanske sjunkit till 950 artiklar, men vid en noggrann undersökning av
resultatet finner man naturligtvis artiklar, som handlar om gula bilar, men också artiklar, där
orden inte finns i rätt sammanhang; en artikel som beskriver ett gult hus och en blå bil uppfyller
också de ställda sökkriterier, men det är inte vad man önskar.
Närordssökning
Genom att använda under-kommandot near, kan man specificera, att man vill att de angivna
termerna skall återfinnas tillsammans. Sökningen kan då se ut som följer: FIND Text:near(gul*
bil*) och nu har kanske svaret reducerats till 130 artiklar.
Upp till 20 termer kan anges inom parentesen och naturligtvis kan man också ange hur långt
ifrån varandra orden får stå och om de måste återfinnas i den angivna ordningen eller ej.
Till exempel FIND Text:near(bil gul stor ford, 10) ger som resultat alla artiklar, där de inte finns
mer än 9 ”andra ord” mellan de angivna termerna. För att simulera sträng-sökning kan man
skriva FIND Text:near(Harold Anderson, 1, 1) vilket betyder att Harold Anderson måste stå
tillsammans och i angiven ordning. Detta är ett bra sätt att erhålla strängsökning utan att behöva
indexera kolumnen med indextyp sträng (vilket dessutom är omöjligt då det är ett text-fält).
En rekommendation är att inte använda ”trunkerade” söktermer i närordskommandot. Det finns
två skäl för detta: för det första är risken stor att man inte erhåller önskat resultat (man får
många fler kombinationer än vad man tänkt) och för det andra drar detta kommando stora
systemresurser.
Exempel: FIND Text:near(an* se*) kommer att ge många träffar, eftersom an* genererar
tusentals termer, som skall kombineras med de tusentals termer, som genereras av se*.
Det finns en specialvariant av närordskommandot: xnear. Detta kommando fungerar på ett
mycket speciellt vis. Syntaxen är densamma som för närordskommandot, men innehåller två
olika typer av ord, vilka avgränsas med ett semikolon (;) och en blank. De ord som anges innan
semikolon, är ord som skall finnas, medan ord, som anges efter semikolon inte får förekomma
tillsammans med de andra orden. Ett exempel kan vara, då man vill söka fram företag i en
artikeldatabas och endast vill få träff, då moderbolaget finns med i träffmängden. Om man till
exempel skriver: FIND Text:xnear(Saab Scania AB; last* buss*,6), skall alla poster, där det
inte får förekomma mer än 5 andra ord mellan Saab Scania AB. Om nu något av orden lastbil,
lastbilar, lastbilen, lastbilarna, lastvagn, lastvagnar, buss, bussar, bussen, bussarna etc.
förekommer inom 6 ord skall denna post inte vara med i sökresultatet. Det räcker med att Saab
111
Scania AB förekommer en gång, utan att något av orden efter semikolon finns, för att posten
skall vara med i sökresultatet.
Exempel1:
Denna post skall inte vara med i sökresultatet:
Post1:
text ... Saab Scania Lastvagnar AB ... text
Denna post skall vara med i sökresultatet:
Post2:
text ... Saab Scania Lastvagnar AB ... text
text ...... text
text ... Saab Scania AB ... text
text ...... text
text ... Saab Scania Bussar AB ... text
I Post1 återfinns Saab Scania AB inom 6 ord endast på ett ställe, men inom dessa 6 ord finns
också Lastvagnar, vilket gör att Post1 skall tas bort ur sökresultatet.
I Post2 återfinns Saab Scania AB inom 6 ord på tre ställen. På första och tredje stället finns ett
”exkluderande” ord Lastvagnar respektive Bussar, vilket skulle innebära, att Post2 skulle tas
bort ur sökresultatet...men på andra stället förekommer Saab Scania AB, utan något
”exkluderande” ord inom 6 ord, vilket gör att Post2 skall inkluderas i sökresultatet.
Exempel2:
Ett annat exempel kan vara, att man vill söka fram modeller för ett visst bilmärke. Antag att man
vill se artiklar innehålland BMW i 318 serien (318 i, 318 ci, 318 is, 318 SALOON, 318 TDS etc.);
i detta exempel måste alltså 318 följas av bokstäver.
FIND Text:near(bmw 318 !*,1,1) OR Text:near(bmw 318!*,1,1) söker fram alla ovan angivna
modeller även om de skrivs ihop: BMW 318i, BMW 318ci, 318is, 318SALOON, 318TDS.
Ett annat sätt att uppnå detta är att använda xnear:
FIND Text:xnear(bmw 318; #*,1,1) OR Text:near(bmw 318!*,1,1).
Booleanska operatorer
Genom att specificera fler sökkriteria kan man väldigt enkelt reducera antalet artiklar: FIND
Text:near(gul* bil*) AND Utgivningsdatum:>=20000101 AND (Tidskrift:Motor OR
Tidskrift:RoadRacing) NOT Kategori:kultur.
Denna sökfråga ger som resultat alla artiklar som handlar om gula bilar som är publicerade
detta århundrade och endast finns i tidskrifterna Motor eller RoadRacing och de får inte
återfinnas i kategorin kultur.
Detta kan man - som i ovanstående exempel - uttrycka i en sökfråga, men naturligtvis kan man
också ange sökningarna stegvis. Att göra en sökning stegvis har den fördelen, att man efter
varje steg kan besluta, om man vill gå vidare eller undersöka det framkomna resultatet.
Effektiv ”eller-sökning”
Om man vill kombinera många termer i en OR-sökning finns ett speciellt underkommando,
orsearch. I stället för att ange alla termer med operatorn OR emellan, kan man efter detta
underkommando innesluta alla termer inom parenteser eller ange en fil som innehåller de
termer man vill göra en OR-sökning på. Detta sätt är i vissa fall enklare för användaren exempelvis, då alla söktermer har exporterats till en fil - och det är dessutom effektivare för
Boolware att hantera en stor OR-sökning på detta vis.
112
Det resultat, som erhålls efter denna OR-sökning, kan kombineras på vanligt sätt med de
booleska kommandona: FIND, AND, OR och XOR.
Synonymer och Tesaurus
När man söker i okända databaser, vilka är uppbyggda av texter från många författare, är det
ofta svårt att veta vilket vokabulär som använts och man kan gå miste om mycket information
för att man har använt fel söktermer. Ett sätt att komma runt detta problem är att använda den
booleanska operatorn OR mellan olika termer. Detta är emellertid ett ineffektivt sätt och
dessutom är risken stor, att man fortfarande kan gå miste om information.
Ett mer bekvämt sätt är att använda Boolware Index Servers synonym- och tesaurusfunktion. I
Boolware Manager kan man - när som helst utan att bygga om Boolware Index - ändra
synonym- och tesaurusfilerna. En detaljerad beskrivning över dessa filer finns i Kapitel 10,
Synonymer och Tesaurus.
Genom att använda under-kommandona syn och thes, kan man vid varje söktillfälle bestämma,
huruvida man vill ha en exakt sökning eller en sökning, då samtliga synonymer inkluderas. Om
under-kommandot syn eller thes används, kommer alla synonymer respektive barn ingå i
sökningen och naturligtvis erhålls då ett större antal träffar.
Om man i synonymfilen exempelvis har följande term: ha(har, hade, haft, äga, äger, ägde, ägt,
ägd) och sökfrågan är: FIND Text:syn(ha), kommer samtliga artiklar som innehåller orden ha,
har, hade, haft, äga, äger, ägde, ägt eller ägd att ingå i resultatet. Naturligtvis blir resultatet
exakt detsamma oavsett vilken av dessa termer, som anges i sökfrågan. Om man å andra sidan
endast vill ha artiklar, där ordet ägde ingår skriver man: FIND Text:ägde.
Det är också möjligt att specificera en synonym som består av flera ord. Vid sökning måste man
skriva denna synonym inom citattecken: FIND Text:syn("saltsjö boo"). I synonymfilen har man
exemelvis angivit: satsjöboo(saltsjö boo, satsjö-boo). I detta fall kommer man att söka på
samtliga tre termer: saltsjöboo, saltsjö boo, saltsjö-boo oavsett vilken av dessa tre synonymer,
som anges i kommandot.
Jokertecken, vänstertrunkering och inom ord
Då man söker på en term som bil, vill man oftast också som resultat få artiklar som innehåller
orden bilar, bilen etc., som omnämndes i början av detta exempel. Ett sätt att kringgå detta
problem är att använda ”jokertecknet” *, som ersätter 0 - 126 bytes. Om det endast är ett tecken
vilket som helst, som skall ersättas, används ?. Om en bokstav skall ersättas används !, medan
# används, om en siffra skall ersättas.
Dessa fyra tecken kan användas i vilka kombinationer som helst och hur många gånger som
helst: FIND m*t?r ger artiklar, som innehåller något av följande ord: magister, minister,
monster, mister, master, mentor, m10t2r, montör, mentometer, miljöarkitekter etc. Om
man byter ut ? mot ! kommer termen m10t2r att försvinna och om man byter ut ? mot # kommer
alla termer utom m10t2r att försvinna.
Det finns ett specialfall, då endast den avslutande delen av ord är intressant, exempelvis då
man vill söka efter boll och inte är intresserad av vilken typ av boll det är: handboll, basketboll,
fotboll, tennisboll, golfboll etc.
Detta benämns vänstertrunkering och är i de allra flesta system en mycket tidskrävande
operation, eftersom hela index måste läsas igenom. I Boolware Index Server kan termerna i en
kolumn förberedas för denna typ av sökning så att sökningen sedan tar samma tid som en
”normal” sökfråga. För att denna speciella indexeringsegenskap skall kunna användas för man
113
inte ha något ”jokertecken” i slutet av ordet. Denna funktion är valbar, eftersom storleken på
indexet ökar med ungefär 30%.
I Boolware systemet finns det möjlighet, att för en Kolumn välja egenskapen Inom ord (en
utökad variant av egenskapen vänstertrunkering ), vilket gör att denna Kolumn indexeras på ett
speciellt sätt så att ”jokertecken” kan användas både i början och slutet av ett sökord och det
går lika fort att söka som på hela ordet.
Denna funktion är valbar, eftersom storleken på index kommer att bli två till sex gånger större
mot index utan denna funktion.
Exempel:
FIND CompanyName:*compute*
kommer att generera träff på företagsnamnet "Sciencecomputers Ltd"
Grundformning
Genom att använda “jokertecken” (*, ?, ! och #) kan man i många fall klara olika typer av
böjningar av en term (singularis/pluralis, komparering, tempus etc.). Men om man exempelvis
söker efter termen dålig, finns det inget lätt sätt, att med ”jokertecken”, samtidigt söka efter
sämre och sämst.
Det finns i Boolware ett under-kommando som heter stem, där man tar hand dessa böjningar
och oregelbundenheter. FIND stem(sämre) kommer också att hitta artiklar, där orden dålig och
sämst finns med. Denna funktion är naturligtvis språkberoende, varför det finns
”grundformningsfiler” för olika språk.
Denna funktion kan till synes ersättas med synonymer, men några skillnader finns: synonymer
måste skrivas in för hand, medan grundformning automatiskt extraherar ”grundformen” för en
term. Vid sökning är det dessutom en skillnad, då synonymer genererar en sökfråga bestående
av samtliga ”synonymer” åtskilda med operatorn OR, medan grundformning gör om den
angivna termen till en ”grundform” och utför endast sökning på en term. Dessutom blir storleken
på index mycket mindre vid användning av grundformning.
Fonetisk sökning
Ett normalt sätt att söka efter termer är att utgå från hur termen stavas. Detta är i de allra flesta
fallen fullt tillräckligt, men då man exempelvis skall söka på namn i kolumnen Författare kan det
vara svårt att veta hur just den författaren stavar sitt namn. I svenskan kan man exempelvis
stava Eriksson på ett antal olika sätt: Erikson, Ericsson, Erikcson, Erikxon, Ericxon etc.
Om man i stället har ljudet (uttalet) som riktmärke, kan många olika stavningar av namn
normaliseras till samma term. Detta brukar benämnas fonetisk sökning och handhas av underkommandot sound i Boolware Index Server.
Följande sökning: Författare:sound(Erikxon) kommer ge artiklar, som innehåller alla olika
stavningar av Eriksson.
Denna funktion kan till synes ersättas med synonymer eller grundformning, men några
skillnader finns: sound likställer tecken och kombinationer av tecken automatiskt, då de uttalas
på ett likartat sätt, medan man i synonymer och grundformning, explicit måste ange dessa
termer; exempelvis stavning av namnet Karlsson och Carlsson.
Intervallsökning
114
När man söker i numerisk data kan det vara mycket användbart att ha möjlighet att specificera
olika intervall: Större än (>), mindre än (<), större än och lika med (=>), mindre än och lika med
(<=) samt från..till (..).
Man kanske vill hitta alla artiklar publicerade under 1999, som innehåller mellan 100 och 200
ord.
FIND Utgivningsdatum:1999* AND Storlek:100..200.
Det är naturligtvis tillåtet att använda intervall även för kolumner, som inte är numeriska trots att
resultatet inte blir lika uppenbart i alla fall.
Till exempel: sök fram alla artiklar, där författarens namn är ”större än” Smith; FIND
Författare:>Smith.
Artiklar med författare som: Wayne, Xerxes, Taylor, Spalding, Twain, Wilson etc. kommer att
ingå i resultatet.
Då en kolumn är indexerad som numerisk, kommer allt data i den kolumnen att ”normaliseras”;
termerna lagras med avseende på sitt värde (2 är mindre än 100). När man indexerar en
kolumn som text, lagras numeriska begrepp inom texten som text; 2 är då större än 100,
eftersom text jämförs från vänster till höger tecken för tecken och 2 är större än 1 (i 100). Detta
ger naturligtvis överraskande resultat, då man använder intervall-sökning på numeriska begrepp
i kolumner, som är indexerade som text: FIND Text:100..200 kommer att inkludera artiklar i
resultatet som exempelvis innehåller 11. Dessutom är numeriska begrepp i text ganska
meningslösa som söktermer, eftersom de kan representera vad som helst: en ålder, antal bilar,
storleken på en lastbil, antal innevånare i en stad etc.
Exkluderad sökning
Det finns tillfällen, då man kanske vill söka fram alla poster, som saknar information över huvud
taget i en viss kolumn, exempelvis namn. Kolumnen som innehåller primärnyckeln (måste
finnas en unik för varje post) heter i detta exempel orgnr. Normalt skall man då först söka fram
samtliga poster: FIND orgnr:* och därefter utföra kommandot NOT namn:*. Genom att använda
under-kommandot noti, kan man utföra denna operation i ett steg: FIND namn:noti(*).
Naturligtvis kan man ”exkludera” andra termer än * på detta vis: FIND namn:noti(andersson
karlsson) söker fram alla poster som inte innehåller Andersson eller Karlsson i namnkolumnen. I vissa fall kan söktermerna vara exporterade till en fil och då kan man, istället för att
specificera termerna, ange namnet på den fil, som innehåller dessa termer: FIND
namn:noti(@c:\boolware\testdatabas\not-terms.txt). Tecknet @, som måste skrivas utan
blank-steg, talar om för systemet, att argumentet är ett filnamn.
Likhetssökning
I de ovanstående exemplen används booleanska operatorer och man söker efter specifika
söktermer i olika omgivningar. Det finns ett annat sätt att söka med hjälp av Boolware Index
Server: Likhetssökning.
Likhetssökning innebär, att man inte söker efter enstaka söktermer, utan efter hela innehållet i
en bifogad text. Den bifogade texten kan vara en eller flera artiklar i denna artikeldatabas eller
det kan vara vilken annan text som helst, exempelvis kopierad från Internet.
Den bifogade texten jämförs med samtliga artiklar i artikeldatabasen och en ”poäng”, i intervallet
0 till 1, åsätts varje artikel. Ju högre poäng en artikel har, dess mer lik den bifogade texten är
den.
Naturligtvis finns det ett stort antal artiklar som inte har den minsta likhet med den bifogade
texten och således är totalt ointressanta att inkludera i resultatet.
115
För att undvika att erhålla ointressant resultat, är Boolware försett med ett tröskelvärde (0.200),
vilket enkelt kan ställas om för att exkludera alla artiklar, som har en poäng understigande det
åsatta tröskelvärdet. Ovan beskrivs hur de två värdena, tröskel och optimering, kan användas.
Likhetssökning kan göras när som helst i en söksession. Antag att det finns en text (omkring
300 ord) och man vill söka fram artiklar som liknar denna text och är publicerade under 1998.
FIND Utgivningsdatum:1998* AND sim(text…), 0.400, 0.7 ger ett resultat, där artiklar
publicerade under 1998 presenteras i likhetsordning; den som liknar den bifogade texten mest
presenteras högst upp i listan.
Inga artiklar som har en poäng understigande 0.400 kommer att presenteras. I denna fråga
prioriterar man dessutom relevans framför snabbhet genom att ange 0.7 som optimeringsvärde.
OBS!
Likhetssökning är mycket resurskrävande i förhållande till en vanlig boolesk sökning.
Sökvektorn skall jämföras med varje möjlig post i den aktuella tabellen. Ett sätt att göra
likhetssökningen mer effektiv är att reducera resultatet - om möjligt - med vanlig boolesk
sökning, innan likhetssökningen görs.
Nedan finns två exempel, vilka ar exakt samma slutresultat, men skiljer mycket vad beträffar
körtid.
I en databas finns 3.000.000 tekniska artiklar från 1970 och framåt. En artikel, som behandlar
’Likhetssökning’ är framsökt och man vill nu söka fram liknande artiklar. Man är bara
intresserade av artiklar som är publicerade under 2001.
Exempel 1:
Specificera sökfrågan på följande sätt:
FIND Utgivningsdatum:2001*
ANDF sim(text…), 0.400, 0.7
och följande resultat erhålls:
Antal
94.000
2.800
Delresultat
94.000
2.800
Sökfråga
FIND Utgivningsdatum:2001*
ANDF sim(text…), 0.400, 0.7
I detta fall kommer endast 94.000 artiklar att jämföras med beskrivningen av sökfrågan för
likhetssökning.
Exempel 2:
Specificera sökfrågan på följande sätt:
FIND
ANDF
sim(text…), 0.400, 0.7
Utgivningsdatum:2001*
och följande resultat erhålls:
Antal
14.000
2.800
Delresultat
14.000
94.000
Sökfråga
FIND sim(text…), 0.400, 0.7
ANDF Utgivningsdatum:2001*
I detta fall kommer endast 94.000 artiklar att jämföras med beskrivningen av sökfrågan för
likhetssökning. Endast 14.000 motsvarade de uppställda kriterierna, men all 3.000.000 artiklar
måste jämföras för att erhålla detta resultat. Den avslutande AND (ANDF) tar bort alla artiklar
som inte publicerades under 2001.
116
Numerisk likhetssökning
Likhetssökning kan också anges för kolumner som innehåller numerisk data.
Förutom kolumnnamnet används tre parametrar: värde, tolerans och vikt, vilka åtskiljs med ett
semikolon (;). Alla utelämnade parametrar, utom den sista, måste markeras med ett semikolon.
Värde är ett utgångsvärde eller ett intervall (start..end). Tolerans är angiven i procent; då
intervall anges som värde, behöver inte tolerans anges. Om ingen vikt anges och det inte är
intervall, sätts toleransen till 10%. Den tredje parametern, vikt, anges för att öka betydelsen för
den aktuella kolumnen vid jämförelsen. Om ingen vikt anges, används vikten 1.
Systemet jämför posterna i databasen mot de angivna värdena. En likhetsberäkning för varje
specificerad kolumn utförs och värdena för de olika kolumnerna vägs samman och jämförs med
de specificerade värdena. De poster, som erhåller de högsta värdena, presenteras högst upp i
listan.
Det är möjligt att kombinera text (som vid vanlig likhetssökning) med numerisk information i
likhetssökning.
Numerisk information identifieras genom att den måste komma på en ny rad och inledas med
tecknen:.#$.
Exempel:
FIND sim(text
<CRLF>.#$”Omsättning”:100;12
<CRLF>.#$”Antal anställda”:20..40;;4
<CRLF>.#$”Soliditet”:1000;20;2)
Först beräknas likhet på den inkluderade texten, därefter på de numeriska kolumnerna.
Resultaten vägs ihop och den slutliga likheten bestäms.
För att posten skall vara godkänd, måste något av följande kriterier vara uppfyllda:
1.
2.
3.
”Omsättning” skall vara mellan 100 +/- 12% (88 - 112). Den har ingen vikt (1 kommer att
användas).
”Antal anställda” skall vara mellan 20 och 40 och vikten är 4. Observerea att den
utelämnade parametern tolerans markeras med ett semikolon (;).
”Soliditet” skall vara mellan 1000 +/- 20% (800 - 1200) och vikten skall vara 2.
Maximalt antal numeriska kolumner, som kan användas vid numerisk likhetssökning, är 100.
Viktigt: Efter en likhetssökning sätts typ av rankning (rank mode) automatiskt till BSIMRANK.
Globalsökning
Ibland kan det vara praktiskt att söka i flera Tabeller med samma sökfråga. För att ge denna
möjlighet finns i Boolware Index Server ett kommando som kallas GLOBAL, där de Tabeller
man vill söka specificeras. Det är viktigt, att de Kolumner som anges i sökfrågan återfinns i alla
specificerade Tabellerna. Det vanligaste kanske är att fritextsöka mellan flera Tabeller.
Exempel:
Antag att det finns en databas, som innehåller 10 Tabeller. Tre av dessa Tabeller har en
Kolumn med gemensamt namn, Namn, och alla 10 Tabellerna har Kolumner, som är
indexerade ”Alla fält” (fritext). I första exemplet vill man hitta samtliga Eriksson i de tre Tabeller,
som innehåller Kolumnen Namn.
GLOBAL(Tabell1, Tabell6, Tabell9) FIND Namn:Eriksson
Boolware hittar 27 poster i Tabell1, 97 poster i Tabell6 och slutligen 567 poster i Tabell9.
117
I andra exemplet vill man söka efter bil i samtliga Tabeller. GLOBAL(*) FIND bil. Ingen
Kolumn anges, eftersom ”Alla fält” skall sökas. Om * anges i GLOBAL, menas alla i databasen
ingående Tabeller.
Kommandot TABLES kommer automatiskt att användas vid sparat Set, sparad Fråga och
sparat Resultat. Då man sparar något av ovanstående objekt, sparas de tabeller som var
aktuella vid det tillfälle man sparar objektet. Då man sedan skall använda det sparade objektet,
bestämmer man med hjälp av TABLES, vilka av de tabeller som ingår i det sparade objektet
man vill använda.
Exempel:
Vid ovanstående fråga på Namn:Eriksson användes tabellerna: Tabell1, Tabell6 och Tabell9.
Denna fråga sparas som sparad Fråga, ” Global Fråga1”. När man sedan använder den
sparade Frågan, Global Fråga1, kan man bestämma att endast använda den för tabellerna
Tabell1 och Tabell9: TABLES(Tabell1, Tabell9)Find query(”Global Fråga1”). I detta fall
kommer endast Tabell1 och Tabell9 sökas, trots att den sparade Frågan, Global Fråga1, även
innehåller Tabell6. Man bestämmer alltså vid sökningen vilka tabeller som skall ingå i frågan
med hjälp av kommandot TABLES (det bestäms inte av vilka tabeller som är sparade).
Sök relaterat (Join)
I en relationsdatabas finns det vanligtvis etablerade relationer mellan de i databasen ingående
tabellerna; man kan exempelvis ställa en fråga mot en tabell och erhålla ett resultat i en annan
tabell (join). För att komma från den tabell man ställer frågan mot och till den tabell man önskar
resultatet i, kan man behöva gå via flera tabeller; det finns en ”stig” från en tabell till en annan,
vilken utmärks genom primärnycklar eller främmande nycklar.
Om ”stigen” är etablerad i datakällan använder Boolware den ”stigen”. Om det inte finns någon
”stig” i datakällan, men man vet hur de olika tabellerna är relaterade tillvarandra, kan man ange
en ”stig” i underkommandot rpath(t1.c1, t2.c2..tN.cN). Underkommandot innehåller ett antal
tabell och kolumn åtskilda med punkt, vilka relaterar till varandra. Underkommandot skrivs direkt
efter kommandot för den aktuella frågan; se exempel nedan.
I Boolware kan man genom kommandot RELATE ange vilken tabell man önskar resultatet i
(mål-tabellen) samt med hjälp av vanliga booleska frågor söka i övriga tabeller (sök-tabeller).
Mål-tabellen kan även ingå som sök-tabell. Boolware hittar den ”genaste” vägen mellan
tabellerna man ställer frågorna mot och den tabell man angivit, att man vill ha det slutliga
resultatet i. Alla frågor i mellanliggande tabeller utförs automatiskt av Boolware.
Det är naturligtvis användarens ansvar att se till att en angiven relation verkligen existerar i den
aktuella databasen. Om en ogiltig relation har angivits, svarar Boolware med ett felmeddelande.
Sökningar i Boolware sker alltid inom en tabell. Detta innebär, att man i ett kommando inte kan
ange mer än en tabell. Vid relaterad sökning vill man emellertid alltid söka mellan flera tabeller,
men regeln är fortfarande, att varje kommando endast kan innehålla en tabell.
För att lösa detta finns det i Boolware en samling specialoperatorer, ANDF/ORF/NOTF/XORF,
vilka används för att markera ett nytt kommando. Skillnaden mellan ett kommando och en
operator i Boolware är, att operatorn fortsätter inom det aktuella kommandot, medan ett nytt
kommando avslutar det tidigare kommandot och börjar ett nytt. I Sökhistoriken får varje nytt
kommando en egen rad, medan en operator ingår i dess kommandos rad (se avsnittet
Sökhistorik nedan). Genom att använda ovanstående specialoperatorer, kan man i en
relaterad sökning söka i flera tabeller med den restriktionen, att varje kommando (*F operator)
endast söker i en tabell.
För att enklast beskriva denna funktion i Boolware ges nedanstående exempel:
Exempel:
118
Antag att det finns en databas (NorthWind testdatabas från Microsoft SQL Server), som
innehåller 13 Tabeller: Customers, CustomerDemographics,
CustomersCustomerDemographics, Employees, Employee Territories, Order Details, Orders,
Products, Categories, Region, Shippers, Suppliers och Territories. Mellan dessa tabeller råder
olika relationer, men i vårt exempel skall vi begränsa oss till relationen mellan tabellerna
Products och Customers.
Nedan följer en karta över relationerna mellan de olika tabellerna i databasen NorthWind:
Nedan följer en schematisk beskrivning av relationerna mellan de tabeller som ingår i ”stigen”
mellan tabellerna Products och Customers. De kolumnnamn som angivits kursivt är de primärnycklar och främmande nycklar som utgör relationen mellan tabellerna (stigen).
Table Products:
ProductID
ProductName
SupplierID
CategoryID
Table Order Details:
OrderID
ProductID
UnitPrice
Quantity
119
QuantityPerUnit
UnitPrice
UnitsInStock
UnitsOnOrder
ReorderLevel
Discontinued
Table Orders:
OrderID
CustomerID
EmployeeID
OrderDate
RequiredDate
ShipVia
Freight
ShipName
ShipAddress
ShipCity
ShipRegion
ShipPostalCode
ShipCountry
Discount
Table Customers:
CustomerID
CompanyName
ContactName
ContactTitle
Address
City
Region
PostalCode
Country
Phone
Fax
Från tabellen Products går man först till Tabellen Order Details via ProductID, från tabellen
Order Details till tabellen Orders via OrderID och slutligen från tabellen Orders till tabellen
Customers via CustomersID, där det slutliga resultatet sätts.
Om vi vill ha reda på vilka kunder (Customs) som finns i USA och som har beställt produkten
“Uncle Bob's Organic Dried Pears” eller produkten “Alice Mutton”, kan följande fråga anges:
RELATE(Customers)
FIND Customers.Country:usa
ANDF Products.ProductName:(uncle bob organic dried pears)
OR
(alice mutton)
Sökningen för FIND görs i mål-tabellens kolumn Country och inge transformering behövs.
Sökningen för sista kommandot ANDF kommer först att söka “uncle AND bob AND organic
AND dried AND pears” därefter sökes “alice AND mutton” och mellan dessa två delresultat
utförs en logisk OR, innan transformeringen görs till mål-tabellen.
Följande sökhistorik erhålls för tabellen Customers:
Antal
13
6
Delresultat
13
37
Sökfråga
FIND Customers.Country:usa
ANDF Products.ProductName:(uncle...) OR (alice...)
I detta fall genererade första frågan:
FIND Customers.Country:usa, 13 träffar i tabellen Customers. Den andra frågan:
ANDF Products.ProductName:(uncle...) OR (alice...)
genererade 2 träffar i tabellen Products, vilka transformeras till 37 träffar i tabellen Customers
och resultatet efter en boolesk AND (ANDF) i tabellen Customers blir 6.
För FIND kommandot är Slutligt resultat och Mellanresultat samma, eftersom sökningen sker
i mål-tabellen.
För ANDF kommandot är Slutligt resultat det resultat, som erhålls efter det booleska
kommandot ANDF utförts efter transformering till tabellen Customers, medan Mellanresultat
är resultatet av transformeringen av de 2 träffarna i tabellen Products till tabellen Customers.
120
Observera, att kommandot FIND söker i tabellen Customers, medan kommandot ANDF söker i
tabellen Products. Det går alltså inte att använda operatorn AND i detta fall, eftersom
sökningen sker i olika tabeller (måste använda ANDF).
Om ovanstående relationer inte finns i datakällan men existerar ändå, kan man i Boolware
skriva på följande sätt och erhålla exakt samma svar:
RELATE(Customers)
FIND Customers.Country:usa
ANDF rpath(Products.ProductID, [Order Details].ProductID,
[Order Details].OrderID, Orders.OrderID,
Orders.CustomerID, Customers.CustomerID)
Products.ProductName:(uncle bob organic dried pears) OR (alice mutton)
I detta fall har man “manuellt” beskrivit “stigen” mellan fråge-tabellen Products och mål-tabellen
Customers. Det är användarens ansvar, att den specificerade ”stigen” existerar och att det inte
uppstår någon konflikt. Boolware utför endast sökningen som man har angivit.
Man kan sedan fortsätta (förfina) sökningen genom att specificera att man endast är intresserad
av de kunder som har ett postnummer som börjar på 8.
RELATE(Customers)
ANDF Customers.PostalCode:8*
Detta kommando kommer att generera en post i sökhistoriken, vilken efter detta kommando har
följande utseende:
Antal
13
6
3
Delresultat
13
37
6
Sökfråga
FIND Customers.Country:usa
ANDF Products.ProductName:(uncle...) OR (alice...)
ANDF Customers.PostalCode:8*
Efter denna sökning upptäcker man att ett misstag har begåtts; det var egentligen de kunder
som hade postnummer som börjar på 9 man var intresserad av. Följande två kommandon rättar
till detta misstag:
BACK backar en fråga till:
Antal
13
6
Delresultat
13
37
Sökfråga
FIND Customers.Country:usa
ANDF Products.ProductName:(uncle...) OR (alice...)
därefter skriver man det korrekta kommandot:
RELATE(Customers)
ANDF Customers.PostalCode:9*, vilket get följande resultat:
Antal
13
6
3
Delresultat
13
37
10
Sökfråga
FIND Customers.Country:usa
ANDF Products.ProductName:(uncle...) OR (alice...)
ANDF Customers.PostalCode:9*
Funktionen RELATE går också att använda, då man har ett gammalt resultat i en tabell och vill
transformera detta till en annan tabell.
Exempel:
Ett gammalt resultat finns i tabellen Products och man vill transformera detta resultat till
tabellen Customers. Kommandot som gör detta ser ut på följande vis:
RELATE(Customers, Products)
121
Det ursprungliga resultatet i tabellen Products är i detta exempel 3 och resultatet i tabellen
Customers blir efter transformeringen 54.
Sökhistoriken för denna operation blir för tabellen Customers:
Antal
54
Delresultat
54
Sökfråga
Resultatet från tabell - Products - transformerat till tabell
- Customers -
För att se sökhistoriken för tabellen Products och alla mellanliggande tabeller, måste man ange
dessa tabell i sökhistoriken (sökhistoriken kan endast visa en tabell i taget).
OBS!
Det som är tidskrävande i Boolware vid en relaterad sökning är transformeringen av ett resultat i
”sök-tabellen” till ett resultat i ”mål-tabellen”. Denna transformering kan dessutom utföras via
flera tabeller, där varje mellanliggande tabell kräver en transformering.
Det är därför viktigt, att formulera sin sökfråga på så sätt, att man undviker allt för många
transformeringar.
Nedanstående två exempel ger samma slutresultat, men skiljer i hantering:
Exempel 1:
RELATE(Customers)
FIND
Customers.Country:usa
ANDF Products.ProductName:uncle bob organic dried pears
Ger resultatet:
Antal
13
3
Delresultat
13
20
Sökfråga
FIND Customers.Country:usa
ANDF Products.ProductName:(uncle...)
I detta fall kommer endast en transformering att utföras med resultatet i Products (1 träff) som
genererar 20 träffar i tabellen Customers. Det slutliga resultatet - efter AND mot Country:USA blir då 3 träffar.
Exempel 2:
RELATE(Customers)
FIND
Customers.Country:usa
ANDF Products.ProductName:uncle
ANDF Products.ProductName:bob
ANDF Products.ProductName:organic
ANDF Products.ProductName:dried
ANDF Products.ProductName:pears
Ger resultatet:
Antal
13
3
3
3
3
3
Delresultat
13
20
20
20
40
20
Sökfråga
FIND Customers.Country:usa
ANDF Products.ProductName:uncle
ANDF Products.ProductName:bob
ANDF Products.ProductName:organic
ANDF Products.ProductName:dried
ANDF Products.ProductName:pears
Fem transformeringar kommer att utföras och en av dem, dried, genererar två träffar vilka
transformeras till 40 träffar i tabellen Customers. Det slutliga resultatet - efter AND mot
Country:USA - blir då 3 träffar.
122
OBS!
Eftersom ovanstående två sätt att ange en relaterad sökfråga hanteras på olika sätt i Boolware,
kan olika resultat erhållas.
Två tabeller, Tabell1 och Tabell2, som relaterar till varandra genom postnummer.
Exempel:
Fråga1:
RELATE(Tabell1)
FIND Tabell2.Kod1:51 AND Tabell2.Kod2:1003
och
Fråga2:
RELATE(Tabell1)
FIND
Tabell2.Kod1:51
ANDF
Tabell2.Kod2:1003
kan erhålla olika antal träffar om följande data finns i de olika kolumnerna Kod1och Kod2 i
Tabell2.
Tabell2
Rad Kod1
171
51
201
51
294
51
687
104
987
89
1023
51
Kod2
1005
1003
2007
1003
1003
1003
Postnummer
100 50
100 70
200 83
171 14
171 14
216 34
Motsvarande rad i Tabell1
Denna rad pekar på rad 2003 i Tabell1
Denna rad pekar på rad 101 i Tabell1
Denna rad pekar på rad 81 i Tabell1
Denna rad pekar på rad 81 i Tabell1
Denna rad pekar på rad 3012 i Tabell1
Denna rad pekar på rad 4012 i Tabell1
I den första frågan är det endast rad 201 och 1023, där både Kod1:51 och Kod2:1003 finns.
Motsvarande träffar i Tabell1 efter transformeringen blir alltså rad 101 och 4012.
Det slutliga resultatet i Tabell1 är 2.
I den andra frågan är det raderna 171, 201, 294 och 1023, som uppfyller villkoret Kod:51.
Dessa rader transformeras till Tabell1 med följande resultat: 2003, 101, 81, och 4012.
Raderna 201, 687, 987 och 1023 uppfyller villkoret Kod2:1003. Dessa rader transformeras till
Tabell1 med följande resultat: 101, 81, 3012 och 4012. Med detta resultat utförs en AND mot
tidigare resultat i Tabell1. Följande rader kvarstår då: 101, 81 och 4012.
Det slutliga resultatet i Tabell1 är 3.
Viktigt: I den nuvarande versionen av Boolware finns inte stöd för Främmande nycklar, vilka
byggs upp av flera kolumner.
Ett sätt att kringgå detta problem är att skapa en extra kolumn i tabellen, vilken innehåller unik
information i egenskap av Främmande nyckel.
Viktigt: I den nuvarande versionen av Boolware finns inte stöd för att presentera information
från flera tabeller i ett kommando.
Resultatet från varje tabell redovisas separat och endast kolumner inom den tabellen
presenteras.
Navigera i sökresultat
I vissa fall behövs det många sökningar för att nå fram till önskat resultat. Det kan då hända att
man söker ”för långt” och vill backa och sedan fortsätta med nya frågor från en tidigare plats i
söksessionen.
123
I Boolware Index Server benämns alla sökningar mellan två FIND en söksession. Under en
sådan söksession sparas alla frågor och svar i en sökhistorik, vilken man kan navigera i.
Det kan hända, att man efter många sökningar upptäcker att man specificerat fel term eller fel
operator litet tidigare i sökningen vilket gjort att det önskade resultatet uteblivit. I stället för att
söka om allt, kan man i med hjälp av kommandot BACK backa tillbaka till det ställe där felet
uppstod. Från denna plats kan man nu ”fortsätta” sökningarna med de rätta termerna och
operatorerna. Naturligtvis finns också ett kommando för att stega framåt i sökhistoriken;
FORWARD.
Exempel finns under Sökhistorik nedan.
Rankning av resultat från en sökning
Efter en sökning kan man erhålla ett resultat bestående av många 100 000-tals poster och det
är då viktigt att de mest intressanta presenteras först. Vad som är mest intressant kan variera
mellan de olika söktillfällena, varför det bör finnas flera olika sätt att ordna resultatet. Detta
kallas inom Boolware Index Server för att ranka resultatet.
De olika rankningsmöjligheterna i Boolware Index Server är: rankning med avseende på
specificerade söktermer, rankning med avseende på vägda söktermer, rankning med avseende
på en specifik sökterm, sortering på innehållet i en eller flera kolumner (stigande och fallande)
samt likhetsordning.
En ny fråga återställer alltid rankning till BNORANK (ingen rankning), utom vid sökning på
viktade söktermer (FIND bil/9/) och likhetssökning. I dessa fall sätts rankningen automatiskt till
BWEIGHTFREQRANK (frekvensrankning på viktade söktermer) respektive BSIMRANK
(rankning på likhet).
Rankning måste sättas efter en fråga har utförts. Det måste alltid finnas ett sökresultat för att
rankning skall vara meningsfull. Då man rankar på förekomst eller frekvens, måste frågan
innehålla söktermer i kolumner, som är markerade för rankning. Om dessa villkor inte är
uppfyllda, kommer rankningen automatiskt att sättas om till BNORANK (ingen rankning).
Vilken typ av rankning man vill ha, bestäms innan man skall presentera resultatet med hjälp av
ett kommando RANK och ett kommando RANKTERMS, vilka beskrivs i ”Handbok
programmering”.
Ett specialfall rankning kan vara att hämta de framsökta posterna i slumpvis ordning (random).
Detta kan göras genom att ange attributet randomfetch="1" i aktuellt XML respons.
Rankning med avseende på söktermer
Rankning med avseende på söktermer är en metod som kan användas för presentation av
sökresultat i en viss sorteringsordning (på förekomst eller frekvensordning baserad på angivna
sökord)
När rankningsmetoden förekomst är vald, kommer rader som innehåller flest förekomster av
söktermerna att presenteras först.
När rankningsmetoden frekvens är vald kommer ett beräknat frekvensvärde (det totala antalet
förekomster av söktermerna dividerat med det totala antalet ord i kolumnen) mellan 0 och 1 att
visas för varje rad och rader med det högsta värdet presenteras först.
När du använder Boolware Query Language (QL) du kan påverka ordningen genom att ge en
sökterm en vikt vilket påverkar ordningen i resultatet som visas.
124
Exempel:
FIND text:bilar/9/ AND blå AND amerikansk/4/
När antalet förekomster beräknas i ovanstående exempel multipliceras antalet funna bilar med
9, antalet hittade blå med 1 samt antalet hittade amerikansk med 4.
I detta fall kommer rader som innehåller orden bilar och amerikansk många gånger i den
angivna kolumnen att gynnas vid presentationen av resultatet och presenteras först.
OBS i detta fall sätts rankningen automatiskt till BWEIGHTFREQRANK (frekvensrankning på
viktade söktermer).
Viktigt: Rankning skall sättas efter sökning, utom då man söker på viktade söktermer eller
använder likhetssökning. Om man använder rankning på förekomst eller frekvens, måste frågan
innehålla söktermer i kolumner som är markerade för rankning. Om inte dess villkor är
uppfyllda, kommer rankningen automatiskt att sättas om till BNORANK (ingen rankning).
Viktigt: Då man utför en sökning med viktade söktermer sätts rankningen automatiskt till
BWEIGHTFREQRANK (frekvensrankning på viktade söktermer).
Viktigt: Vid rankning används samtliga ord, som finns i en kolumn, vilken har indexerats för
rankning och som förekommit i den aktuella söksessionen. Förekomsten av varje sådant ord
räknas i samtliga framsökta poster.
Om man använder trunkering vid sökning, genereras flera söktermer för varje sökord. Speciellt
försiktig skall man vara vid ”hårda” trunkeringar; exempelvis genererar a* många tusen
söktermer (alla som börjar på a) och varje sådan sökterm måste sökas och räknas för varje
post, vilket kan ta mycket lång tid.
Vår rekommendation är att inte ranka, då ”hårda” trunkeringar används vid sökningen.
Statistik på rankade söktermer
Efter rankning med avseende på angiven sökterm, kan man hjälp av kommandot rankterms
erhålla statistik över de i sökningen ingående söktermerna. Observera, att man måste ha rankat
på angiven sökterm innan detta kommando kan användas. Se vidare beskrivning i ” Handbok
programmering”.
Rankning med avseende på likhet
Efter en likhetssökning erhålls de framsökta artiklarna automatiskt i likhetsordning; mest lik först.
Likheten beräknas bl.a. med hjälp av statistiska metoder och resultatet blir ett värde mellan 0
och 1; ju närmre 1 dess större likhet med den bifogade texten.
Artiklarna sorteras sedan så att den med största likheten kommer först; om en artikel i
databasen använts som bifogad text, skall den artikeln komma först med 1.0000 som
likhetsmått.
Viktigt: Då man utför en likhetssökning sätts rankningen automatiskt till BSIMRANK.
Rankning genom sortering
Ett annat sätt att ranka är att sortera på innehållet i en eller flera kolumner.
125
Det finns fyra olika sorteringsalgoritmer i Boolware:
1)
2)
3)
4)
Boolware försorterade index
Boolware indexsortering (inkrementell sortering)
Sortering efter att ha läst nödvändig information från Boolware datafil (kolumndata
lagrat av Boolware).
Sortering internt efter att ha läst nödvändig information från datakällan (DBMS).
Boolware väljer algoritmerna i ovanstående ordning.
Boolware försorterade index
Om endast en kolumn skall sorteras och den är indexerad som Sträng eller Numerisk och
kolumnen dessutom är markerad för försortering, kan denna sorteringsalgoritm komma i fråga
enligt nedan.
Kolumnen får inte vara uppdaterad sedan senaste laddning eller reorganisering.
Om antalet framsökta poster, som skall sorteras, är mindre än en miljon används denna
sortalgoritm.
Om antalet framsökta poster, som skall sorteras, överstiger en miljon, men är lägre än det värde
som angivits för denna kolumn i maxdbmssort, kommer denna sortalgoritm också att väljas.
Information för samtliga poster måste hanteras, innan sorteringen är slutförd.
OBS
Då sortering sker via Boolware försorterade index, kommer alla poster som saknar information i
sorteringskolumnen (null values) att placeras sist oavsett om det är stigande eller fallande
sortering.
Boolware indexsortering
Om inte Boolware försortering är vald och om den första kolumnen som skall sorteras är
indexerad som Sträng eller Numerisk och antalet framsökta poster, som skall sorteras,
överstiger det värde som angivits för denna kolumn i maxdbmssort kommer denna sortalgoritm
att väljas.
Som namnet på algoritmen indikerar, används Boolware index vid sorteringen. Termerna är då
redan sorterade i alfanumerisk ordning och Boolware behöver endast läsa den aktuella
kolumnens index för att få posterna i rätt sorteringsordning.
Eftersom Boolware utnyttjar sorteringsordningen i indexet, kan en inkrementell
sorteringsstrategi användas; hämta endast fram ett begärt antal poster i sorterad ordning. Om
applikationen inte ange något värde i sorteringskommandot, kommer Boolware att “sortera” 50
poster.
Om fler poster - efter de 50 sorterade - efterfrågas, kommer Boolware att “sortera” nästa
begärt antal poster, innan presentationen sker. Detta betyder, att Boolware endast “sorterar”
poster vid förfrågan (presentation) och garanterar naturligtvis, att posterna kommer i rätt
sorteringsordning.
Man kan via parametrar efter kolumnnamnet ange: sorteringsordning (Asc för stigande
(skönsvärde) eller Desc för fallande) och hur man vill placera poster, som inte innehåller data i
sorteringskolumnen (emptydata = first eller emptydata = last (skönsvärde))
Exempel 1:
126
En sökning ger ett resultat av 2.345.087 poster. Sortering skall ske på den numeriska kolumnen
Vinst och ordningen skall vara fallande; högst vinster först. I detta fall vill man endast presentera
20 poster med de högsta vinsterna.
Sorteringskommandot:
Vinst Desc:20
Endast 20 poster kommer att “sorteras” innan posterna presenteras. Detta
kommer i de allra flesta fall gå fort oavsett storleken på Boolware index.
Då fler poster skall presenteras, kommer Boolware endast att “sortera” så många poster, som
begärs.
Det finns en nackdel med att använda denna sorteringsalgoritm: då Boolware index är mycket
stort (innehåller många tiotals miljoner unika termer) och antalet framsökta poster är litet och
termerna, som man skall sortera på ligger i slutet på indexet (vid stigande sortering) eller i
början av indexet (vid fallande sortering). I dessa fall måste man läsa hela indexet för att sortera
posterna.
Exempel 2:
Det finns en databas som innehåller 30.000.000 företag. En av kolumnerna, telefonNummer, är
indexerad som sträng och kan således dra nytta av Boolware indexsortering. De allra flesta
telefonnummer är unika, varför indexet kommer att innehålla närmare 30.000.000 unika termer.
Om antalet framsökta poster är 10 och sortering skall göras på telefonnummer och de
framsökta posterna innehåller telefonnummer, som ligger i slutet av indexet (99999..), måste
Boolware läsa samtliga 30.000.000 termer för att få posterna i rätt ordning. Vilken annan
Boolware sortalgoritm som helst skulle vara mer effektiv.
Det finns ett sätt att tala om för Boolware att använda någon annan sorteringsalgoritm;
Boolware försorterade index, Boolware datafil, sortering via datakällan eller i sista hand sortera
genom att läsa posterna från datakällan.
Genom att specificera ett värde i maxdbmssort kan man undvika Boolware indexsortering. Om
antalet framsökta poster understiger detta värde, används en annan sorteringsalgoritm än
Boolware indexsortering. Använd Boolware Manager och markera aktuell nivå: databas, tabell
eller kolumn som skall ha det specificerade värdet.
Det värde som skall sättas i maxdbmssort är inte lätt att beräkna; det bästa sättet är att testa.
Några tumregler finns dock:
1. Om kolumnen är markerad för försortering, kan man välja ett högt värde (under en miljon
framsökta poster sorteras automatisk med denna sorteringsalgoritm).
2. Om kolumnens data är lagrat i Boolware datafil, kan man välja ett ganska högt värde.
3. Om datakällan kan användas för sortering, beror det värde som skall sättas mycket på
hur mycket datakällan används av andra processer. Om datakällan finns bakom
brandväggar påverkar också vilket värde som skall väljas.
4. Om data skall läsas från datakällan och sedan sorteras, skall ett ganska lågt värde väljas.
Exempel 3:
Det finns en databas som innehåller 30.000.000 företag. Efter en sökning på företag inom en
viss bransch erhålls 738.976 företag. Man vill sortera på tre kolumner: Ort, Postnummer och
Gatuadress. Den första kolumnen, Ort, är indexerad som sträng och kan således dra nytta av
Boolware indexsortering.
Man är endast intresserad av de 20 första företagen och kan därför ange sorterings-kommandot
enligt följande:
Ort asc, Postnummer asc, Gatuadress asc: 20
Observera att antalet rader att sortera åt gången - om man vill ha annat antal än 50 - måste
anges på sista kolumnen.
127
Först sorteras 20 poster med hjälp av Boolware indexsortering på Ort. Dessa 20 poster sorteras
sedan med hjälp någon av av övriga sorteringsmetoder; exempelvis om resterande två
kolumner finns lagrade i Boolware datafil kommer Boolware datafilsortering att användas.
Exempel 4:
Samma som i Exempel 3, men denna gång vill man placera alla poster, som saknar data i Ort
först.
Man är endast intresserad av de 20 första företagen och kan därför ange sorterings-kommandot
enligt följande:
Ort asc emptydata = first, Postnummer asc, Gatuadress asc: 20
Observera att antalet rader att sortera åt gången - om man vill ha annat antal än 50 - måste
anges på sista kolumnen.
Först sorteras 20 poster med hjälp av Boolware indexsortering på Ort. Dessa 20 poster sorteras
sedan med hjälp någon av övriga sorteringsmetoder; exempelvis om resterande två kolumner
finns lagrade i Boolware datafil kommer Boolware datafilsortering att användas.
Läs data från Boolware datafil och sortera
Om varken Boolware indexsortering eller Boolware försortering kan användas och alla kolumner
som skall sorteras finns i Boolware datafil, kommer denna sorteringsalgoritm att användas.
Boolware extraherar nödvändig information från datafilen och bygger upp en sortnyckel, vilken
används vid sorteringen.
Då information för samtliga poster har lästs, sorteras de med en intern sortalgoritm.
Man kan via parametrar efter kolumnnamnet ange: sorteringsordning (Asc för stigande
(skönsvärde) eller Desc för fallande) och hur man vill placera poster, som inte innehåller data i
sorteringskolumnen (emptydata = first eller emptydata = last (skönsvärde))
Läs data från datakällan och sortera
Om ingen av ovanstående sorteringsalgoritmer kan användas, kommer Boolware att hämta all
nödvändig information från datakällan och bygga upp en sorteringsnyckel av de kolumner som
ingår i sorteringen.
När samtliga poster har hämtats, används en intern sorteringsalgoritm för att sortera posterna.
Detta är den i särklass långsammaste sorteringsalgoritmen och kommer endast att väljas, om
ingen av de ovanstående sorteringsalgoritmerna kan användas.
Man kan via parametrar efter kolumnnamnet ange: sorteringsordning (Asc för stigande
(skönsvärde) eller Desc för fallande) och hur man vill placera poster, som inte innehåller data i
sorteringskolumnen (emptydata = first eller emptydata = last (skönsvärde))
Statistik på kolumner
I databaser, där mycket numerisk information förekommer kan det i många fall vara av intresse
att erhålla enkla statistikuppgifter om innehållet.
Antag att vi har en stor databas, som innehåller information om alla ”aktiebolag” i Europa.
Uppgifter som finns lagrade i denna databas är naturligtvis: namn på företaget, dess
organisationsnummer, adress, bolagsordning, styrelse, branschtillhörighet etc. Annan vanlig
information är de så kallade nyckeltalen, som beskriver företaget i siffror: antal anställda,
omsättning, likvida medel, soliditet, kassalikviditet, vinst etc.
128
Med hjälp av en enkel statistikfunktion i Boolware kan man för en Kolumn erhålla följande
statistiska uppgifter: antalet värden som ingår i statistiken, summan av samtliga värden, maxvärdet, min-värdet, det aritmetiska medelvärdet, medianvärdet, standaravvikelsen, variansen,
det mest frekventa värdet, antal av det mest frekventa värdet samt övre och undre värdet för:
tertial, kvartil, kvintil etc.
Dessa statistiska värden kan beräknas för samtliga numeriska kolumner och man kan välja att
utföra statistiken på hela databasen eller på en framsökt mängd. Detta är speciellt användbart,
då man vill jämföra ett företag mot andra företag i samma bransch, eller en bransch i Sverige
mot samma bransch i Tyskland.
Boolware Index Server kan på ett mycket effektivt sätt ta fram information från miljontals företag
och leverera resultatet till något annat program för ytterligare statistiska beräkningar eller för
grafisk framställning.
Beskrivning av kommandot finns i ”Handbok programmering”.
Beräkning mellan numeriska kolumner
Liksom statistik kan vara intressant i databaser med mycket numerisk information, kan i än
högre grad beräkningar mellan kolumner vara av intresse.
På ett enkelt sätt kan man i Boolware utföra aritmetiska operationer på värden i olika numerisk
kolumner.
En formel kopplas till en ”visnings-kolumn”, där resultatet för beräkningen visas för varje post. I
formeln kan de vanliga fyra räknesätten fritt kombineras och som operander anges antingen en
konstant, en kolumn eller en annan formel.
Exempel: I en databas vill man utföra följande beräkningar: omsättning per anställd, vinst per
anställd, prognos vid en 20% förbättrad försäljning, använda detta nya värde och räkna ut den
nya omsättningen per anställd. Fyra formler behövs och man får då också fyra
visningskolumner förutom de som redan ingår i posten.
Oms/Anställd:
Vinst/Anställd:
Prognos:
Oms/Anställd(P):
”Omsättning” / ”Antal anställda”
”Vinst” / ”Antal anställda”
”Omsättning” * 1.20
”Prognos” / ”Antal anställda”
Vid nästa presentation kommer samtliga ”vanliga” kolumner visas i resultatlistan och dessutom
kommer de ovan fyra ”virtuella kolumnerna” med sitt uträknade värde att presenteras.
Setsökning
I Boolware finns ett samlande begrepp för återanvändning av tidigare utförda sökningar och
dess resultat, som benämns Setsökning. Begreppet Setsökning omfattar ett antal olika
funktioner: Sökhistorik, sparat Set, sparat namngivet Set, sparad Fråga, sparat Resultat, sparad
Scratch, sparad Scratch1 - sparad Scratch5. Sparad Scratch, Sparad Scratch1 - Sparad
Scratch5 hanteras på samma sätt i alla lägen. Funktionerna: sparat Set, sparat namngivet Set,
sparad Fråga och sparat Resultat sparar på disk, medan Sökhistorik, Sparad Scratch, Sparad
Scratch1 - Sparad Scratch5 sparas i minnet. För närvarande finns det 6 Scratch bitmappar i
Boolware: Scratch och Scratch1 - Scratch5.
129
När skall man använda Setsökning
Som framgår av namnen på de ovanstående funktionerna, är de kopplade till sökningar i
Boolware. Funktionerna skall underlätta för användaren att på ett smidigt sätt kunna
återanvända tidigare ställda frågor och deras resultat. Det skall också, under en befintlig
söksession, vara möjligt att navigera inom samtliga frågor från det senaste FIND-kommandot för
att fortsätta söksessionen från ett valt kommando; ta en annan sökväg.
Det kan finnas olika skäl varför man vill återanvända en utförd fråga: 1. den är komplex och
består av hundratals kommandon, argument och operatorer, 2. den tar lång tid att utföra, 3. man
vill använda speciella frågor för bevakningstjänster, 4. det kan finnas anledning att begränsa
sökningar för vissa användare etc.
Gemensamt för de olika funktionerna är, att de är knutna till den aktuella användaren genom att
användaridentifikationen automatiskt sparas, som en del av identifikationsbegreppet.
I vissa fall finns det behov att spara Frågor och Resultat för en grupp av behöriga användare.
Detta åstadkommes genom att använda ett speciellt kommando, public, då en sparad Fråga
och ett sparat Resultat skall vara publikt; dvs alla behöriga användare har tillgång till dem.
Funktionen, public, bygger på att applikationen ansvarar för att endast behöriga användare får
tillgång till de sparade Frågorna/Resultaten. Exempelvis kan man samla användarna
KVSPeterS, KVSKalleP, KVSUlfG.... under ett gemensamt Gruppid: KVS, vilket kan användas
som public för att spara för gruppen gemensamma sparade Frågor och Resultat.
Livslängd, känslighet för uppdateringar, beroende av databas/tabell mm skiljer sig för de olika
funktionerna, vilket innebär att de är lämpliga att använda vid olika tillfällen.
Ett sparat Set, sparat namngivet Set och sparad Scratch (Scratch1 - Scratch5) kan exempelvis
inte användas, om en användare har loggat av och sedan loggar på igen, eftersom ett sparat
Sets, ett sparat namngivet Set och en sparad Scratch livslängd är en användarsession; tiden
mellan inloggning och utloggning för användaren. För att använda frågor och resultat mellan
användarsessioner, måste man explicit spara frågan/resultatet med hjälp av sparad Fråga
respektiver sparat Resultat.
Det är inte lämpligt att använda sparat Resultat, sparat Set, sparat namngivet Set eller sparad
Scratch (Scratch1 - Scratch5), då en databas/tabell uppdateras ofta, eftersom det sparade
resultatet är inaktuellt efter en uppdatering. I detta fall är det betydligt lämpligare att använda sig
av sparad Fråga; uppdateringar påverkar inte sparad Fråga, eftersom man utför sökningen, då
den används.
Sparat Resultat, sparat Set, sparat namngivet Set och sparad Scratch (Scratch1 - Scratch5) är
beroende av för vilken databas/tabell de sparas och bör alltså inte användas, då man vill söka
även i andra databaser och tabeller med samma sökfråga. I detta fall bör man använda sig av
sparad Fråga.
Rent generellt kan man säga, att sparat Set, sparat Resultat, sparat namngivet Set och Sparad
Scratch (Scratch1 - Scratch5) ger snabbare sökningar än sparad Fråga, eftersom man inte
behöver söka om, utan använder det sparade resultatet direkt. Däremot använder sparad Fråga
betydligt mindre diskutrymme, då endast kommandon, argument och operatorer sparas.
Sparad Fråga, sparat Resultat, sparat Set, sparat namngivet Set och Sparad Scratch (Scratch1
- Scratch5) kan i den fortsatta sökningen kombineras med varandra och med andra söktermer.
Sparad Scratch (Scratch1 - Scratch5) är en specialvariant av sparat Set och sparas i minnet.
Man kan endast ha en sparad Scratch (Scratch1 - Scratch5) åt gången; tidigare sparade
Scratch (Scratch1 - Scratch5) läggs över. Sparad Scratch (Scratch1 - Scratch5) används, då
man temporärt vill spara ett resultat, som senare eventuellt kommer att användas (i exempelvis
flöden, där man styr frågorna, kan sparad Scratch (Scratch1 - Scratch5) vara användbar). En
sparad Scratch (Scratch1 - Scratch5) behöver inte tas bort, utan försvinner automatiskt med
sessionen.
130
Viktigt: Ovanstående funktioner skall användas med stor urskiljning om sökprestanda är viktig,
eftersom informationen vid sparad Fråga, sparat Resultat och sparat Set/sparat namngivet Set
lagras på disk.
Detta är speciellt märkbart vid stora resultatmängder för sparat Resultat och sparat Set. I detta
fall krävs också maskinresurser för att ”packa” sökresultatet, innan det skrivs till disk.
Sökhistoriken och sparad Scratch (Scratch1 - Scratch5) sparas i minnet och påverkar inte
prestanda märkbart.
Viktigt: En sparad Fråga, ett sparat Resultat och ett sparat Set/sparat namngivet Set innehåller
all information som behövs vad gäller kolumnnamn och sökord. Då man kombinerar med nya
söktermer, är det mycket viktigt, att dessa söktermer förses med såväl kolumnnamn som
sökord. Om endast sökord anges, kommer det senaste kolumnnamnet som använts att gälla.
Det kan då vara en helt annan än den avsedda, om det aktuella sökordet föregås av en sparad
Fråga, sparat Resultat eller sparat Set/sparat namngivet Set, där det senaste kolumnnamnet
ligger ”dolt” i respektive objekt.
Hur använder man Setsökning
Till de olika funktionerna i Setsökning finns i princip tre kommandon kopplade: save, review och
delete. Dessa kommandon utförs med hjälp av API funktionen Execute. För att söka med hjälp
av ett sparat Set och ett sparat namngivet Set, en sparad Fråga, ett sparat Resultat eller en
sparad Scratch (Scratch1 - Scratch5) använder man under-kommandona: set, query, result eller
scratch (scratch1 - scratch5) i Boolwares sökspråk QL (se beskrivning av Boolwares sökspråk i
början av detta kapitel).
En stor skillnad mellan Execute och QL är, att Execute använder nyckelord för att ange hur de
olika kommandona skall tolkas, medan QL använder sig av under-kommandon. Ett nyckelord
föregår alltid sitt attribut och markers kursivt i nedanstående beskrivning. Ett under-kommando
ingår i QL och attributet innesluts alltid inom parenteser.
Nedan följer en sammanställning av de olika kommandona för var och en av de olika
funktionerna.
Funktionen sparat Set och sparat namngivet Set kommer att hanteras tillsammans i
nedanstående beskrivning. Det som skiljer sparat Set från sparat namngivet Set är:
1. Namn för ett sparat namngivet Set anges direkt i frågan, medan det genereras automatiskt
för sparat Set. Om ett namngivet sparat Set inleds med @@@, kommer det inte att sparas,
om resultatet är noll (finns inget resultat).
2. Man behöver inte sätta på och slå av växeln setsearch vid sparat namngivet Set.
Sökhistorik sköts helt automatiskt av systemet och man kan endast aktivera/deaktivera samt
hämta rader angående Sökhistorik med hjälp av denna funktion. De API som skall användas
beskrivs i ”Handbok programmering”.
Följande nyckelord finns: public, name, order, ctime, dbname, tabname och fulltext, där:
public
name
order
ctime
dbname
tabname
fulltext
är ett samlande idbegrepp för användare med samma grupptillhörighet. Det är
applikationens ansvar att se till, att endast användare med behörighet får tillgång
till de publikt sparade Frågorna/Resultaten. En grupp kan bestå av användare inom
exempelvis en myndighet eller en avdelning inom ett företag.
är idbegrepp på sparat Set, sparat namngivet Set, sparad Fråga eller sparat Result
anger att sortering skall utföras
föregår tid, som kan användas vid sortering och selektering
är namnet på aktuell databas, som kan användas vid sortering och selektering
är namnet på aktuell tabell, som kan användas vid sortering
betyder att hela sparat Set, sparat namngivet Set, sparad Fråga eller sparat Result
131
skall visas
All sökning och identifiering av ett sparat Set, ett sparat namngivet Set, sparad Fråga och sparat
Resultat sker med det som specificeras efter name. Sökningen följer Boolware standard, vilket
innebär att trunkeringar är tillåtna (se beskrivning av Boolwares sökspråk i början av detta
kapitel). Om ett idbegrepp innehåller blanktecken, måste namnet omslutas av citationstecken.
Exempel: name ”fråga 1” är tillåtet, medan name resultat sport inte är tillåtet.
Efter order kan man ange: name, ctime, dbname och tabname, vilket innebär, att man sorterar
på idbegrepp, tid, databasnamn och tabellnamn. Nyckelorden asc/desc anger, om man vill
sortera i stigande eller fallande ordning.
Man kan selektera på följande begrepp: ctime och dbname, vilket innebär, att man söker på
idbegreppet och sedan endast tar med de objekt som uppfyller selekteringsbegreppen. Då man
selekterar på ctime, kan man ange >, < eller = före tiden för att ange om de objekt som skall
godkännas skall vara större än, mindre än eller lika med den angivna tiden. Vid likhet (= eller
utelämnat) kan man ange ett intervall: StartTime..EndTime.
Då fulltext anges är det endast ett objekt som visas. I detta fall visas den kompletta
söksträngen, vilken vid exempelvis likhetssökning kan bestå av många tusen tecken. Vid
visning, REVIEW, utan fulltext, visas endast de 100 första tecknen av den aktuella söksträngen.
Sparat Set
DELETE
Set
Id
cmp
yyyymmdd
hh:mm:ss
name Id [ctime [cmp]yyyymmdd:hh:mm:ss[..yyyymmdd:hh:mm:ss]
[dbname databasnamn], där
är identifikationsbegrepp; i detta fall S1, S2, S3 eller namngivet set i frågan
är >, < eller = (ej obligatoriskt)
är år, månad och dag
är timme, minut och sekund
Exempel: DELETE Set name S1* dbname Tidskrifter
I detta exempel kommer samtliga sparade Set som börjar på och tillhör databasen Tidskrifter att
tas bort. Observera, att man alltid måste specificera name och ett attribut vid DELETE för att
undvika, att samtliga sparade Set försvinner av misstag.
REVIEW
Set
Id
cmp
yyyymmdd
hh:mm:ss
dbName
order
sortbegrepp
ordning
fulltext
[name Id] [ctime [cmp]yyyymmdd:hh:mm:ss[..yyyymmdd:hh:mm:ss]
[dbname databasnamn] [order sortbegrepp [ordning]] [fulltext]
är identifikationsbegrepp i detta fall S1, S2, S3… eller namngiver set, om
inget Id anges listas alla sparade Set
är >, < eller = (ej obligatoriskt)
är år, månad och dag
är timme, minut och sekund
endast sparade set för angiven databas kommer att presenteras
anger att man vill sortera på något av nedanstående begrepp
vad man skall sortera på; name, ctime, dbname och tabname
asc stigande eller desc fallande
set i sin helhet kommer att presenteras; annars visas endast de första
100 tecknen i ett set. Ett unikt set måste specificeras, då fulltext.
Exempel:
REVIEW Set name S*1 ctime >20031016:12:00:00 dbname Tidskrifter order tabname
desc.
Alla sparade Set, som börjar på S och slutar på 1 är skapade efter klockan 12:00 den 16
oktober 2003 och tillhör databasen Tidskrifter kommer att visas sorterade på tabellnamn i
fallande ordning.
132
Kommandot SAVE används inte vid sparat Set. Om växeln setsearch är aktiverad, sparas Set
automatiskt med automatisk namnsättning S1, S2, S3.... Det går även att ange namn på sökset
direkt på kommandot i en sökfråga.
FIND:”Sökning i Stockholm” ort:stockholm AND omsättning:>100.
Om man endast vill spara namngivet set, då resultatet är större än 0 skriver man:
FIND:”@@@Sökning i Stockholm” ort:stockholm AND omsättning:>100.
Ett sparat namngivet Set kommer nu att sparas under namnet: ”Sökning i Stockholm” och kan
användas på vanligt sätt enligt nedan.
Exekvering sker med hjälp av ett underkommando, set.
Exempel: FIND set(S4) AND set(“Sökning i Stockholm”) NOT Text:kultur
Mellan ett sparat Set S4 och ett sparat namngivet Set “Sökning i Stockholm” utförs en boolesk
AND och därefter utförs en boolesk NOT med termen kultur i kolumnen Text. Observera, att
man alltid måste ange kolumntillhörighet på den term som följer efter ett set; de angivna
frågorna i det specificerade setet kan ju innehålla andra kolumner, vilka inte skall gälla för
efterföljande termer.
Sparad Fråga
DELETE
Query
Gruppid
Id
cmp
yyyymmdd
hh:mm:ss
[public Gruppid] name Id
[ctime [cmp]yyyymmdd:hh:mm:ss[..yyyymmdd:hh:mm:ss]
[dbname databasnamn], där
är identifikationsbegreppet för användare med samma grupptillhörighet (se
beskrivning av public ovan)
är identifikationsbegrepp i detta fall det som angivits vid SAVE
är >, < eller = (ej obligatoriskt)
är år, månad och dag
är timme, minut och sekund
Exempel:
DELETE Query name * ctime <20030701
I detta exempel kommer samtliga sparade Frågor som skapats före den första juli 2003 att tas
bort. Observera, att man alltid måste specificera name och ett attribut vid DELETE för att
undvika, att samtliga sparade Frågor försvinner av misstag.
Exempel:
DELETE Query public KVS name Fråga1
I detta exempel kommer den publika sparade Frågan Fråga1 att tas bort. Observera, att det
endast är den som skapat den sparade Frågan, som kan ta bort den.
REVIEW
Query
[public Gruppid] [name Id]
[ctime [cmp]yyyymmdd:hh:mm:ss[..yyyymmdd:hh:mm:ss]
[dbname databasnamn] [order sortbegrepp [ordning]] [fulltext],
där
Gruppid
Id
är identifikationsbegreppet för användare med samma grupptillhörighet (se
beskrivning av public ovan)
är identifikationsbegrepp; i detta fall det som angivits vid SAVE, om inget Id
anges listas alla sparade Frågor
133
cmp
yyyymmdd
hh:mm:ss
dbName
order
sortbegrepp
ordning
fulltext
är >, < eller = (ej obligatoriskt)
är år, månad och dag
är timme, minut och sekund
endast sparade frågor för angiven databas kommer att presenteras
anger att man vill sortera på något av nedanstående begrepp
vad man skall sortera på; name, ctime, dbname och tabname
asc stigande eller desc fallande
fråga i sin helhet kommer att presenteras; annars visas endast de första
100 tecknen i en fråga. En unik fråga måste specificeras, då fulltext.
Exempel:
REVIEW Query name *sport* ctime >2002 order ctime desc
Alla sparade Frågor som innehåller ordet sport i name och är skapade efter 2002 kommer att
visas i omvänd kronologisk ordning; den senast sparade Frågan presenteras först.
Exempel:
REVIEW Query public KVS name *sport* ctime >2002 order ctime desc
Alla sparade Frågor som innehåller ordet sport och är skapade efter 2002 kommer att visas i
omvänd kronologisk ordning; den senast sparade Frågan presenteras först. I detta fall kommer
endast publika sparade Frågor inom gruppen KVS att listas.
SAVE
Query
Gruppid
Id
[public Gruppid] [name] Id
är identifikationsbegreppet för användare med samma grupptillhörighet (se
beskrivning av public ovan)
är ett identifikationsbegrepp, som man i fortsättningen använder för att
identifiera den sparade Frågan. Om public gruppid anges, måste även
nyckelordet name specificeras.
Exempel:
SAVE
Query name ”Fråga 1”
Alla kommandon, argument och operatorer från det senaste FIND-kommandot kommer att
sparas under namnet Fråga 1, vilket sedan används som identifikationsbegrepp vid framtida
användning.
Exempel:
SAVE
Query
public KVS name ”Publik fråga 1”
Alla kommandon, argument och operatorer från det senaste FIND-kommandot kommer att
sparas under namnet Publik fråga 1, vilket sedan används som identifikationsbegrepp vid
framtida användning. För att använda Publik fråga 1, måste man tillhöra användargruppen
KVS och ange detta vid sökning. Endast användare, vars användaridentitet börjar med KVS,
kan komma i fråga.
Exekvering sker med hjälp av ett underkommando, query.
Exempel:
FIND (query(“Fråga 1”) OR query(fråga4)) AND Text:sport
Mellan den sparade Frågan Fråga 1 och den sparade Frågan fråga4 utförs en boolesk OR och
därefter utförs en boolesk AND med termen sport i kolumnen Text. Observera, att man alltid
måste ange kolumntillhörighet på den term som följer efter en query; de angivna frågorna i den
specificerade query kan ju innehålla andra kolumner, vilka inte skall gälla för efterföljande
termer.
Om man vill använda en publik sparad Fråga, måste man ange det på nedanstående sätt:
Exempel:
134
FIND (query(public(KVS) “Fråga 1”) AND Text:sport
Mellan den för KVS publika sparade Frågan Fråga 1 och termen Text:sport utförs en boolesk
AND.
Sparat Resultat
DELETE
Result
Gruppid
Id
cmp
yyyymmdd
hh:mm:ss
[public Gruppid] name Id
[ctime [cmp]yyyymmdd:hh:mm:ss[..yyyymmdd:hh:mm:ss]
[dbname databasnamn], där
är identifikationsbegreppet för användare med samma grupptillhörighet (se
beskrivning av public ovan)
är identifikationsbegrepp i detta fall det som angivits vid SAVE, om inget Id
anges listas alla sparade Resultat
är >, < eller = (ej obligatoriskt)
är år, månad och dag
är timme, minut och sekund
Exempel:
DELETE Result name “Fotboll*” ctime >20020901 tabname sportbladet
I detta exempel kommer samtliga sparade Resultat som skapats efter den första september
2002 och tillhör tabellen sportbladet att tas bort. Observera, att man alltid måste specificera
name och ett attribut vid DELETE för att undvika, att samtliga sparade Resultat försvinner av
misstag.
Exempel:
DELETE Result public KVS name Resultat1
I detta exempel kommer det publika sparade Resultatet Resultat1 att tas bort. Observera, att
det endast är den som skapat det sparade Resultatet, som kan ta bort den.
REVIEW
Result
Gruppid
Id
cmp
yyyymmdd
hh:mm:ss
dbName
order
sortbegrepp
ordning
fulltext
[public Gruppid] [name Id]
[ctime [cmp]yyyymmdd:hh:mm:ss[..yyyymmdd:hh:mm:ss]
[dbname databasnamn] [order sortbegrepp [ordning]] [fulltext]
är identifikationsbegreppet för användare med samma grupptillhörighet (se
beskrivning av public ovan)
är identifikationsbegrepp; i detta fall det som angivits vid SAVE
är >, < eller = (ej obligatoriskt)
är år, månad och dag
är timme, minut och sekund
endast sparade set för angiven databas kommer att presenteras
anger att man vill sortera på något av nedanstående begrepp
vad man skall sortera på; name, ctime, dbname och tabname
asc stigande eller desc fallande
resultat i sin helhet kommer att presenterad; annars visas endast de första
100 tecknen i ett resultat. Ett unikt resultat måste specificeras, då fulltext.
Exempel:
REVIEW Result name “resultat 4” fulltext.
Det sparade Resultatet, resultat 4, kommer att visas i sin helhet. Detta innebär, att den
kompletta söksträngen kommer att visas. I vissa fall, då exempelvis likhetssökning ingår i det
sparade Resultatet, kan söksträngen bestå av många tusen tecken.
Exempel:
REVIEW Result public KVS name *sport* ctime >2002 order ctime desc
135
Alla sparade Result som innehåller ordet sport och är skapade efter 2002 kommer att visas i
omvänd kronologisk ordning; det senast sparade Resultatet presenteras först. I detta fall
kommer endast publika sparade Resultat inom gruppen KVS att listas.
SAVE
Result
Gruppid
Id
[public Gruppid] [name] Id
är identifikationsbegreppet för användare med samma grupptillhörighet (se
beskrivning av public ovan)
är ett identifikationsbegrepp, som man i fortsättningen använder för att
identifiera det sparade Resultatet. Om public gruppid anges, måste även
nyckelordet name specificeras.
Exempel:
SAVE
Result name Sportresultat1.
Alla kommandon, argument och operatorer från det senaste FIND-kommandot samt
slutresultatet kommer att sparas under namnet Sportresultat1, vilket sedan används som
identifikationsbegrepp vid framtida användning.
Exempel:
SAVE
Result public KVS name ”Publikt resultat 1”
Alla kommandon, argument och operatorer från det senaste FIND-kommandot samt
slutresultatet kommer att sparas under namnet Publikt resultat 1, vilket sedan används som
identifikationsbegrepp vid framtida användning. För att använda Publikt resultat 1, måste man
tillhöra gruppen KVS och ange detta vid sökning.
Exekvering sker med hjälp av ett underkommando result.
Exempel:
FIND result(Sportresultat1) AND result(Djurgården6) OR Text:hammarby
Mellan det sparade Resultatet Sportresultat1 och det sparade Resultatet Djurgården6 utförs
en boolesk AND och därefter utförs en boolesk OR med termen hammarby i kolumnen Text.
Observera, att man alltid måste ange kolumntillhörighet på den term som följer efter ett result;
de angivna frågorna i det specificerade result kan ju innehålla andra kolumner, vilka inte skall
gälla för efterföljande termer.
Om man vill använda ett publikt sparat Resultat, måste man ange det på nedanstående sätt:
Exempel:
FIND result((public(KVS) ”Publikt resultat 1”) AND result(Djurgården6)
Mellan den för KVS publika sparade Resultatet Publikt resultat 1 och det sparade Resultatet
Djurgården6 utförs en boolesk AND.
Sparad Scratch
För sparad scratch, scratch1 - scratch5 finns bara tre "kommandon": save, delete och scratch()
(scratch1() - scratch5()). Varje tabell har denna uppsättning scratch bitmappar.
DELETE scratch[n] [table tabellnamn]
n=1-5
Det normala förfarandet när man använder en scratch bitmapp är:
1. Utför frågor
2. Sparar det aktuella resultatet i en scratch bitmapp
3. Utför fler frågor, där man använder det sparade scratch bitmappen
4. Tag bort den använda scratch bitmappen.
136
Om man inte tidigare har utfört någon fråga, måste man ange table och namnet på en tabell,
som ingår i den aktuella databasen vid delete av en scratch bitmapp.
En felkod (-62) erhålls om:
1. Det inte finns någon aktuell tabell
2. Den specificerade tabellen inte ingår i den aktuella databasen
Exempel1:
DELETE
scratch2 table Företag
Ingen fråga har utförts innan den angivna scratch bitmappen skall tas bort, varför man måste
ange vilken tabelltillhörighet den har.
Det aktuella resultatet sparat som scratch2 i tabell Företag kommer att tas bort.
Exempel2:
DELETE
scratch1
Frågor har föregått detta kommando, varför ingen tabell behöver anges; det aktuella resultatet i
scratch1 i den aktuella tabellen kommer att tas bort.
SAVE scratch[n] [table tabellnamn bitmap 'namn på bitmapp']
n=1-5
Ett resultat sparas i en scratch bitmapp för att användas vid en senare fråga. Om inget
- förutom namnet på scratch bitmappen - anges, sparas det aktuell resultatet i den aktuella
tabellen i den angivna scratch bitmappen.
Om man har ett resultat från en annan tabell i samma databas, kan man spara detta genom att
ange tabelltillhörighet.
Olika typer av resultat kan sparas (bitmap 'namn på bitmap'):
1. Det aktuella resultatet (inget behöver anges; detta är skönsvärdet)
2. 'Intermediate result'; det resultat den sista frågan gav (ange intermediate)
3. Resultatet i 'Custom list'; det som sparats i vid användandet av Flöde (ange custom)
Exempel1:
SAVE
scratch1
Det aktuella resultatet från det senaste sökningen kommer att sparas temporärt i scratch1.
Detta resultat kan användas vid ett senare tillfälle.
Exempel2:
SAVE
scratch4 table Personer
Det aktuella resultatet från det senaste sökningen kommer att sparas temporärt i en annan
tabell (Personer) i scratch4. Detta resultat kan användas vid ett senare tillfälle.
Exempel3:
SAVE
scratch2 bitmap custom
Det aktuella resultatet från 'Custom list' kommer att sparas temporärt i scratch2. Detta resultat
kan användas vid ett senare tillfälle.
Exempel4:
SAVE
scratch3 table Personer bitmap intermediate
137
Antalet träffar från det senaste sök-kommandot från en annan tabell (Personer) kommer att
sparas temporärt i scratch3. Detta resultat kan sedan användas vid ett senare tillfälle.
Viktigt: Det måste alltid finnas eller anges en tabell, då DELETE och SAVE scratch används.
Kommandot SAVE kräver dessutom, att det finns ett resultat (resultatet kan vara 0).
Exekvering sker med hjälp av ett underkommando: scratch, scratch1 - scratch5.
Exempel:
FIND Text:Djurgården OR Text:AIK
SAVE scratch2
FIND scratch2() OR Text:hammarby
Resultatet från det senaste FIND-kommandot kommer att sparas i scratch2.
Ett senare FIND kommando använder det som sparats i scratch2.
Mellan den sparade scratch2 och termen hammarby i kolumnen Text utförs en boolesk OR.
Observera, att man alltid måste ange kolumntillhörighet på den term som följer efter ett
scratch2; de angivna frågorna i det specificerade result kan ju innehålla andra kolumner, vilka
inte skall gälla för efterföljande termer.
Funktionalitet
Nedan följer en beskrivning av funktionalitet för de olika komponenterna som ingår i Setsökning.
Som påpekats tidigare, används de olika funktionerna för olika ändamål. Det är också viktigt att
notera att typen av databas kan ha en avgörande betydelse huruvida man skall använda sparad
Fråga eller sparat Resultat. Om en databas uppdateras mycket frekvent, är det kanske
lämpligare att använda sparad Fråga, medan sparat Resultat kan vara att föredra, om komplexa
sökningar - vilka tar lång tid - leder fram till slutresultatet.
Eftersom ett sparat Set endast kan användas under en användarsession, måste man använda
sparad Fråga eller sparat Resultat, om man vill utnyttja resultatet i senare användarsessioner.
Sökhistorik
Sökhistorik är ett sätt att navigera inom den aktuella söksessionen; alla kommandon sedan det
senaste FIND-kommandot. Det finns möjlighet att backa och gå framåt mellan de olika
kommandona.
Denna funktion kan, när som helst, aktiveras/deaktiveras via inställningar. Så länge den är aktiv
sparas alla kommandon inom en söksession. Det är viktigt att deaktivera denna funktion, om
man inte använder den, eftersom den gör att varje sökning blir litet långsammare.
I vissa fall behövs det många sökningar för att nå fram till önskat resultat. Det kan då hända, att
man söker ”för långt” och vill backa och sedan fortsätta med nya frågor från en tidigare plats i
söksessionen.
Under en sådan söksession sparas alla frågor och svar i en sökhistorik, vilken man kan
navigera inom.
Nedan ges ett mycket enkelt exempel på en söksession. Först presenteras samtliga frågor och
därunder kommer samtliga rader ur sökhistoriken. Under en pågående sökning erhålls
naturligtvis en sökhistorikrad efter varje fråga.
138
En sökhistorikrad består av följande information: antalet träffar efter det aktuella kommandot,
antal träffar den aktuella frågan genererar, aktuellt kommando samt söksträngen (termer och
operatorer max. 500 tecken).
Exempel:
FIND bil
AND gul
AND stor
AND (motor OR roadracing)
AND >=20000101
OR kultur
Sökhistorik:
97.147
950
249
72
14
70.256
97.147
23.018
34.464
14.112
69.005
70.262
FIND bil
AND gul
AND stor
AND (motor OR roadracing)
AND >=20000101
OR kultur
Efter denna sökning ser man att sökningen på kultur troligtvis har förstört tidigare sökningar
och inser, att denna sökning skulle ha inkluderats i sökningen som handlade om motor och
roadracing. Använd nu kommandot BACK tre gånger för att positionera till kommandoraden:
AND motor. Nu kan man ersätta det felaktiga kommandot: AND (motor OR roadracing) med
det ändrade kommandot AND (motor OR roadracing OR kultur) och sedan AND >=20000101
och erhålla annat resultat
Sökhistorik:
97.147
950
249
104
27
97.147
23.018
34.464
84.374
69.005
FIND bil
AND gul
AND stor
AND (motor OR roadracing OR kultur)
AND >=20000101
Kommandona AND, OR, NOT och XOR kan förses med ett avslutande F (ANDF, ORF, NOTF
och XORF), vilket innebär, att de skall betraktas som ”nya” kommandon för sökhistoriken, då de
förekommer som operatorer. Dessa operatorer används enbart för att erhålla ”delresultat” från
de olika frågorna och i relaterad sökning (se avsnittet Sök relaterat (Join) ovan).
Genom att använda operatorn ANDF kan ovanstående sökning skrivas som ett kommando,
men ändå kan man erhålla ”delresultat”:
FIND bil ANDF gul ANDF stor ANDF (motor OR roadracing OR kultur) ANDF
>=20000101
Sökhistorik från denna sökning blir då:
97.147
97.147
FIND bil
950
23.018
ANDF gul
249
34.464
ANDF stor
104
84.374
ANDF (motor OR roadracing OR kultur)
27
69.005
ANDF >=20000101
Viktigt: Då Sökhistorik är aktiverad, sparas information om varje utförd sökning. Informationen
som sparas - speciellt de framsökta postreferenserna - kan ta stort minnesutrymme, då
databasen innehåller stora mängder poster. Dessutom åtgår viss tid att lagra denna information,
varför en viss försiktighet skall iakttagas vid användandet av denna funktion.
Sparat Set
Sparat Set används för att spara aktuell fråga och dess resultat. Det finns två typer av sparat
Set:
139
1.
Systemet sätter automatiskt ett namn på den aktuella frågan och sparar: kommando,
argument, operatorer och resultat.
Namnet, som automatgeneraras och inte kan ändras, består av bokstaven S och ett
löpnummer (S1, S2 etc.).
Denna funktion aktiveras/deaktiveras med hjälp av inställningar.
2.
Användaren anger namn på sparat Set i direkt anslutning till ett kommando och detta
sparade namngivna Set blir då automatiskt sparat efter frågan utförts.
Eftersom denna funktion belastar varje sökning och dessutom kräver diskutrymme, skall den
användas med förnuft. Ett typiskt sparat Set för en Tabell, som innehåller 1.000.000 poster,
kräver ca. 40 - 50 Kb diskutrymme, beroende på hur många träffar resultatet innehåller.
Ett sparat Set/sparat namngivet Set är knutet till användaren. Det går dessutom endast att
använda för samma databas och tabell, som det sparades för (den kan dock omfatta flera
tabeller, då kommandot TABLES används).
Ett sparat Set/sparat namngivet Set kan sedan, när som helst och var som helst, användas i
kommande sökningar. Det är ett sätt att dels slippa skriva om komplexa frågor med hundratals
argument och dels ett sätt för systemet att undvika att utföra sökningen igen och istället utnyttja
det sparade resultatet. Dessa sökningar går oftast betydligt snabbare, än då man söker utan att
använda sparat Set.
Ett sparat Set/sparat namngivet Set aktiveras med hjälp av underkommandot set(namn), där
namn anger det namn det sparade Setet/sparade namngivna Setet fått av Boolware eller åsatts
vid sökning.
Livslängden på ett sparat Set/sparat namngivet Set är den aktuella användarsessionen; då
användaren loggar ut, försvinner alla sparade Set/sparade namngivna Set för denna
användare.
Nedan ges ett mycket enkelt exempel på hur sparade Set/sparat namngivet Set kan användas.
Först presenteras samtliga frågor, därunder kommer samtliga rader från de sparade
Seten/sparade namngivna Seten och slutligen ett exempel på hur man kan använda de sparade
Seten/sparade namngivna Seten.
Exempel:
FIND:”min bil” bil
AND gul
AND stor
AND (motor OR roadracing)
AND >=20000101
REVIEW set
listar alla sparade Set
Sparade Set:
Namn
Tid
”min bil” 2003-10-17 15:49:22
S2
2003-10-17 15:50:42
S3
2003-10-17 15:52:14
S4
2003-10-17 15:52:57
DB
Tidskrifter
Tidskrifter
Tidskrifter
Tidskrifter
Tabell
Artiklar
Artiklar
Artiklar
Artiklar
Antal
97.000
27.000
82.000
12.000
S5
Tidskrifter
Artiklar
69.000
2003-10-17 15:54:31
Sökfråga
bil
gul
stor
(motor OR
roadracing)
>=20000101
Observera, att endast de 100 första tecknen av sökfrågan visas, om inte fulltext angivits. Om
fulltext anges, kan endast ett sparat Set visas.
I denna söksekvens är det första sparade Setet mangivet i kommandot.
140
Följande fråga:
FIND bil AND gul AND stor AND (motor OR roadracing OR kultur)
Kan då skrivas:
FIND “min bil” AND S2 AND S3 AND (S4 OR kultur)
Kan också skriva med underkommandot set.
FIND set(”min bil”) AND set(S2) AND set(S3) AND (set(S4) OR kultur)
I detta fall görs ingen sökning i Boolware Index för S1, S2, S3 och S4, utan de sparade
resultaten används. Termen kultur måste dock sökas i Boolware Index.
Viktigt: Då setsearch är aktiverad, sparas information om varje utförd sökning. Informationen
som sparas - speciellt de framsökta postreferenserna - kan ta stort minnesutrymme, då
databasen innehåller stora mängder poster. Dessutom åtgår viss tid att lagra denna information,
varför en viss försiktighet skall iakttagas vid användandet av denna funktion. Det är därför vid
många tillfällen klokare att namnge det sparade namngivna Setet i kommandot. Det är två
uppenbara fördelar med det: endast ”viktiga” frågor kommer att sparas och det blir lättare att
hålla reda på sparade namngivna Set som man själv namngivit.
Sparad Fråga
Funktionen sparad Fråga används för att spara alla frågor (kommandon, argument och
operatorer) sedan det senaste FIND-kommandot. Argumenten kan bestå av kolumnnamn och
söktermer, eller endast söktermer, om fritextsökning gäller. Användaren anger ett unikt och
beskrivande namn för att lätt kunna identifiera den sparade Frågan vid senare användning.
En sparad Fråga kan också göras publik; flera användare i samma användargrupp kan utnyttja
den sparade Frågan. Detta åstadkommes genom att ange public, då man sparar, tar bort, listar
och använder den sparade Frågan vid sökning. Det är applikationens ansvar att se till att endast
behöriga användare kommer åt publika sparade Frågor.
Den sparade Frågan kan sedan, när som helst och var som helst, användas i kommande
sökningar.
Den sparade Frågan är inte, i motsats till sparat Set och sparat Resultat, knuten till en bestämd
databas och tabell, utan kan användas i vilken databas som helst, som innehåller specificerade
kolumner.
Den sparade Frågan aktiveras med hjälp av underkommandot query(namn), där namn anger
det namn den sparade Frågan åsattes, då den sparades. För att aktivera en publikt sparad
Fråga anges underkommandot på följande vis: query(public(gruppid) namn), där gruppid
anger namnet på gruppen och namn anger namnet på den sparade Frågan.
Det kan finnas flera anledningar att använda funktionen sparad Fråga: stora komplexa frågor
kan döljas, en sparad Fråga kan användas för att avskärma vissa delar av databasen för vissa
användare etc.
En sparad Fråga existerar tills den explicit tas bort av en användare.
Denna funktion kräver ganska litet resurser, diskutrymme, i jämförelse med sparat Set och
sparat Resultat.
Nedan ges ett mycket enkelt exempel på hur sparade Set kan användas. Först presenteras
samtliga frågor, därunder kommer samtliga rader från de sparade Seten och slutligen ett
exempel på hur man kan använda den sparade Frågan.
Exempel:
FIND bil
AND gul
141
AND stor
AND (motor OR roadracing)
AND >=20000101
Spara alla kommandon från senaste FIND-kommandot med hjälp av följande:
SAVE query ”gula bilar”
Lista alla sparade Frågor för denna användare; genom att utelämna name, kommer samtliga
sparade Frågor att listas. De sparade Frågorna sorteras på namn.
REVIEW query
Namn
blå bilar
order name
Tid
2003-10-17 15:49:22
DB
Tidskrifter
Tabell
Motor
Sökfråga
bil AND blå
AND stor...
gula bilar
2003-10-17 15:49:22
Tidskrifter
Motor
bil AND gul
AND stor...
spännande artiklar2003-10-17 15:49:22
Tidskrifter
Artiklar
deckare AND
mord...
stora bilar
2003-10-17 15:49:22
Tidskrifter
Motor
bil AND stor...
tråkiga artiklar
2003-10-17 15:49:22
Tidskrifter
Artiklar
politik AND
skatt...
Observera, att endast de 100 första tecknen av sökfrågan visas, om inte fulltext angivits. Om
fulltext anges, kan endast en sparad Fråga visas.
Följande fråga:
FIND bil AND gul AND stor AND (motor OR roadracing) AND >=20000101
Kan då skrivas:
FIND query(”gula bilar”)
I detta fall söks Boolware Index precis som för den ursprungliga frågan, men man behöver inte
ange alla kommandon, argument och operatorer. Denna sparade Fråga kan dessutom
användas i vilken databas som helst, vilken är indexerad för fritextsökning (inga kolumner har
angivits i argumenten).
Sparat Resultat
Funktionen sparat Resultat sparar alla frågor (kommandon, argument och operatorer) och deras
slutresultat sedan det senaste FIND-kommandot. Argumenten kan bestå av kolumnnamn och
söktermer, eller endast söktermer, om fritextsökning gäller. Användaren anger ett unikt och
beskrivande namn för att lätt kunna identifiera det sparade Resultatet vid senare användning.
Ett sparat Resultat kan också göras publik; flera användare i samma användargrupp kan
utnyttja det sparade Resultatet. Detta åstadkommes genom att ange public, då man sparar, tar
bort, listar och använder det sparade Resultatet vid sökning.
Det sparade Resultatet kan sedan, när som helst och var som helst, användas i kommande
sökningar.
Det sparade Resultatet är, i motsats till sparad Fråga, knuten till den databas och den/de
tabeller resultatet sparades för. Om man sparat ett resultat för databasen Tidskrifter och
tabellen Artiklar, kan detta sparade Resultat endast användas för tabellen Artiklar i databasen
Tidskrifter.
Det sparade Resultatet aktiveras med hjälp av underkommandot result(namn), där namn anger
det namn det sparade Resultatet åsattes, då det sparades. För att aktivera ett publikt sparat
Resultat anges underkommandot på följande vis: result(public(gruppid) namn), där gruppid
anger namnet på gruppen och namn anger namnet på det sparade Resultatet.
142
Det kan finnas flera anledningar att använda funktionen sparat Resultat: stora komplexa frågor
kan döljas, ett sparat Resultat kan användas för att avskärma vissa delar av databasen för vissa
användare, en komplex fråga kan ta lång tid att söka fram slutresultatet etc.
Ett sparat Resultat existerar tills det explicit tas bort av en användare.
Denna funktion kräver ganska mycket resurser, diskutrymme, i jämförelse med sparad Fråga.
Nedan ges ett mycket enkelt exempel på hur sparade Resultat kan användas. Först presenteras
samtliga frågor, därunder kommer samtliga rader från de sparade Resultaten och slutligen ett
exempel på hur man kan använda det sparade Resultatet.
Exempel:
FIND bil
AND gul
AND stor
AND (motor OR roadracing)
AND >=20000101
Spara alla kommandon från senaste FIND-kommandot med hjälp av följande:
SAVE result ”gula bilar”
FIND bil
AND blå
AND stor
AND (motor OR roadracing)
AND >=20000101
Spara alla kommandon från senaste FIND-kommandot med hjälp av följande:
SAVE result ”blå bilar”
Lista alla sparade Resultat för denna användare; genom att utelämna name, kommer samtliga
sparade Resultat att listas.
REVIEW result order name
Namn
blå bilar
Tid
2003-10-17 15:49:22
DB
Tidskrifter
Tabell
Motor
Antal
32
gula bilar
2003-10-17 15:49:22
Tidskrifter
Motor
14
artiklar
2003-10-17 15:49:22
Tidskrifter
Artiklar
74
stora bilar 2003-10-17 15:49:22
Tidskrifter
Motor
123
artiklar2
Tidskrifter
Artiklar
323
2003-10-17 15:49:22
Sökfråga
AND blå AND
stor...)
(bil AND gul
AND stor...)
(deckare
AND mord...)
(bil AND
stor...)
(politik AND
skatt...)
Observera, att endast de 100 första tecknen av sökfrågan visas, om inte fulltext angivits. Om
fulltext anges, kan endast ett sparat Resultat visas.
Följande två frågor:
FIND bil AND gul AND stor AND (motor OR roadracing) AND >=20000101
OR
bil AND blå AND stor AND (motor OR roadracing) AND >=20000101
Kan då skrivas:
FIND result(”gula bilar”) OR result(”blå bilar”)
143
I detta fall görs ingen sökning i Boolware Index, utan de sparade Resultatet används direkt och
det görs en boolesk OR mellan dessa resultat. Dessa sparade Resultat kan endast användas
för den databas och den/de tabeller det är sparat för.
Sparad Scratch
Funktionen sparad Scratch (Scratch1 - Scratch5) sparar slutresultatet sedan det senaste FINDkommandot.
Den sparade Scratch (Scratch1 - Scratch5) kan sedan, när som helst och var som helst, i
kommande sökningar för denna session.
Den sparade Scratch (Scratch1 - Scratch5) aktiveras med hjälp av underkommandot scratch
(scratch1 - scratch5).
Den främsta anledningen att använda funktionen sparad Scratch (Scratch1 - Scratch5) är då
man temporärt vill spara ett resultat, som man vill använda senare under samma söksession.
Eftersom sparad Scratch (Scratch1 - Scratch5) sparas i minnet, är det mer effektivt än ett sparat
Set, sparat Resultat eller ett sparat resultat i Sökhistoriken.
En sparad Scratch (Scratch1 - Scratch5) existerar tills en ny sparad Scratch (Scratch1 Scratch5) utförs eller då sessionen avslutas.
Denna funktion kräver litet resurser, utom vad gäller internt minne.
Nedan ges ett mycket enkelt exempel på hur sparad Scratch (Scratch1 - Scratch5) kan
användas. Först presenteras samtliga frågor, därunder kommer den sparade Scratch och
slutligen ett exempel på hur man kan använda den sparade Scratch.
Exempel:
FIND text:bil
AND text:gul
AND text:stor
AND tidskrifter:(motor OR roadracing)
Spara resultatet från senaste FIND-kommandot med hjälp av följande:
SAVE scratch1
Sök alla artiklar som är producerade under 2000 och gör AND mot det tidigare sparade
resultatet. Tag hand om detta resultat.
FIND date:20000101..20001231
AND scratch1
Sök alla artiklar som är producerade under 2003 och gör AND mot det tidigare sparade
resultatet. Tag hand om detta resultat.
FIND date:20030101..20031231
AND scratch1
Hämta data från datakällan
Eftersom Boolware endast spar information nödvändig för att bygga index, måste den aktuella
informationen hämtas från datakällan.
Boolware erbjuder två sätt att göra informationen i datakällan tillgänglig för användaren:
returnera tabellens Primärnycklar eller att returnera den begärda informationen. I det första fallet
144
kan applikationen själv med hjälp av Primärnycklarna hämta informationen från datakällan,
medan Boolware i det andra fallet hämtar informationen från datakällan, innan den slutliga
leveransen till applikationen äger rum.
Sökordsstatistik
Detta är en funktion, där användaren kan erhålla statistik för de söktermer som använts i
Boolware under ett visst tidsintervall. Det är användaren som bestämmer vilka söktermer, som
skall användas och den upplösning man vill ha, då man vill se statistiken.
Funktionalitet
Funktionen bygger på att man i en speciell tabell - bestående av minst två kolumner - sparar
de söktermer man vill ha statistik på och den upplösning man vill ha. Normalt sparar man alla
termer, som har använts vid sökningar i Boolware, men användaren väljer vilka termer, som
skall sparas i den eller de kolumner, som har reserverats för detta ändamål. Upplösningen styrs
av en tidsstämpel, vilken är primärnyckel i denna tabell. För tidsstämpeln kan man välja
upplösning genom att specificera noggrannheten. Exempelvis kan man ha en primärnyckel med
följande utseende: yyyymmddhhmmss och erhåller då en upplösning på en sekund; man kan
alltså få statistik på söktermer med en sekunds upplösning. Det går aldrig att erhålla en högre
upplösning än den man angivit i primärnyckeln; om upplösningen på primärnyckeln är i minuter,
kan man aldrig se statistik för en sekund. Det går naturligtvis att erhålla vilken lägre upplösning
man önskar: per minut, per dag, per vecka, per månad etc..
Hur användaren skall hantera tabellen för Sökordsstatistik
För användaren hanteras denna tabell på samma sätt som vilken annan tabell som helst som är
ansluten till Boolware.
Databasen, som innehåller denna tabell, skall registreras på vanligt sätt i Boolware. Tabellen
skall innehålla minst två kolumner: primärnyckel (tidsstämpel) och en eller flera kolumner, som
skall innehålla söktermerna. Tabellen skall aktiveras och kolumnerna, som skall innehålla
söktermerna, skall ha följande Indexeringsmetoder: Sträng / snabbsortering, Ord och
Sökordsstatistik.
Tidstämpeln, som utgör primärnyckeln skall vara i formen, yyyymmddhhmmss, för att det skall
gå att hantera intervall på ett bra sätt. För Boolwares del får det förekomma avskiljningstecken
mellan de olika storheterna; exempelvis yyyy-mm-dd hh:mm:ss.
Söktermerna, vilka lagras i de andra kolumnerna kan bestå av både ord och strängar.
Söktermerna avskiljes med |-tecknet (pipe). Vid framtagandet av statistik kan Boolware sedan
skilja mellan ord och strängar.
Då man valt upplösning, antag fem minuter i detta exempel, sparas alla söktermer som används
under fem minuter i en post. Var femte minut sparar man sedan denna post i datakällan, som
innehåller primärnyckeln och samtliga sparade söktermer under denna tid.
Applikationen kan - på vanligt vis - bestämma när uppdatering av denna tabell skall äga rum.
Så fort uppdateringen har utförts, är den nya posten med i sökordsstatistiken.
Hur man hämtar fram Sökordsstatistik
145
Tabellen, som innehåller sökordsstatistik, hanteras på samma sätt som en vanlig tabell i
Boolware.
Det går att titta på de olika söktermerna (ord och strängar), som har sparats med den vanliga
funktionen för presentation av index.
Det går att söka fram och titta på de poster, som innehåller en speciell sökterm.
Men framför allt finns det en ny funktion, som extraherar samtliga söktermer inom ett speciellt
tidsintervall och sortera dem i stigande eller fallande ordning med avseende på förekomst.
Ett exempel:
Det finns en tabell som kallas SökTermer, vilken innehåller två kolumner: Datum och Termer.
I Datum lagras primärnyckeln. I detta fall har man valt en upplösning på fem (5) minuter, vilket
innebär, att var femte minut skapas en post, där alla söktermer under denna tidsperiod sparas i
kolumnen Termer.
Man är nu intresserad av de 50 vanligaste söktermerna (endast ord), som använts mellan
klockan 11.00 och 13.00 den 14 juni 2005 och vill ha dem i fallande ordning; högsta
förekomsten först.
I detta exempel anges endast principen för att hämta statistik över sökordstermer. Den exakta
syntaxen finns beskriven i ”Handbok programmering”.
Följande kommando skall då användas:
index SökTermer ”’Termer’ count desc” "searchterms(2005-06-14 11:00..2005-0614 13:00)" 0 1 20 0
index
SökTermer
Termer
count
desc
searchterms()
0
1
20
0
det aktuella kommandot
den aktuella tabellen
den aktuella kolumnen
den aktuella typen frekvensordning (skall alltid vara count vid
sökordsstatistik)
fallande ordning (asc stigande ordning; utelämnat fallande ordning)
här anges intervall som vid en vanlig sökfråga (n, >[=]n, <[=]n, n..m)
zoom; 1=termer inom aktuellt resultat; 0=termer i hela tabellen
typ; 0 = skönsvärde, 1 = ord, 2 = sträng, 3 = grundformning, 4 = fonetisk etc.
antal termer som hämtas
0 = starta från början; 1 = fortsätt från senaste presenterade term
146
Kapitel 12
UNICODE
Boolwares stöd för UNICODE
Unicode är en enhetlig standard som beskriver alla världens bokstäver och tecken i ett och
samma ”dator-alfabete”. I detta ”alfabete” inkluderas såväl västerländska som arabiska,
afrikanska, asiatiska m.fl. tecken.
Äldre ”dator-alfabeten” kan endast hantera 256 olika tecken. Detta är ofta tillräckligt, men ger
upphov till ett enormt trassel för de tillämpningar som behöver kunna visa fler än 256 olika
tecken. Därav Unicode.
Boolware har nedanstående stöd för kolumndata:
•
•
•
•
•
Stöd för kolumner av datatypen ”unicode” i datakällor.
Stöd för att definiera 65.536 olika tecken med avseende på hur de ska indexeras.
Stöd för att indexera och ställa sökfrågor som innehåller 65.536 olika tecken.
Stöd för att hämta rader från datakällan, vilka kan innehålla upp till 65.536 olika tecken.
Stoppordslistor, synonymlistor, tesaurus, grundformningslistor använder nu Unicode.
Applikationer som kopplar upp sig mot Boolware 2.4 kommer av kompatibilitetsskäl fortfarande
att betraktas som ”gamla” ANSI-applikationer. Detta betyder att Unicode-stödet inte aktiveras
automatiskt; en applikation måste ta ett aktivt steg för att koppla in Unicode. Detta görs genom
att använda API:et Execute, med argumentet:
set encoding UTF-8 (eller)
set encoding UTF-8-PARTIAL
UTF-8 innebär att precis samtliga strängar som färdas mellan applikationen och Boolware
förväntas vara Unicode kodade som UTF-8.
UTF-8-PARTIAL innebär att sökfrågor och sökresultat kodas som Unicode, medan övriga
strängar så som t ex databasnamn, tabellnamn och kolumnnamn fortfarande skickas som ANSI.
Vilken av varianterna är en fråga om vad som är mest praktiskt utifrån den valda plattformen.
Viktigt: Då någon kolumn innehåller information kodat som XML (se avsnitt ”Indexering
upprepade fält” i Kapitel 5 ”Indexeringsegenskaper”), levereras denna information alltid som den
ligger lagrad, oavsett vad man angivit i set encoding.
Bakåtkompatibilitet
Det nya stödet för Unicode innebär endast förändringar i kolumner av typen Unicode. Dvs,
existerande index som ej använder underliggande Unicode behöver inte konverteras eller
omindexeras. Endast kolumner av typen Unicode behöver indexeras om.
Datatypen Unicode kallas olika i olika datakällor, men nchar och nvarchar är vanligt. Se
handboken för databashanteraren för mer information om huruvida den stöder Unicode eller ej.
Begränsningar
147
Om man vill lagra data kodat som UTF-8 i datakällan, måste det lagras i kolumner som är av
datatypen Unicode eller Binär. Annars kommer datakällan av misstag att dubbelkoda datat (som
redan är i UTF-8) en gång till i UTF-8.
Boolware har endast stöd för ANSI då det gäller metadata: databasnamn, tabellnamn,
kolumnnamn etc.
148
Kapitel 13
Boolware Cluster
Allmänt
För att öka tillgängligheten för sökning finns det möjlighet att koppla flera maskiner - noder - i ett
Boolware kluster.
I Boolware finns det två olika typer av kluster; Speglat kluster samt Sökkluster.
I ett sökkluster skickar (replikerar) Mastern endast konfigurationer och inställningar till alla
angivna söknoder i klustret. Alla söknoder i klustret måste ha tillgång till den diskenhet där
Mastern lagrar index och indexinställningar etc. Ett sökkluster består av en Masternod, en
Failovernod eller en söknod samt eventuellt ytterligare söknoder.
Nedanstående kataloger skall i ett sökkluster vara gemensamma för varje nod i klustret:
- Katalog för sysindex
- Katalog för index
- Alternativ indexkatalog
- Katalog för backup
- Katalog för KWD-filer (kan vara tom och då används katalogen för index)
- Online temp rank
- Online temp sort
- Spara sessionsdata
Nedanstående kataloger skall i ett sökkluster vara maskinspecifika för varje nod i klustret:
- Katalog för loggfiler
- Katalog för tempfiler
I ett speglat kluster skickar (replikerar) Mastern alla index, konfigurationer och inställningar till
alla angivna söknoder i klustret. Ett speglat kluster består av en Masternod och en Failovernod
samt eventuellt ytterligare söknoder.
Med hjälp av Boolware Manager skapar och hanterar man sitt kluster genom att följa
instruktionerna.
För en mer detaljerad beskrivning hänvisas till hjälpfunktionen i Boolware Manager.
149
Kapitel 14
Skräddarsydd indexering
Vad är skräddarsydd indexering
I Boolware finns många olika sätt att tala om hur man vill att ett eller flera ord skall indexeras för
att erhålla så bra sökresultat som möjlig. Exempel på generella inbyggda funktioner är: strängar,
fonetik, grundformning etc.
I vissa fall är det inte tillräckligt med dessa generella metoder, utan man behöver en
”skräddarsydd” funktion för att ta hand om orden på ett ur sökhänseende bra sätt. I Boolware
finns det en möjlighet att, genom en ”Hook” funktion, dynamiskt koppla egenskrivna funktioner så kallade ”exitar” - för att hantera generering av indextermer och söktermer.
Detta innebär, att användaren själv kan bestämma hur söktermer skall se ut och på så sätt kan
påverka relevansen vid sökning.
För att erhålla en flexibel hantering och användning av dessa ”exitar”, kan de specificeras på
kolumnnivå (lägsta sökbara nivån i Boolware) och levereras som delade programmoduler (*.dll i
Windows och *.so i Linux).
Alla utvecklingsmiljöer, som kan producera en DLL och tillåter återanropsfunktioner (callback:s)
kan användas för att framställa dessa programmoduler.
När används skräddarsydd indexering
Den skräddarsydda funktionen kommer att anropas varje gång Boolware skall extrahera ord ur
en text eller en specificerad sökfråga för en kolumn, som den har registrerats för. Detta sker vid:
1.
2.
3.
4.
Indexering, då samtliga rader i datakällan läses
Uppdatering, då endast rader som har ändrats läses från datakällan
Sökning, då den specificerade sökfrågan skall tolkas (kan väljas bort m h a ett
kommando)
Testindexering, då systemansvarige experimenterar med indexeringen
Det är endast innehållet i kolumner, vilka har markerats för skräddarsydd indexering, som
kommer att påverkas av den skräddarsydda funktionen.
Förutom de ord som Boolware skapar kommer även ord genererade av den skräddarsydda
funktionen att läggas in i index eller användas vid frågor.
Hur registreras funktion för skräddarsydd indexering
Alla skräddarsydda indexeringsfunktioner (.dll/.so) skall finnas i samma katalog som Boolware
server. Observera att Boolware måste startas om när en exit läggas till respektive tas bort ur
denna katalog.
Med hjälp av Boolware Manager kan man sedan se vilka skräddarsydda indexeringsfunktioner
som finns och välja den man vill registrera och för vilken kolumn man vill registrera den.
150
Se Kapitel 5 avsnitt ”Redigering indexeringsegenskaper för en tabell/vy” rubrik ”Skräddarsydd
indexering”.
Hur styr man sökningen för skräddarsydd indexering
Om en skräddarsydd indexeringsfunktion har registrerats för en kolumn, kommer den
automatiskt att användas vid sökning. Detta innebär, att sökningen kommer att utföras både på
de ord som Boolware genererar och de ord som den skräddarsydda indexeringsfunktion skapar.
Man kan i den skräddarsydda indexeringsfunktionen tala om vilken operator det skall vara
mellan de genererade termerna, om mer än en term skapas (om ingen operator anges, kommer
AND att gälla). Man kan dessutom tala om vilket kommando det skall vara mellan dessa termer
och termer skapade av Boolware (om inget kommando anges, kommer OR att användas).
Man kan i varje ögonblick (vid varje fråga) bestämma huruvida termer genererade av den
skräddarsydda funktionen skall vara med eller inte i sökningen. Detta görs med kommandot ”set
indexexit off” respektive ”set indexexit on”. Den aktuella inställningen gäller tills en ny inställning
görs. En kolumn kan ha fler skräddarsydda exitar och ovanstående kommando kommer att gälla
samtliga skräddarsydda exitar. För att endast inaktivera den skräddarsydda exiten LinkWords
finns ett underkommando nolinkwords().
Då en session loggar på, är alltid den skräddarsydda funktionen aktiverad, om den finns.
Att tänka på
Boolware är ett multi-trådat, trådsäkert program. Detta innebär att flera samtidiga exekveringar
kan pågå samtidigt, t ex att femtio användare ställer sökfrågor samtidigt. Därför ställs vissa krav
på hur en skräddarsydd funktion för indexering programmeras (för att vara trådsäker).
Det är mycket viktigt, att den skräddarsydda funktionen är felfri i övrigt, eftersom ett fel kan
orsaka att Boolware terminerar.
Termer som sparas i Boolware index och som används vid sökning genereras med hjälp av
olika typer av tabeller, där man ”normaliserar” söktermerna. Det kan därför vara lämpligt att
använda dessa tabeller, vilka skickas med till funktionen för skräddarsydd indexering, vid
generering av indextermer.
Det normala är, att den skräddarsydda funktionen för indexering genererar termer för såväl
indexering som sökning. Emellertid finns det möjlighet vid registreringen av den skräddarsydda
funktionen att tala om, att den endast skall generera termer vid sökning.
Softbool står bakom standard exitar (Hookfunktioner) utvecklade av Softbool själva, men kan
dock inte ta ansvar för problem orsakade av exitar (Hookfunktioner) utvecklade utanför Softbool.
I dokumentet ”Handbok programmering” finns en utförlig beskrivning, som är ämnad för de
personer som skall utveckla dynamiska funktioner för skräddarsydd indexering mot Boolware.
Standard Exitar
I Boolware finns tre standard exitar för indexering: Split, Shrink och LinkWords, vilka är en del
av Boolware.
151
Dessa exitar kan användas för valfria kolumner för att förhöja sökbarheten. Som namnen
indikerar används de i olika syften: Split ”delar” ord, medan Shrink skapar varianter av
förkortningar. Linkwords slutligen ”länkar” intilliggande ord enligt specificerade regler.
De ”kompletterande” ord, som skapas av dessa exitar, tillförs det ”normala” indexet.
Vid sökning kommer motsvarande operationer att utföras på de specificerade söktermerna,
innan sökningen utförs.
Split
Denna exit används, då man vill ”dela” på ord, som består av både bokstäver och siffror.
Delningen sker mellan varje övergång från bokstav till siffra och vice versa.
Denna exit skapar endast ”delade” termer vid ordindexering.
I Boolware Manager kan man markera, att denna exit endast skall användas vid sökning.
Exempel:
Följande ord skickas in vid indexeringen: Mercedes sl500 Volvo s70.
Följande ord lagras i aktuellt ord-index (termer genererade av exiten (Hookfunktionen) i fet stil):
MERCEDES (ord)
SL500 (ord)
SL (ord)
500 (ord)
VOLVO (ord)
S70 (ord)
S (ord)
70 (ord)
Vid sökning kommer man att få träff oavsett om man skriver:
FIND sl500
FIND sl AND 500
Shrink
Denna exit används, då man vill generera kombinationer av olika typer av förkortningar. Man
kan med hjälp av olika parametrar styra på vilket sätt man vill generera dessa ord.
Parametrar som man kan ange är: ”separeringsord” samt antal tecken i ordet före och i ordet
efter separeringsordet. Eftersom vissa företag ”förkortas” på olika sätt, kan det vara användbart
vid sökning.
För att denna exit skall skapa nya ord, måste kolumnen vara indexerad som sträng. Orden som
skapas kommer emellertid att vara både sträng och ord.
I Boolware Manager kan man dessutom markera, att denna exit endast skall användas vid
sökning.
Exempel:
Ange följande parametrar:
separeringsord: &, och, og, and, et
antal tecken i ordet före: 2
152
antal tecken i ordet efter: 3
Om man exempelvis har strängen: ”Hennes & Mauritz”, kommer följande termer att indexeras
(termer genererade av exiten i fet stil):
HENNES & MAURITZ (sträng)
HE & MAU (sträng)
HE&MAU (sträng)
HENNES (ord)
MAURITZ (ord)
HE&MAU (ord)
Oavsett vilken av följande alternativ, som används vid sökning, erhålls träff:
FIND he&mau
FIND “henn & maur”
FIND “hennes&mau”
etc.
ordsökning (görs inte om; ordsökning påverkas inte av exit)
strängsökning (görs om till ”he&mau”)
strängsökning (görs om till ”he&mau”)
LinkWords
Denna exit används, då man vill ”konkatenera” intilliggande ord. Ganska vanligt förekommande i
namn, där ”dubbelnamn” kan skrivas på tre sätt: Karl-Erik, KarlErik samt Karl Erik.
Man kan med hjälp av parametrar styra hur man vill ”konkatenera” orden. Följande parametrar
är giltiga: starttermpos, termstoconcatenate, nextstartpos, maxtermstogenerate, excludeterms
och supresscompress.
starttermpos
termstoconcatenate
nextstartpos
maxtermstogenerate
excludeterms
supresscompress
Anger vilken term man skall börja med. Vanligtvis startar man på
första termen (1), vilket också är skönsvärdet.
Anger antalet termer som skall ”konkateneras”. Vanligtvis brukar man
”konkatenera” två (2) intilliggande termer, vilket också är skönsvärdet.
Anger nästa term som skall vara första term i ”konkateneringen”.
Vanligtvis vill man välja nästa term (1) som startterm vid nästa
”konkatenering”. Detta är också skönsvärdet.
Maximala antalet genererade (”konkatenerade” termer).
”Konkateneringen” upphör, då detta värde har uppnåtts, även om det
finns fler termer. Skönsvärdet är 10.
Termer som inte skall ingå i ”konkateneringen”. Om det är
företagsnamn, som skall ”konkateneras”, brukar man här lägga in: AB,
Aktiebolag, Inc, Co, Ltd, oy, sa, srl etc.
Anger om man inte vill göra ”compress” på initialer (ord bestående av
endast ett tecken). Då man väljer ett fält med personnamn, kan det
förekomma initialer, vilka man inte vill göra ”compress” på.
Skönsvädet är 0; tillåt ”compress”.
I Boolware Manager kan man dessutom markera, att denna exit endast skall användas vid
sökning.
Exempel:
Ange följande parametrar:
starttermpos
1
termstoconcatenate
2
nextstartpos
1
maxtermstogenerate
10
excludeterms
AB, Aktiebolag, Inc, Co, Ltd, oy, sa, srl
supresscompress
0
153
Om man exempelvis har företagsnamnet: ”Agent 25 Norden AB Partner”, kommer följande
termer att indexeras (termer genererade av exiten (Hookfunktionen) i fet stil):
AGENT (ord)
25 (ord)
NORDEN (ord)
AB (ord)
PARTNER (ord)
AGENT25 (ord)
25NORDEN (ord)
NORDENPARTNER (ord)
I detta fall kan man söka på följande sätt och få träff:
FIND Agent 25 Norden
FIND Agent25 Noden
(exit används inte; orden hittas ändå)
(i detta fall används det av exiten (Hookfunktionen) genererade ordet
Agent25)
Eftersom denna exit kan - i vissa fall - generera träffar som inte är önskvärda, finns ett underkommando, nolinkwords(), vilket kan användas i sökningen för att inte skapa ”konkatenerade”
ord.
FIND nolinkwords(Agent 25 Norden) I detta fall skapas inte det ”konkatenerade” ordet
Agent25.
154
Kapitel 15
Flödesfrågor
Introduktion
Boolware har möjligheten att använda flödesfrågor. Flödesfrågor innebär, att en applikation kan,
i ett enda anrop, inkludera flera sökfält samt bifoga applikations-regler hur fälten ska behandlas
vid sökning på servern. Dessa regler kan beskriva t ex vad som ska ske vid noll-svar, eller om
en sökning ger för få eller många träffar.
Sökningarna skickas som XML till Boolware. Tre olika delar kan identifieras:
•
•
•
Frågan (query)
Flödesbeskrivningen (flow)
Svaret (response)
Strängjämförelser
För att poängsätta likheten mellan strängar: t ex ”Arvid E. Nordquist” och ”Arvid Nordkvist”
används internt en compare-funktion som anger hur lika två strängar är, uttryckt i antal fel.
Denna funktion – Compare - är speciellt anpassad för att vara feltolerant och är också åtkomlig
från programskript i flöden. Med feltolerant menas att den accepterar mindre avvikelser (t ex en
bokstav sakas/för mycket), utan att uppfatta strängarna som helt olika. Funktionen Compare är
baserad på Damerau-Levenshtein.
Normaliseringar
Före jämförelse är det av stor vikt att normalisera strängarna. T ex att göra alla bokstäver
versaler, eller ta bort accenter och andra diakritiska tecken.
I Boolware finns en färdig uppsättning funktioner för normalisering av strängar, färdiga att
använda. T ex kan fonetisering användas, så att ord blir lika om de låter lika, även om de stavas
olika. Det finns också kraftfulla sök och ersättningsfunktioner baserade på en standard som
kallas ”RegEx” inbyggt, så att man enkelt kan sätta upp egna funktioner för ”tvätt” och
normalisering av data innan jämförelse.
Viktning
Eftersom vissa fält är mer betydelsefulla som identifikationsbegrepp än andra kan man vikta
olika kolumner olika tungt. Exempelvis är personnummer och namn ett starkare
identifieringsbegrepp än postnummer eller gatuadress, eftersom människor flyttar ofta men
sällan byter namn. Viktning uttrycks som en procentsiffra, där 100 betyder ”full vikt” och 50
tolkas som ”halv vikt”. I exemplet med personnummer, namn, gatuadress och ort skulle man
kunna tänka sig viktprocenten 100, 90, 50 och 30 som exempel på lämpliga utgångsvikter.
En viktprocent på 50 gör att skillnader inte får lika stor betydelse som om viktprocenten vore
100.
155
Beskrivning av Scoring
Scoring bygger på jämförelse av sökfält och funna fält, resulterande i en betygssättning som
styrs av olika vikter och parametrar. Resultatet av Scoring är en träfflista ordnad med den mest
lika raden först, följt av den näst mest lika osv.
Elementet ”scoring” används för att centralt sammanställa regler för hur funna rader
rangordnas. Scoring omsluter en eller flera ”score”, en per sökfält. Exempel:
<scoring maxrows="10" minscore="93" >
<score var="name2" weight="90" norm="131" dbfield="Last+First" />
<score var="street2" weight="50" norm="129" dbfield="Street" />
<score var="zip2" weight="100" norm="1" dbfield="Zip" />
<score var="city" weight="40" norm="1" dbfield="City" />
</scoring>
I exemplet kan man läsa att scoring kommer att producera de tio bästa träffarna, dock lägst med
en score på 93 (100 - antal fel).
Varje score-element beskriver hur ett fält ska behandlas. Frågepostens (oftast ”masserade”) fält
(var) kommer att jämföras med databasfältet (dbfield) i den funna posten.
I exemplet kan man läsa att frågepostens ”masserade” fält name (lagrat i en egen variabel,
name2) jämförs med konkatenerade värden från fälten Last och First ur referensdatabasen.
Olika grader av normaliseringar kan användas för att jämka de två strängarna före jämförelse.
Dessa normaliseringar styrs av attributen norm=, sortwords=, noice=, namefile=, lth=,
washchars= och condignore=. Se API-handboken för detaljer.
Redigering av ett flöde
Flöden lagras som XML-dokument på servern i Boolware:s databaskatalog. Med hjälp av
Manager, i högerklicksmenyn för huvudfönstret, kan man redigera dessa filer. XML-strukturen är
sådan, att flödets semantik är entydig, utan ytterligare parsning än XML. Flödesbeskrivningen
innehåller all söklogik; de regler som ska användas för den aktuella sökningen.
För detaljerad information med exempel se Handbok Programmering Kapitel 4 Flödesfrågor
och hjälpfunktion i Boolware Manager.
156