In een bedrijf wordt er heel wat informatie verwerkt, zowel ingaande als uitgaande. Als we specifieke informatie willen hebben, moeten we die zoeken. Dat kan met zoekmachines. De meesten van ons doen dat dagelijks op internet, bijvoorbeeld met Bing of Google. Maar u kunt ook een zoekmachine in uw eigen bedrijf draaien. Google levert daar trouwens ook (dure) appliances voor. Hier kijken we echter naar los verkrijgbaar zoeksoftware waarmee u een eigen zoekserver kunt (laten) bouwen.
...

In een bedrijf wordt er heel wat informatie verwerkt, zowel ingaande als uitgaande. Als we specifieke informatie willen hebben, moeten we die zoeken. Dat kan met zoekmachines. De meesten van ons doen dat dagelijks op internet, bijvoorbeeld met Bing of Google. Maar u kunt ook een zoekmachine in uw eigen bedrijf draaien. Google levert daar trouwens ook (dure) appliances voor. Hier kijken we echter naar los verkrijgbaar zoeksoftware waarmee u een eigen zoekserver kunt (laten) bouwen. De bekendste lokale zoeksoftware is de desktopzoekmotor. Die dient om snel informatie op te zoeken op één individuele pc. Wilt u echter een zoekmotor voor het hele bedrijf dan volstaat desktopsoftware niet. Voorwaarden zijn natuurlijk dat de data-opslag gecentraliseerd is. Daar kan dan een centraal draaiende zoekserver aan gekoppeld worden. Het is daarom logisch dat centrale zoekservers vaak gecombineerd worden met complete document- en kennisbeheersystemen. Maar dan zit u wel aan één systeem vast. Voor dit artikel interesseren we ons echter voor zoekservers die kunnen samenwerken met gelijk welke netwerkopslag. Wij installeerden de zoekservers in een gevirtualiseerde Windows 2003 SP2 Enterprise Server die we 3 GiB RAM gegeven hadden voor Windows-gebaseerde zoeksoftware. Voor Linux zoeksoftware gebruikten we een gevirtualiseerde Ubuntu 10.04.2 LTS 'Lucid Lynx' server met 1 GiB RAM. Onze hypervisor had een sixcore cpu (AMD Phenom II X6 1055T) met 16 GiB en 12 TB opslagruimte ter beschikking, waarvan tijdens onze test minstens de helft van alle systeembronnen vrij was. De directoryboom met 13.000 te indexeren documenten van alle aard bevindt zich op deze 12 TB opslagruimte. We meten hoe lang de initiële indexering duurt en hoe lang het duurt om zoekresultaten te genereren als we een zoekterm opgeven. Content Advisors is een joint venture van de Cronos Group en ICMS en gespecialiseerd in software voor het beheer van kennis en informatie. Hun kennis- en informatiebeheerplatform heet TiNK, wat staat voor 'Transferring Information aNd Knowledge'. TiNK bestaat uit een aantal modules die vertrekken vanuit individuele datastukjes en deze vervolgens ontsluiten via hogere structuren. Die structuren zijn: zoeken en terugvinden; praktische bedrijfsdocumenten (archief, facturen, contracten); informatie; en als overkoepelende module helemaal bovenaan: kennis. Kennisbeheer wordt bij TiNK gedreven door vragen, het vastleggen van kennis met hergebruik en delen van die kennis. Informatiebeheer ziet de producent als het beheer van media-activa, documentbeheer en ecm (enterprise content management), midoffice (=alle bedrijfsondersteunende diensten die niet produceren [=backoffice] of met de klanten communiceren [=frontoffice]) en casebeheer, modulair schrijven en conditioneel publiceren. Praktische bedrijfsdocumenten bevat de verzameling van alles wat het bedrijf zelf genereert of (moet) bijhouden: het wettelijk vereist archief, facturatie, contractbeheer en gegevenskamer, plus een intelligent bedrijfsarchief. De basismodule voor zoeken en terugvinden heet TiNK Search en die bespreken we hier. Ze omvat het zoeken in lokale bronnen, externe bronnen en kennisbanken. Om informatie echt optimaal opzoekbaar en bruikbaar te maken, zou een bedrijf alle informatie in een gestandaardiseerd formaat en een gestandaardiseerde opmaak moeten gieten. Zoiets heet een informatiemodel of taxonomie en is een enorm, tijdrovend en dus duur werk. TiNK Search probeert hier iets aan te doen door alle beschikbare data en documenten te scannen en er alle mogelijke extra informatie over te verzamelen en dat allemaal te indexeren en in een database bij te houden. Daarbij hoort ook de ontdekking van dubbele en bijna-gelijke gegevens en de analyse en modellering van alle gevonden informatie. Die modellering hoeft u dus niet manueel te doen, maar probeert TiNK zelf te voltooien. TiNK beheerders hebben mogelijkheden om deze modellering te sturen en te parametriseren. Bij die modellering hoort ook een automatische aanmaak van metadata en van categorieën. De TiNK-methode focusseert op menselijke herkenning. Het zijn tenslotte mensen die de zoekresultaten zullen willen gebruiken en dus is het logisch dat de informatie daarnaartoe gemodelleerd wordt. Binnen TiNK wordt elk stukje informatie beschouwd als een informatieobject en verrijkt met contextuele metadata. Dit alles wordt virtueel geconsolideerd met behulp van een metavergaarbak. ICMS besteedt meer dan 30 % van zijn inkomsten aan voortdurende research hierover en werkt daarvoor samen met de K.U. Leuven. Aan de gebruikerskant leidt deze informatiemodellering tot JERI. Dat staat voor 'Just Enough Relevant Information'. Dat moet het overstelpen van gebruikers met allemaal overbodige, want irrelevante zoekresultaten voorkomen. Door intelligent te filteren kunnen gebruikers informatie opvragen waar en wanneer ze die nodig hebben en op basis van hun eigen voorkeuren. De zoekserver moet draaien op een Windows 2003 of 2008 server met de laatste Service Packs en updates, voorzien van minstens 2 GiB RAM. TiNK Server maakt daarin gebruik van IIS voor zijn webinterface. Tijdens de indexatie vind je in het computerbeheer van Windows een berichtenwachtrij waarin je kunt zien hoeveel van de gevonden bestanden nog niet verwerkt zijn. De installatie werd voor ons uitgevoerd door mensen van ICMS, zoals zij dat ook doen voor hun klanten. Ons viel op dat er tijdens die installatie CygWin-bibliotheken geïnstalleerd werden, wat erop wijst dat tenminste een deel van de zoekserver eigenlijk voor Linux of Unix ontwikkeld werd. Niettemin biedt ICMS momenteel geen Linux-versie van de zoekserver aan, al kunnen ze dat duidelijk wel zodra voldoende klanten daarom vragen. Aan de gebruikerskant kan gewerkt worden met een eenvoudige webinterface. Die bevat bovenaan een zeer vertrouwd zoekveld. Daarbij zijn helaas maar weinig echte zoekparameters mogelijk. Wens je wat ingewikkelder constructies om bepaalde zoektermen expliciet te vereisen of juist uit te sluiten, dan moet je de geavanceerde zoekfunctie gebruiken. Persoonlijk zien we voor het zoekveld aan de gebruikerskant het liefst compatibiliteit met de zoektermen van Google en indien mogelijk zelfs aangevuld met iets dat we tot dusver helaas zelden of nooit tegenkomen: reguliere expressies! Dat laatste zou zeer complexe zoekopdrachten mogelijk maken voor de mensen die zich de moeite getroosten de regex-syntaxis te leren. Wie dat niet doet, kan nog altijd werken met de standaard en geavanceerde zoekfuncties. Helaas ondersteunt ook TiNK geen regex. Omdat bij de indexering alle informatie automatisch gemodelleerd werd, biedt de zoekfunctie een resultaat met een aantal extra opties. Zo staat bij elk zoekresultaat een waardecijfer, dat aangeeft hoe betrouwbaar het is. Links daarvan zien we categorieën en metafilters. Daarmee kunnen we de zoekresultaten nog verder verfijnen. Rechts treffen we een geschiedenis van vorige zoekopdrachten aan, de mogelijkheid om experts te raadplegen, begeleid te zoeken of gebruik te maken van kennisspeurders. Dat opent de deuren voor een bedrijf om de zoekresultaten te integreren met kennisbanken en gebruik te maken van assistentie bij het zoeken van moderatoren en expertises. TiNK Search ondersteunt alle documentformaten die wij erop los lieten, waaronder de Microsoft- en OpenDocument-formaten en pdf. TiNK Search is Windows-gebaseerd en kwam dus op onze gevirtualiseerde Windows Server terecht. ICMS vereist een minimum van 2 GiB RAM, dus met onze 3 GiB toegewezen geheugen voldeden we daar ruimschoots aan. Vermits ook de opslagruimte met documenten door deze gevirtualiseerde Windows server bereikt kan worden zonder via het netwerk te moeten gaan, zou je dus denken dat dit een bijzonder hoge werksnelheid zou moeten opleveren. Niettemin had de server zeven uur nodig om al onze documenten volledig te scannen. De webinterface vonden we daarna ook al niet denderend snel. Bij de eerste start van de webinterface duurt een zoekopdracht tussen 3 en 5 seconden, maar elke volgende nieuwe zoekopdracht gaat wel sneller. Wij denken dus dat de TiNK Search Server een flink uit de kluiten gewassen Windows-server nodig heeft, nog sneller dan wat wij hadden draaien met andere woorden. TiNK Search is krachtig en de automatische modellering levert zelfs ongeparametriseerd bijzonder rake kenmerken, categorieën en metadata op. In combinatie met het informatie- en kennisbeheersysteem van ICMS zou dit een echte hoogvlieger kunnen zijn. Maar de systeemvereisten zijn wel fors als men performantie wil. Apache Lucene is een open source Java-bibliotheek voor geavanceerde en hoogperformante zoekmachine-functionaliteiten die gratis gedownload kan worden. Geavanceerde functionaliteiten omvatten: parsing, indexering, phrase detection, verwijderen van stopwoorden, detectie van sleutelwoorden, mogelijkheid om rekening te houden met de nabijheid van woorden, mogelijkheden om thesauri, phrase-lists en synoniemenlijsten in te zetten om problemen als synonymie en polysemie aan te pakken, enzovoorts. De resultaten van een indexering kunnen gebruikt worden om een documentcollectie te bekijken in een Vector Space Model, dus als een document-by-term matrix: documenten zijn vectoren, de dimensies komen overeen met de voorkomende woorden in het vocabularium van de gehele tekstcollectie. Dit kan de basis vormen van tekstminingactiviteiten. Lucene is een programmabibliotheek of api die gebruikt kan worden in andere applicaties. Het is volledig in Java geschreven zodat het op gelijk welk platform draait. Omdat verschillende gebruikers echter liever een systeemeigen versie wilden hebben omdat dat performanter is, zijn er verschillende systeemvertalingen van Lucene gemaakt. Daardoor bestaat het nu naast Java ook voor C++, voor php, Python, Ruby, .Net en noem maar op. Lucene is dus eerder een modulaire omgeving. Allerlei voor zoekmotoren relevante software of front-ends kunnen rondom Lucene toegevoegd worden. Een bekende module voor Lucene is Apache Solr. Dat is een complete zoekserver die kan graven in html- en xml-code en die api's voor JSON, Python en Ruby heeft ingebouwd. Mogelijkheden zijn onder andere markeren van zoekresultaten ('hit highlighting'), gefacetteerd en gedistributeerd zoeken, caching, replicatie, database-integratie, webbeheer en meerdere zoekinterfaces. Zodra u Lucene in de originele Java-versie downloadt, zit er wel alles bij om meteen van start te gaan. Behalve de eigenlijke zoekmotorbibliotheek zit er namelijk ook een demo bij van een indexerings- en zoekapplicatie: alleen platte tekst en aan te roepen als Java applets. Wij installeerden eerst Java op een Ubuntu Server 10.04.2 LTS 'Lucid Lynx'. Als je liever geen Java in een server wil installeren, zitten de Python- en de Perl-versies van Lucene in de standaard repository's van Ubuntu. Het installeren van de Java-omgeving stelt niets voor: gewoon het archief uitpakken en dan de juiste JAR's opnemen in het Java CLASSPATH zodat de juiste Java-classes aangeroepen kunnen worden. Hierbij kan verwezen worden naar de bijgevoegde democlasses om meteen aan de slag te gaan. Vermits Lucene een bibliotheek is, is er eigenlijk geen gebruikersinterface aanwezig behalve de demotekstuele die er standaard bij zit. We zullen die dus voor deze test gebruiken, maar wijzen er wel uitdrukkelijk op dat er heel wat meer keuze is dan dat. Met behulp van de ruim beschikbare modules van Apache en derden kunt u namelijk zelf kiezen wat voor gebruikersinterface u aan uw gebruikers ter beschikking stelt. Doorgaans zal dat een webinterface zijn. De voornaamste reden waarom Lucene eerder als een zoekbibliotheek of -api beschouwd moet worden in plaats van een volwaardige zoekmotor, is de ondersteuning van doorzoekbare documentbestanden. Die is er namelijk standaard niet: daarvoor hebt u weer afzonderlijke modules nodig. Lucene ondersteunt standaard alleen platte ascii-tekst. Documentbestanden die binair zijn, kunnen standaard niet worden doorzocht (al probeert Lucene het wel). Daarvoor dienen aparte modules die xml-, html-, pdf- en alle mogelijke Microsoft Office- en odf-documenten ondersteunen. Met de democlasses hebben we gemeten hoe snel Lucene eigenlijk is. Apache zelf geeft daar namelijk bijzonder indrukwekkende prestatiecijfers voor op. Meer dan 95 GB/uur indexeringssnelheid op moderne hardware terwijl er toch hooguit 1 MiB RAM gebruikt wordt, bijvoorbeeld. Dat is dan wel zonder de Java-runtime die ook in het geheugen moet. Onze testboom werd volledig geïndexeerd in 28 minuten. Elke zoekopdracht die we daarna probeerden kwam terug met een pagina zoekresultaten in minder dan één seconde. Inderdaad bijzonder snel. De grote voordelen van Apache Lucene is dat het razendsnel, open source en gratis is. Het is echter geen klant-en-klare zoekmachine en er horen nog heel wat modules rond om het echt bruikbaar te maken voor een bedrijf. Maar juist omdat het modulair is, krijg u wel het maximum aan keuzevrijheid. Xapian is een open source zoekmotorbibliotheek met een GPL-licentie. De bibliotheek is bruikbaar vanuit Perl, Python, php, Java, Tcl, C# en Ruby. Meer applicatietalen zijn nog op komst. De bedoeling van Xapian lijkt dus heel erg op die van Apache Lucene, alleen is Xapian geschreven in C++ (zoals de rest van Linux) en niet in Java. Daardoor zou het minder systeembronnen nodig moeten hebben dan Lucene en omdat er geen extra vertaalstap nodig is, werkt het ook veel sneller. Net als Lucene is Xapian ontworpen voor ontwikkelaars, niet voor eindgebruikers. Het is dus geen zoekmotor op zich, maar een bibliotheek waarmee u vrij makkelijk een zoekapplicatie kunt (laten) bouwen en zoekfuncties met geavanceerde indexering en zoekfaciliteiten kunt toevoegen aan uw eigen applicaties en webtoepassingen. Xapian ondersteunt het waarschijnlijkheidsinformatiezoekmodel ('probalistic information retrieval') en biedt een rijke verzameling booleaanse operatoren. Het Xapian-project heeft een zusterproject genaamd Omega voor wie op zoek is naar een zoekmotor voor een website. Omega is dus een applicatie ontworpen voor gebruik binnen een website die gebruik maakt van de Xapian-bibliotheek. Wij gaan het echter houden bij de gebruikersdesktop en kijken verderop naar Recoll, dat Xapian gebruikt voor desktopzoekfuncties. Xapian gebruikt standaard eigenlijk geen server. De bedoeling was een en ander zo compact mogelijk te houden en gebruik te maken van zo weinig mogelijk systeembronnen. De daemon die normaal aan de serverkant draait, bestaat hier uit een indexeerprogramma. Dat draait niet continu, maar kunt u op stille momenten laten draaien met behulp van cron of een andere scheduler. De geïndexeerde informatie wordt in een database weggeschreven. Die database maakt echter geen deel uit van Xapian, want dat is alleen een functiebibliotheek. De zoekapplicatie moet dus zijn eigen database bijhouden. Onder Linux is er geen installatiewerk vermits de Xapian-bibliotheek al in heel wat Linux'en en Unix'en standaard geïnstalleerd meegeleverd wordt. We kozen Recoll als voorbeeld van een zoekapplicatie die gebruik maakt van Xapian. Recoll is normaal bedoeld als desktop zoek-GUI, maar bestaat zelf wel uit verschillende modules, waaronder een indexeerder die een indexdatabase bijhoudt en de eigenlijke GUI waarmee de gebruiker zijn zoektermen kan opgeven en de resultaten bekijken. Recoll ondersteunt het gebruik van een externe indexdatabase, dus is het niet zo moeilijk om het indexeerprogrammaatje en de indexdatabase op de bestanden- of documentenserver te zetten. Zo kan elke desktop-Recoll dan gebruik maken van die centrale indexdatabase en dus ook de documenten op de server doorzoeken. Dit is uiteraard een erg eenvoudige opstelling: er is geen voorziening voor autorisaties en kijkrechten. Alles waar Recoll aankan, kan elke gebruiker ook bekijken. Recoll heeft een erg eenvoudige gebruikersinterface. Nadat de indexen verzameld zijn, kunt u zoekopdrachten in het zoekveld bovenaan intikken. Standaard staat dat ingesteld om een beetje zoals Google te werken, waarbij meerdere termen via 'EN' verwerkt worden. Maar met een klein afrolmenuutje kunt u een andere query-methode kiezen: een 'OF'-verwerking, alleen bestandsnamen zoeken, of gebruik maken van een query-taal. Onder het zoekveld staan aanvinkbare documenttypes: alles, media, berichten, presentaties, spreadsheets, tekst en andere. Recoll en Xapian ondersteunen ook het zoeken in pdf's, Microsoft Office- en odf-documenten. Dat vereist wel een 'helper' voor ieder formaat dat u wil kunnen doorzoeken. Die helpers zijn open source hulpprogramma's voor Linux waarmee allerlei documentformaten snel omgezet kunnen worden naar platte tekst. Veel van die helpers zitten al standaard in Linux, maar Recoll heeft een menufunctie waarmee u kunt zien welke helpers er ontbreken. Die kunt u dan toevoegen. Recoll houdt een documentgeschiedenis bij, ondersteunt meerdere talen en heeft een paar meer geavanceerde hulpmiddelen zoals een term explorer en het sorteren van parameters, of een geavanceerde zoekdialoog. Recoll zit standaard in de softwarerepository's van Ubuntu en Debian en waarschijnlijk in nog heel wat andere Linux-distributies. De eerste stap is altijd het indexeren van onze directoryboom met documenten. Daarbij verraste ons de ongemeen grote werksnelheid van Recoll en Xapian: de hele indexering duurde nog geen vijf minuten! Ook het intikken van een zoekterm leidde erg snel tot resultaten: binnen de seconde. De combinatie van Xapian en Recoll blijkt het snelst van allemaal en vermits de Xapian-bibliotheken in de meeste Linux'en standaard aanwezig zijn, hebt u in feite al zeer krachtige zoekfunctionaliteit beschikbaar op zowat alle Linux- en Unix-systemen. Er moet dus alleen nog een applicatie toegevoegd worden zodat een gebruiker ermee kan zoeken. Voor Linux is dat geen probleem met Recoll, maar voor Windows hebben we er niet meteen een gevonden. Als u de meest rijke functionaliteit wenst, dan krijgt u die uiteraard van een commercieel pakket zoals TiNK Search. Dat product biedt echt wel waar voor zijn geld. Maar voor een kmo is het waarschijnlijk te zwaar en te duur. In het open source aanbod zijn er ook meer dan genoeg zoekmotoren te vinden. Apache levert met Lucene een op Java gebaseerde zeer krachtige zoekmotor, waarvoor dan zoekapplicaties ontworpen moeten worden. Xapian en Recoll verrasten ons met een gelijkaardige functionalitet als Lucene en met de hoogste indexeer- en zoeksnelheid van allemaal. Wat ons betreft verdient die dus zeker uw aandacht. Johan Zwiekhorst