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