2005-12-28

En waneer je nu eens geen text retrieval wil doen ?

Ik heb vorige week de Gewasbeschermingskennisbank overgebracht naar Oracle. Het probleem dat daarbij boven water kwam, is dat we in oracle niet zo eenvoudig text indexen en volledig veld indexen door elkaar kunnen gaan gebruiken. Op dit moment ondersteunen we per tabel in wqoracle 4 indexen. Op recordnummer, op datum van invoer, op datum van wijziging en de context-index voor text retrieval op de inhoud van de XML elementen.
Bij de gewasbeschermingskennisbank moet echter het onderscheid kunnen worden gemaakt tussen middelen die zijn toegestaan in "siergewassen onder glas" en middelen toegestaan in "plantgoed voor siergewassen onder glas". Deze laatsten worden ook gevonden als je zoekt naar "siergewassen onder glas".
De wat onbeholpen work-around die ik er nu voor gebruik is om naast het normale xml element een tweede xml element te definiëren met dezelfde inhoud maar ontdaan van woordscheidingstekens, zoals spaties en die te gebruiken voor de zoekactie.
Het werkt, maar ik denk dat we de mogelijkheid moeten inbouwen om 'normale indexen' te kunnen gebruiken (normaal in de database wereld, anders dan die wij in onze bibliotheekomgeving doorgaans gebruiken) en ergens in een zoekcommando moeten kunnen geven dat we voor een bepaald veld de andere dan de contextindex moeten gebruiken

2005-12-15

WebQuery 5.34

Inderdaad, alweer een nieuwe versie van WebQuery.

Deze versie is vandaag in gebruik genomen vanwege de correctie van een fout in de afhandeling van de multipart-variant van de formulierafhandeling. Deze fout trad alleen op in formulieren waarmee een bestand werd overgebracht naar de server. Onder bepaalde omstandigheden werd dan een deel van het formulier na de browse-knop niet of niet goed verwerkt. Dat probleem is in deze versie opgelost.

Er is één andere wijziging: wq_sfx wordt nu standaard meegegeven als xslt-parameter ($wq_sfx). Doel hiervan is om uniformering van de "next"
link en evt. andere links te vereenvoudigen. De xslt "ora-default.xslt", bedoeld als vervanging en uitbreiding van ora_errors.xslt, maakt hier al gebruik van (let op het streepje: dat is een minteken, geen underscore).
De nieuwe uitleen gebruikt deze xslt in de testomgeving.

2005-12-09

WebQuery 5.33 en wqoracle 1.3 actief

Zoals je aan het onderwerp al zag, er zijn weer nieuwe versies van WebQuery en wqoracle in gebruik genomen, en daarbij hoort een lijstje met de wijzigingen ten opzichte van de vorige versie:

WebQuery 5.33 (in combinatie met wqoracle; ik test nieuwe features als deze niet meer met wqstub/mindbsrv, dus gebruik het daarmee niet): wq_max, waarmee in een zoekvraag het te tonen aantal records per resultaatpagina kan worden opgegeven, kent en nieuw gebruik. Als aan wq_max de waarde 0 wordt meegegeven, wordt alleen het aantal hits getoond en geen resultaat set. In de oude versie had wq_max=0 het zelfde effect als het weglaten van wq_max (dan wordt de default-waarde van hit-limit uit de cgiparm parameter file gebruikt). Hiermee vervalt tevens het keyword "hits" (achter de servicenaam in de url), dat vrijwel nooit gebruikt is en in combinatie met wqoracle niet werkte.
Verder worden nu om alle zoektermen (behalve in wq_qry) haakjes gezet, om te voorkomen dat onbedoeld op alle velden gezocht wordt.

Ik wil er nogmaals op wijzen dat oracle context indexen (en dus ook het zoekmechanisme in wqoracle) een groot aantal niet-alfanumerieke tekens als operators interpreteert. Een paar voorbeelden (de aanhalingstekens zijn een markering van de zoekterm, tik die dus niet in als je het effect wil zien): zoek je op "plant-hg", dan vind je alle records, waarin het betreffende veld de kreet "plant" staat, NIET gevolgd door "hg". Zet accolades om de zoekterm, of een backslash voor het minteken, als je dat wilt voorkomen. "{plant-hg}" en "plant\-hg" geven het gewenste resultaat. "A&F" vindt alle records waarin in het betreffende veld zowel een A als een F staan (vergelijkbaar met het zoeken op "A F" in minisis). Ook hier helpen accolades en backslash om de kreet "A&F" te vinden. "A F" heeft in dit geval het zelfde effect, omdat je dan zoekt naar een losse "A" gevolgd door een losse "F", en de index de "&" in het record afwijkend behandelt. Vermijd ook woorden als "AND" en "OR" in een zoekterm, tenzij je die bewust als operator gebruiken wilt. Gebruik haakjes en accolades altijd in paren, en realiseer je dat "plant soil" (39 hits in titel) niet meer het zelfde resultaat geeft als "soil plant" (124 hits) of "soil & plant" (1536 hits). Kortom, "elluk foordeel hep se nadeel".

wqoracle 1.3: wq_max=0 (zie hierboven). Daarnaast is een interne wijziging doorgevoerd op verzoek van oracle, als workaround voor een van de oracle-bugs die tot problemen bij het zoeken leidde. Deze wijziging komt er op neer dat de xml-velden nu in porties van 4000 bytes worden opgehaald uit de database, in plaats van zoveel mogelijk in één keer. Tenslotte is de maximale veldlengte van 132KB naar 1MB uitgebreid omdat isn 51066 in titelplus te groot was (ca 250KB).

Age Jan

2005-12-07

Uploaden van documenten in een database

Al enige tijd bestaat de mogelijkheid om bestanden toe te voegen aan records in een database. Op dit moment gebeurt dat bij Wageningen UR publicaties, maar we gaan dat nu bijvoorbeeld ook doen bij de documentatiedatabase van COGEM (COmmissie GEnetische Modificatie)en bij de leermiddelendatabase in het kader van LORENET. Deze laatste 2 databases zijn echter Oracle databases en dat heeft wat consequenties. Oorspronkelijk draaide de Minisis db server en WebQuery allebei op de HP3000. Het uploaden van een bestand was een gecoordineerde actie tussen die twee processen, op dezelfde computer op basis van afspraken over de plaats van die bestanden. Tegenwoordig draait WebQuery op de Web server en WQoracle op de database server. WebQuery slaat de bestanden niet op in de database, maar gewoon in directories op de web server. De bestandsnaam wordt vervolgens doorgegeven aan WQoracle waarna het in de database wordt opgeslagen. Bij invoer van een record is er een bestandsnaam gegenereerd die weliswaar de naam van de tabel bevat, maar verder betekenisloos is. Wordt het bestand toegevoegd aan een bestaand record, dan wordt het ISN meegenomen in de bestandsnaam. Zo is een bestand altijd terug te herleiden tot een uniek database record. Wanneer er nog geen record is, kan dat natuurlijk niet. Wanneer de interface het enigszins toestaat, probeer dan in het invoerscherm het uploaden niet aan te bieden, maar doe dat pas nadat het record is ingevoerd.
Het verwijderen van een file is een ander probleem. WebQuery en WQoracle zijn gescheiden processen, niet gekoppeld door een transactie logging mechanisme. Wanneer je een nieuwe file toevoegt in plaats van de vorige, of je wil er een verwijderen, dan kun je het record aanpassen en eventueel een nieuwe file uploaden, maar er is geen mechanisme om een oude te verwijderen. Deze blijven dan 'los' in de directory achter en dat geeft vervuiling. WQoracle zou WebQuery kunnen 'informeren' over een te verwijderen file, maar als het verwijderen mislukt dan hebben we geen mechanisme om de hele boel terug te draaien. Vervuiling blijft dan dus mogelijk.
We zouden er ook voor kunnen zorgen dat de filename nooit uit het XML kan worden verwijderd, maar dat alleen een delete attribuut kan worden aangezet, waar je dan in het stylesheet rekening moet houden (dit maakt ook een UNDELETE mogelijk) We zouden dan periodiek in batch kunnen opschonen. We denken erover na. Heb je een brilant idee, laat horen !!

WebQuery op het web

Bij wat zoekacties naar deze blog op Google kwam ik twee leuke dingen tegen. Allereerst een WebQuery handleiding van mijn hand in het Spaans. Nou ja, wel een oude handleiding en een soort van samenvatting. Grappig dat iemand dat heeft gedaan, Met name omdat we alleen een Nederlandse, Engelse en Franse versie hebben gemaakt. Er is nooit Spaanse interesse voor WebQuery geweest. Er is overigens ook een geregistreerd product met dezelfde naam. Iets om op te letten.
Een tweede ding is een alternatieve manier om vanuit huis 'off campus access' tot de desktop library te krijgen. Zoek in Google op 'pauzeren' en klik op het derde resultaat. Klik op de login knop en vervolg ...... niet iets om in de helpteksten op te nemen :)