37. Explorator

37.1. Abstract

Explorator is een toolcat-applicatie die indexen kan aanmaken en doorzoeken. Daartoe dienen index-specifieke modules ingeplugd te worden. Een PyLucene, XML en Zebra (z39.50, OAI) module is beschikbaar.

De toolcat-applicatie kan standalone werken, maar kan ook gestuurd worden door meta-informatie vanuit de Brocade databank.

37.2. Delphi waarden

  • explorator-daemon-url

    staat default op http://127.0.0.1:11111/explorator

  • explorator-database-dir

    de rootdirectory voor alle indexen (index), facetten (taxo) en autosuggest (suggest). Deze wordt verder opgesplitst in

r4_explorator_database_dir/*indextype*/index/*indexnaam*
r4_explorator_database_dir/*indextype*/taxo/*indexnaam*
r4_explorator_database_dir/*indextype*/suggest/*indexnaam*
  • explorator-process-dir

    werkdirectory voor de indextypes

r4_explorator_process_dir/*indextype*
  • explorator-update-dir

    werkdirectory voor de update thread, indien de queue met bestanden werkt in plaats van globals

  • explorator-web-dir

    webdirectory voor phtml- en js-scripts

37.3. Lucene

De hoofdmoot van de explorator software, en van deze documentatie, is gericht op Lucene indexering via PyLucene, de Python extensie voor Java Lucene. De zeer uitgebreide, versie-gebaseerde documentatie (API Javadocs) is te vinden via de Lucene homepage.

Een eenvoudig overzichtsvoorbeeld vind je in de Lucene documentatie (pas eventueel het versienummer in de URL aan).

Enkele aandachtspunten bij PyLucene:

  • het Lupyne project kan handig zijn voor voorbeelden en werkwijzen

  • er is een mailing list waar je best op inschrijft omdat nieuwe versies hierop aangekondigd worden. Voordat een versie kan uitgebracht worden zijn een welbepaald aantal stemmen nodig van gebruikers en admins. Een stem uitbrengen doe je door een reply te sturen op de aankondiging, met +1 in de body. Vermits er niet veel PyLucene gebruikers zijn en ook de admins niet altijd snel reageren, kan de PyLucene versie wel eens wat achterlopen op de Lucene versie.

  • als er een nieuwe versie is, overloop je de API changes in de changelog (https://lucene.apache.org/core/*n_n_n*/changes/Changes.html), te vinden via de Release Docs op de hoofdpagina van Lucene. Wijzigingen aan functies die in explorator gebruikt worden, dienen vanzelfsprekend aangepast te worden.

  • signaleer aan Luc dat er een nieuwe PyLucene versie is. Hij doet het nodige voor compilatie en installatie. Er is ook een truc om te switchen tussen de vorige en de nieuwe versie, maar natuurlijk moet de explorator software aangepast zijn aan de versie die je verkiest.

Voorbeeld

8.1.1:

/library/python3.7/bin/easy_install /library/python3.7/lib/python3.7/site-packages/lucene-8.1.1-py3.7-linux-x86_64.egg

8.6.1:

/library/python3.7/bin/easy_install /library/python3.7/lib/python3.7/site-packages/lucene-8.6.1-py3.7-linux-x86_64.egg

  • PyLucene wordt geactiveerd via import van /core/python/anetlucene.py.

from anet.core.anetlucene import lucene
  • Soms is het noodzakelijk om bij een nieuwe PyLucene versie alle indexen te herindexeren. Dit is sowieso nodig als de versie-sprong groter dan 1 is.

37.3.1. Indexeren

37.3.1.1. Meta-informatie

37.3.1.1.1. Indexers

Een indexer (mt:expindexer) wordt ingevuld via de Brocade interface en definieert de parameters voor een indexeerproces, dat wordt opgestart via het toolcat-commando explorator index.

37.3.1.1.1.1. Algemene parameters

Een indexer werkt met een feeder die de te indexeren items aanlevert. Feeders kunnen 2 streamtypes behandelen:

  • Streamtype

    • Record
      afzonderlijke records worden aangeboden, hetzij via txt- of xml-files (gestructureerd conform de explorator-dtd), hetzij via een M-generator, hetzij via een plugin. In de explorator-toolcatomgeving worden dan respectievelijk txtfeeder.py, xmlfeeder.py, mfeeder.py of pluginfeeder.py aangesproken, die de records afleveren aan luceneindexer.py voor de aanmaak van Lucene indexen of xmlindexer.py voor de aanmaak van xml indexen. Dit laatste wordt in de praktijk niet gebruikt.
      Voor details, zie de beschrijving van toolcatcommando explorator index.
    • File
      volledige files worden aangeboden aan een externe software, bvb. zebra, zonder dat de exploratorsoftware ze leest en/of parset. Wordt enkel gebruikt voor de aanmaak van zebra indexen (Z39.50).

Note

Voor Lucene indexering is het streamtype altijd record en dienen dus de parameters onder rubriek Recordfeeder ingevuld te worden.

  • Recordfeeder

    • Datagenerator

      Een datagenerator is ofwel:

      • een path naar een te indexeren file, of een directory met te indexeren files (xml of txt). XML-files moeten gestructureerd zijn volgens de explorator-dtd

      • een explorator-plugin van de vorm anet.exploratorplugin.xxx. Er moet dan een qtech-bestand /explorator/plugin/xxx.py bestaan dat via een functie record de nodige gegevens aanlevert. Zie bvb. /explorator/plugin/doc.py.

      • een identifier van een gecombineerde indexer

      • een M-executable die per record een MJSON structuur oplevert.

    • Tags

      Worden automatisch aangevuld met de prefixen die in de index gekend zijn.

    • Fieldtypes
      Sequentie van fieldtag:numeric|long|date|string gescheiden door ;.
      Het default fieldtype is string. Andere mogelijkheden zijn numeric, long en date. Op deze types gebeurt mogelijk een bewerking voor de indexering. Zo wordt voor een Lucene index een numerisch veld links aangevuld met nullen om range queries te kunnen uitvoeren.

      Warning

      In principe moeten dezelfde fieldtypes ingevuld worden bij searchers die de index gebruiken die door deze indexer aangemaakt worden.

    • Tag met unieke identifier

      Elk record heeft een unieke identificatie nodig. Hier kan aangegeven worden welke fieldname de unieke identificator bevat. explorator overhandigt aan de indexeermodule altijd een record-object met een veld uniqueid (dat leeg kan zijn).

    • Superindex
      Hier kan de naam ingevuld worden van een veld waarin andere velden moeten samengevoegd worden, eventueel gevolgd door : en de namen van die in te voegen velden, gescheiden door +.
      Indien geen namen ingevuld, worden alle velden ingevoegd. In Lucene wordt deze index gebruikt indien een zoekactie zonder veldspecificatie wordt opgestart. Dit kan echter problemen geven als verschillende velden bij elkaar gevoegd worden die door verschillende analyzers worden behandeld. Een betere oplossing is dan de optie transformatie zoektermen zonder veldspecificatie op het niveau van de searcher.
    • Indexeren met browsing faciliteit

      Experimenteel. Aanvinken vergt heropbouw van de index.

    • Facetten

      Opsomming van te indexeren facetten. De datagenerator moet de facetten berekenen.

      • als een facet een eigen datacollector heeft kan gewerkt worden met m4_getExploratorRecordFacet. Zie bvb. %Ixqcat^bacsorix (/acquisitie/application).
        Eigenlijk is dit enkel nodig als de generator het M-indexreservoir overloopt omdat in de M-index een zoekwaarde staat, die niet per se gelijk is aan de gewenste waarde voor het facet.
      • een facet wordt meestal op dezelfde manier berekend en aangeboden als een ander veld. De waarde van een facetveld wordt altijd as is in de facetindex weggeschreven, dus niet getokenized, onafhankelijk van wat de datagenerator in subscript tokenize specificeert. In het geval het facetveld ook via een reguliere zoekactie opzoekbaar moet zijn, dus via een prefix:pattern zoekpatroon, dan is het tokenize subscript van de datagenerator wel van belang en moet het index subscript op 1 staan, wat default zo is. In het andere geval kan de datagenerator subscript index=0 zetten zodat het facetveld niet in de reguliere index wordt opgenomen.

      • als de generator het M-indexreservoir overloopt en bepaalde indextags moeten als facet dienen, dan kunnen de nodige gegevens meegegeven worden aan m4_initExploratorRecordRsv. Zie bvb. %IxLuce^bcasix (/catalografie/application).

    • Lucene index

      Aanvinken om effectief een Lucene index aan te maken

  • Nachtelijk proces

    Het procman-proces standardexploratornight overloopt alle bestaande indexers en voert uit wat hier aangevinkt staat: Geen indexering, Update of Volledige indexering. Dit is dus een alternatief voor het maken van een procman-proces voor elke indexer afzonderlijk.

  • Laatst gelopen op

    Dit wordt automatisch ingevuld door de laatste explorator index van deze indexer en wordt gebruikt als referentiepunt voor explorator index ... update=yes.

37.3.1.1.1.2. Lucene-specifieke parameters
  • Naam index

    De directory waar de indexen terechtkomen. Dit is altijd een subdirectory van

    r4_explorator_database_dir/lucene/index
    

    Warning

    In principe kunnen verschillende indexers naar dezelfde indexlocatie schrijven. Denk er dan wel aan om aan de indexer(s) die niet als eerste opgestart worden, de modifier update mee te geven anders wordt een geheel nieuwe index aangemaakt!

  • Analyzer

    Een analyzer maakt via een tokenizer een tokenstream van een te indexeren stream. Afhankelijk van de analyzer kan dit inhouden: omzetting naar lowercase, whitespace splitsing enz.
    In dit veld kan de default te gebruiken analyzer ingevuld worden en/of een reeks van veldspecifieke analyzers. In dit laatste geval moet de naam van de analyzer voorafgegaan worden door veldnaam:, dus bvb. issn:WhitespaceAnalyzer.
    Als niets ingevuld wordt, wordt SimpleAnalyzer gebruikt voor alle velden.
    WhitespaceAnalyzer en KeywordAnalyzer kunnen eventueel aangevuld worden met |lowercase omdat deze analyzers de input niet omzetten naar lowercase. Overigens is deze constructie hetzelfde als rechtstreeks WhitespaceAnalyzerLowercase invullen of zelfs BrocadeAnalyzer(base=whitespace) (zet automatisch om naar lowercase).

    Een overzicht van analyzers en tokenizers is te vinden via de Release Docs van de gewenste Lucene versie.
    Een gedegen uitleg van analyzers en tokenizers vind je hier (pas eventueel de versienummer in de url aan).

    De meest gebruikte analyzers zijn
    • WhitespaceAnalyzer: splitst op whitespace

    • KeywordAnalyzer: doet niets, m.a.w. indexeert de aangeboden string as is. Dit is dus eigenlijk hetzelfde als de string aanbieden met tokenize=0

    • BrocadeAnalyzer: een zelf ontwikkelde analyzer (Python, dus trager dan core Lucene analyzers) die met volgende argumenten kan aangesproken worden:

      • base: standard (default) | simple | whitespace | brocadestring | brocadeauthor

        • standard: gebruik de StandardTokenizer

        • simple: gebruik de LetterTokenizer

        • whitespace: gebruik de WhitespaceTokenizer

        • brocadestring: maakt gebruik van /core/python3/indextools.py om tokens zoals in M-indexen voor niet-persoonsnamen aan te maken

        • brocadeauthor: maakt gebruik van /core/python3/indextools.py om tokens zoals in M-indexen voor persoonsnamen aan te maken

      • stop: yes (True) | stopwoordenset | no (False) (default)

        • yes = standaard Brocade stopwoordenset wordt gebruikt

        • no = geen stopwoorden

        Warning

        Indien voor het default zoekveld van de searcher een combinatie van velden gebruikt wordt moeten voor deze velden analyzers gebruikt worden die de stopwoorden op dezelfde manier behandelen.

      • asciifold: yes (default indien niet `brocadestring` of `brocadeauthor`) | no

        Uit de Lucene documentatie:

        This class converts alphabetic, numeric, and symbolic Unicode characters which are not in the first 127 ASCII characters (the "Basic Latin" Unicode block) into their ASCII equivalents, if one exists. Characters from the following Unicode blocks are converted; however, only those characters with reasonable ASCII alternatives are converted: C1 Controls and Latin-1 Supplement, Latin Extended-A, Latin Extended-B, Latin Extended Additional, Latin Extended-C, Latin Extended-D, IPA Extensions, Phonetic Extensions, Phonetic Extensions Supplement, General Punctuation, Superscripts and Subscripts, Enclosed Alphanumerics, Dingbats, Supplemental Punctuation, Alphabetic Presentation Forms, Halfwidth and Fullwidth Forms.
      • stem: yes | no (default)

        Als stemmer wordt SnowballFilter(Porterstemmer) gebruikt. Dit is een vrij agressieve stemmer (zo wordt international omgevormd naar intern wat dus mogelijk veel ongewenste zoekresultaten geeft), en is vnl. gericht op het Engels.

      • ngram en browse: experimenteel

  • Ranking context

    een mt:rankcontext identifier waarop de datagenerator van deze indexer zich moet baseren om het sortrank veld te berekenen.

  • Autosuggest-analyzer

    de analyzers die moeten gebruikt worden voor opbouw en raadpleging van de autosuggest-index, gescheiden door ;. Indien slechts 1 analyzer gegeven wordt, wordt deze voor beide acties gebruikt.

  • Autosuggest-velden
    de namen van de velden waarvan de inhoud in de autosuggest-index moet opgenomen worden, gescheiden door ;. Een veld enkel in de autosuggest-index opnemen en niet in de reguliere index, kan aangeduid worden door de veldnaam aan te vullen met :0.

    Note

    Een voorbeeld van de autosuggest-functie is terug te vinden in /menu/exploratorsuggest. Hiervoor dient de indexer user en/of irua uitgevoerd te worden met de autosuggest-parameters ingevuld.

  • Mergefactor

    bepaalt hoeveel documenten in het geheugen behandeld worden alvorens naar een segment op disk te schrijven, evenals het aantal afzonderlijke segmenten dat kan bestaan vooraleer ze samengevoegd worden tot 1 segment. Default is 10. Kan (beperkte) invloed hebben op snelheid van indexeren omdat merging van verschillende files zo lang mogelijk uitgesteld wordt. Opgelet echter, een grote waarde betekent veel files op een bepaald moment, dus mogelijkheid tot error Too many open files. De default waarde voldoet meestal.

  • Maxbuffereddocs

    het aantal documenten dat in RAM opgebouwd wordt alvorens geflusht te worden naar een segment. Heeft grootste invloed op indexing performance, maar vanzelfsprekend, hoe groter, hoe meer RAM vereist. De default waarde voldoet meestal.

  • Maxmergedocs

    het maximum aantal documenten (records) in een segment. Default is het het maximum getal dat een integer kan aannemen. Moet zelden aangepast worden.

  • Maxfieldlength

    het maximum aantal termen voor 1 veld. Default is 10000.

  • Rambuffersizemb

    de hoeveelheid RAM in MB die gebruikt wordt voor buffering van toegevoegde documenten voordat ze geflusht worden naar de schijf. Explorator gebruikt een default van 48 MB.

  • Highlighting

    moet aangevinkt worden indien de highlighting functie in de searcher moet kunnen gebruikt worden. Bij indexering worden dan extra gegevens in de index bewaard (positions, offsets). Tevens moet de inhoud van de velden in de index opgeslagen worden (store=1 moet meegegeven worden in de datagenerator).

  • Uitvoeren na indexaanmaak

    hier kan een M-executable ingevuld worden die uitgevoerd wordt nadat een nieuw aangemaakte index in gebruik wordt genomen, d.i. onmiddellijk op het einde van de indexering indien de explorator daemon niet draait, of anders bij herstart van die daemon.

  • Norms

    voor welke velden (gescheiden door ;) moet een normberekening weggeschreven worden op moment van indexeren. Norm is een maat voor de lengte van een veld, of, hoe korter een veld hoe relevanter in het zoekresultaat. Voor velden waarvoor geen norm wordt weggeschreven, telt de lengte niet mee in de relevantieberekening van het document. Is voor ons niet echt van belang omdat we zelden met de Lucene relevantie werken.

  • Ranking

    Probeersel dat voor Brocade vervangen is door ranking mechanismen mt:rankcontext en mt:rankdomain. Zie ook parameter Ranking context. Hier kan een mt:expranking identifier (of leeg voor de default relevance berekening) ingevuld worden. In de meta-informatie van de ranking kunnen een aantal parameters getweakt worden.

37.3.1.1.2. Gecombineerde indexers

In een gecombineerde indexer kunnen indexprefixen gedefinieerd worden die moeten geoogst worden vanuit andere indexers. Daarvoor wordt een indexeerproces opgestart via het toolcat-commando explorator index, waarbij in de aangesproken indexer een identifier van een gecombineerde indexer ingevuld is als datagenerator.

Een gecombineerde indexer (mt:expcmbindexer) wordt ingevuld via de Brocade interface .

37.3.1.1.2.1. Parameters
Volgorde indexers

De volgorde waarin de te gebruiken indexers moeten overlopen worden. Indexers die niet in deze lijst staan worden in alfabetische volgorde uitgevoerd na de wel ingevulde indexers.

Transformatie indexprefixen

De gecombineerde indexer stelt nieuwe indexprefixen samen voor de gegevens die de verschillende samenstellende indexers aanleveren. Ook de oorspronkelijke indexprefixen kunnen behouden worden, mits aangevuld met een onderscheidende tag. In dit invulveld kunnen patronen van LOI's opgegeven worden (altijd 3-ledig!), gevolgd door tags die aan de oorspronkelijke prefixen moeten toegevoegd worden.

Voorbeeld

  • tg:lhbr:...:br,lh -> alle prefixen van tg:lhbr LOI's worden in de index geplaatst onder br*prefix* en lh*prefix*

Van LOI's die aan geen enkel patroon voldoen, worden de oorspronkelijke prefixen niet behouden.

Prefixsamenstelling: Prefix

De naam van de indexingang

Prefixsamenstelling: Combinaties

expindexer:prefix combinaties die in de gecombineerde indexer onder het opgegeven prefix moeten weggeschreven worden.

Prefixsamenstelling: Transformaties

Opgehaalde waarden kunnen omgezet worden naar een te indexeren waarde. Volgende regels zijn daarvoor mogelijk:

  • indexer:waarde::nieuwe waarde

  • indexer:waarde:x:M-executable

  • indexer:*:x:M-executable

indexer is de mt:expindexer identifier van de aanleverende explorator indexer. De M-executable krijgt RDvalue ter beschikking en moet een gewijzigde RDvalue teruggeven. De x is nodig om aan te geven dat het om een berekende nieuwe waarde gaat.

Voorbeeld

  • prefix: creator

  • combinaties:
    • subscription:au

    • order:au

Dit betekent dat de datagenerators van indexers subscription en order opgestart worden en de daar gegenereerde prefix au getransponeerd wordt naar creator. Het resultaat is dus een index met zowel q-loi's als s-loi's, maar allemaal met dezelfde prefixen of indexingangen.

37.3.1.1.3. Facetten

Voor het indexeringsproces moeten de gewenste facetten in de meta-informatie van de indexer opgesomd worden en moet de datagenerator van de indexer de waarden van de facetten invullen.

De waarde van een facetveld wordt altijd as is in de facetindex weggeschreven, dus niet getokenized, onafhankelijk van wat de datagenerator in subscript tokenize specificeert.

In het geval het facetveld ook via een reguliere zoekactie opzoekbaar moet zijn, dus via een prefix:pattern zoekpatroon, dan is het tokenize subscript van de datagenerator wel van belang en moet het index subscript op 1 staan, wat default zo is. In het andere geval kan de datagenerator subscript index=0 zetten zodat het facetveld niet in de reguliere index wordt opgenomen.

In de facet meta-informatie is maar 1 parameter van belang voor het indexeren:

  • Datacollector
    voor eventuele berekening van de facetwaarde. M-executable voor ophaling van de facetgegevens. Werkt met RDloi en levert een numerieke array RAfacet(i).
    Eigenlijk is dit enkel nodig als de generator het M-indexreservoir overloopt omdat in de M-index een zoekwaarde staat, die niet per se gelijk is aan de gewenste waarde voor het facet.

De datacollector kan aangesproken worden met

macro getExploratorRecordFacet($facet, $loi, $indexer):
    '''
    $synopsis: Haal de facetgegevens op voor de combinatie $indexer-$loi
    $facet: array met te indexeren facetgegevens (zie bvv 2136)
    $loi: loi
    $indexer: explorator indexer id
    $example: m4_getExploratorRecordFacet(ZAfacet,RDloi,RDindxr)
    '''
    «d %GetFac^bexsexpl(.$facet,$loi,$indexer)»

37.3.1.2. M-datagenerator

Een M-datagenerator moet per record een MJSON structuur opleveren via m4_writeMJSON. Hiervoor kan de macro m4_exportExploratorRecordRsv gebruikt worden. De routine moet altijd volgende variabelen kunnen herkennen en behandelen:

  • RDupdate: is leeg of bevat een $H-tijdsaanduiding. Aan de hand hiervan moeten records kunnen geselecteerd worden voor updating.

  • RDrecord: is leeg of bevat een loi die moet geïndexeerd worden

Indien vertrokken wordt vanuit het M-indexreservoir van de te indexeren lois, kan gebruik gemaakt worden van een aantal m4-macro's die terug te vinden zijn in /explorator/application/explorator.d:

  • m4_initExploratorRecordRsv

  • m4_nextExploratorRecordRsv

  • m4_getExploratorRecordRsv

  • m4_exportExploratorRecordRsv

  • m4_getExploratorRecordFacet

De array die aan m4_exportExploratorRecordRsv moet afgeleverd worden kan de hierna opgesomde subscripts bevatten, waarbij mogelijk niet alle subscripts van toepassing zijn op alle indexeertypes. De default waarden staan tussen [].

encoding [brocade]

de encoding van de velden. Obsolete, staat nu altijd op utf-8

delete: 0 | 1

duidt aan of dit record uit de index moet verwijderd worden

fieldname,nr

een fieldname kan meerdere keren voorkomen, telkens met een verschillende waarde

fieldname,nr,encoding

encoding van dit veld indien verschillend van de globale encoding van het record. Obsolete.

fieldname,nr,fieldtype: ``string | stream | numeric | long [string] ``

stream zal nooit voorkomen vanuit de databank. numeric kan belangrijk zijn voor een juiste formattering in bvb. Lucene, omdat oudere versies van deze index enkel strings kende. long indexeert de waarde als NumericField wat voordelen kan hebben bij sortering en range queries.

fieldname,nr,index: 1 | 0 [1]

moet dit veld geïndexeerd worden

fieldname,nr,tokenize: 1 | 0 [1]

moet de inhoud van dit veld nog geanalyseerd worden vooraleer het geïndexeerd wordt. Dit kan een omzetting naar lowercase, uitsplitsing in whitespace, verwijderen van stopwoorden enz. inhouden. In Lucene gebeurt dit door een zgn. analyzer.

fieldname,nr,store: 1 | 0 [0]

moet de inhoud van dit veld in de index opgeslagen worden.

fieldname,nr,norms: 1 | 0 [0]

heeft vnl. betrekking op het al dan niet meetellen van de lengte van een veldwaarde bij de berekening van de relevance-waarde. In Lucene: Norms are created for quick scoring of documents at query time. These norms are usually all loaded into memory so that when you run a query analyzer over an index it can quickly score the search results. No norms means that index-time field and document boosting and field length normalization are disabled. The benefit is less memory usage as norms take up one byte of RAM per indexed field for every document in the index, during searching.

fieldname,nr,sort: 1 | 0 [0]

moet op dit veld kunnen gesorteerd worden.

fieldname,nr,pyix: 1 | 0 [0]

Als pyix=1 gedetecteerd wordt door mfeeder.py, wordt indextools.getWordsBrocadeString of indextools.getWordsBrocadeAuthor aangesproken. Dit levert tokens op van de aangeboden string, analoog aan de aanmaak van verwante vormen in de M-indexen. Naderhand werd dit geïncorporeerd in de BrocadeAnalyzer en is nu dus overbodig indien het veld in kwestie met deze analyzer geïndexeerd wordt.

Indien de indexering opgestart wordt met trace=yes resume=yes kan de datagenerator de macro m4_setExploratorTrace("") gebruiken om aan te geven dat er geen te indexeren records meer zijn.

37.3.1.3. Een LOI indexeren vanuit een M-applicatie

Om een LOI te indexeren vanuit een M-module wordt best volgende macro gebruikt:

macro indexExploratorRecord($loi, $indexer, $delete=0, $queue="global"):
    '''
    $synopsis: Update een explorator index van een bepaald record
    $loi: loi van het record of array met loi's in subscripts
    $indexer: indexer die moet aangesproken worden
    $delete: 1 = schrap record uit index
    $queue: global = plaats in ^BEXPL("queue")
            file = plaats in registry.explorator_update_dir
            leeg of 0 = onmiddellijke indexering
    $example: m4_indexExploratorRecord(RDloi,"authorities")
    '''
    «d %Upd^bexsexpl(.$loi,$indexer,$delete,$queue)»
        if «$loi isInstanceOf "name"»
    «d %Upd^bexsexpl($loi,$indexer,$delete,$queue)»

$queue: indien deze parameter leeg is of 0, wordt het record onmiddellijk geïndexeerd. Dit betekent echter voor elke loi het opstarten van een nieuw proces waarin explorator index uitgevoerd wordt. Het is daarom efficiënter om de te updaten loi in een queue te zetten die door een thread van de daemon op regelmatige tijdstippen (daemon modifier wupdate) wordt leeggelezen en verwerkt.

Als de daemon draait met indexers actief, is de wijziging zichtbaar na de eerstvolgende verwerking van de update-queue (daemon modifier wupdate) en reset (daemon modifier reset) van de daemon.

37.3.1.4. Toolcat explorator index

37.3.1.4.1. Commando
explorator index Brocade indexer-id [type=indextype] | xmlfile | directory  \
[options="tag=value;..."] [streamtype=record|file] \
[fieldtype=*fieldtag*:string|numeric|long|date] [facet=*facettags*] \
[superix=*superindextag*:tags] [update=yes|no|date:*datum*|record:*loi[;loi;...]*] \
[append=yes|no] [delete=yes|no] [edaemon=yes|no] \
[trace=yes|no] [resume=yes|no|try] [browse=yes|no] [suggestonly=yes|no]
37.3.1.4.2. Verklaring

Het eerste en enige argument is de bron van de te indexeren records. Dit kan zijn:

  • een mt:expindexer identifier. In dit geval zijn verschillende modifiers niet van toepassing omdat alle gegevens in de meta-informatie van de indexer vervat zitten

  • een xmlfile met vastgelegde structuur (zie explorator.dtd)

  • een tekstfile die dan als enige document geïndexeerd wordt. Tekstfiles worden geïndexeerd in 1 veld content met een extra veld path voor de pathnaam

  • path van directory waarin alle files geïndexeerd worden.

Mogelijke modifiers zijn:

api

wordt de functie aangesproken via een api (default false)

type

indextype. Niet nodig indien de bron een indexer is, want dan staat het indextype in de meta-informatie.

streamtype

record of file. Niet nodig indien de bron een indexer is, want dan staat het stream- of feedertype in de meta-informatie.

fieldtype

*fieldtag*:string|numeric|long|date;..... Niet nodig indien de bron een indexer is, want dan staan de fieldtypes in de meta-informatie.

facet

facettags, gescheiden door ;. Niet nodig indien de bron een indexer is, want dan staan de facetten in de meta-informatie.

superix

tag en samenstelling van superindex. . Niet nodig indien de bron een indexer is, want dan staat de superindex in de meta-informatie.

update
  • no: default. Geen updating, volledige indexering. Een nieuwe index wordt aangemaakt.

  • yes: enkel geldig indien de bron een indexer is. De startdatum wordt dan gehaald uit diens lastrun parameter

  • date:datum: enkel records die op of na deze datum zijn gewijzigd worden geïndexeerd. Indien de bron een indexer is moet de datagenerator dit uitmaken. In het geval van een xmlfile moet bij elk <record> element een mdate attribuut ingevuld zijn met de laatste datum van wijziging. Indien geen mdate attribuut is ingevuld wordt het record geïndexeerd. Bij het overlopen van een directory wordt naar de modification time van de files gekeken.

  • record:loi[;loi;...]: enkel deze records wordt geïndexeerd. Indien de bron een indexer is moet de datagenerator dit correct opvangen (in M wordt RDrecord aangeleverd).

  • record:[u]lst-loi: enkel de records in deze lijst moeten geïndexeerd worden. Indien de bron een indexer is moet de datagenerator dit correct opvangen. De explorator-feeder loopt over de nodes in de lijst, in M wordt telkens RDrecord aangeleverd.

delete

indien yes worden alle aangeleverde items verwijderd uit de index. Zet automatisch update op yes.

append
  • no: default. Een nieuwe index wordt aangemaakt tenzij update gespecificeerd is.

  • yes: de records worden aan de bestaande index toegevoegd.

edaemon
yes = indexering verloopt via explorator daemon indien deze draait (enkel, en default, voor updates).
Een full index verloopt nooit via de daemon.

Note

Modifier daemon is een dedicated modifier van toolcat, vandaar edaemon.

trace
  • yes: Noteer de geïndexeerde records zodat een resume vanaf de juiste positie kan gebeuren.

  • no: default.

resume
  • yes: Ga verder met indexeren vanaf laatste trace. append wordt dan automatisch op yes gezet. Indien geen trace gevonden wordt gebeurt er verder niets (zie try). Opgelet: niet vergeten trace ook terug op yes te zetten indien later een volgende resume moet uitgevoerd worden.

  • no: default.

  • try: er wordt geprobeerd een resume uit te voeren. Indien geen trace gevonden wordt begint indexering opnieuw met resume=no

browse
  • yes: indexeren met browsing functionaliteit (experimenteel)

suggestonly
  • yes: bouw enkel de index op die dient voor de autosuggest functionaliteit. Indien de feeder een M-feeder is wordt de variabele RDsuggst=1 meegegeven en kan de datagenerator daar eventueel rekening mee houden en enkel suggest-velden (+ uniqueid-veld!) aanleveren. Anders wordt het volledige record aangeleverd maar wordt enkel met de suggest-velden iets gedaan.

options

dit is een tag=value;tag=value;... string. Mogelijke tags zijn afhankelijk van het indextype. Een optie die zeker moet meegegeven worden indien de bron geen indexer is, is de naam van de index (options="index=*naam*"). Indien de bron een indexer is komen de opties uit de meta-informatie van deze indexer, maar ze kunnen overschreven worden door expliciet meegegeven opties.

37.3.1.4.3. Werking en routines
  • explorator index instantieert de class indexer.Indexer.

  • De indexer gaat feeder.Feeder aanspreken om de te indexeren records of files binnen te krijgen.
    Afhankelijk van de gespecificeerde source wordt mfeeder.Feeder, xmlfeeder.Feeder, txtfeeder.Feeder, pluginfeeder.Feeder of filefeeder.Feeder gebruikt.
  • Elk door de feeder aangeleverd record wordt omgezet in een inrecord.Record object.

  • indexer.Indexer start dan de type-afhankelijke indexering via de class *indextype*indexer.Indexer.

Note

Elke indexer en elke stream (feeder) heeft een start-, record- en stopfunctie.

Een volledige indexering zet de nieuwe index in een tijdelijke directory (_*index*) die automatisch de index overschrijft wanneer mogelijk, d.i. bij afloop van de indexering als de daemon niet draait of anders bij herstart van de daemon (rekening houdend met trace en resume).

Voor een Lucene-index worden, naast de Lucene-files, 2 extra files aangemaakt door luceneindexer.py:

  • explorator_version: versienummer van de index. Kan gelezen worden met m4_exploratorIndexVersion

  • explorator_creator: maker van de index, meestal een mt:expindexer identifier. Kan gelezen worden met m4_exploratorIndexCreator.

Note

Alle routines staan in project /explorator/application.

Globale feederroutine

feeder.py

overkoepelende klasse voor aanlevering te indexeren gegevens. Start stream op van specifiek type (M, file, plugin, xml, ...)

Type-specifieke feederroutines

filefeeder.py

levert de paths van de te indexeren bestanden aan de indexer

mfeeder.py

start een M-stream op die MJSON-records aanlevert, die dan omgezet worden in inrecord.Record objecten.

xmlfeeder.py

levert records aan vanuit xml-files (volgens explorator dtd), die dan omgezet worden in inrecord.Record objecten.

mxmlfeeder.py

doet zelf niets anders dan het opstarten van een M-routine (meestal de datagenerator van de explorator-indexer) die xml-files aanmaakt. Neemt dus in principe ook de rol van indexer op zich omdat alles zich in M afspeelt.

txtfeeder.py

levert de inhoud van tekstfiles aan, omgezet in inrecord.Record objecten.

pluginfeeder.py

Python module (/explorator/plugin/xxx.py) die via een functie record, inrecord.Record objecten aanlevert.

Globale indexroutine

indexer.py

overkoepelende indexklasse die de type-specifieke indexroutine opstart

Type-specifieke indexroutines

luceneindexer.py

lucene indexering

mxmlindexer.py

aanmaak xml-files (volgens explorator.dtd) gebeurt door de mxmlfeeder vanuit M. De indexer doet niets anders dan de benodigde directories aanmaken waar de xml-files in terechtkomen.

xmlindexer.py

aanmaak xml-files (volgens explorator.dtd) vanuit Python

zebraindexer.py

zebra indexering

Lucene parser routines

luceneanalyzer.py

bepaling van de te gebruiken analyzer en implementatie van BrocadeAnalyzer

lucenecustom.py

query parser

Lucene facetroutine

lucenefaceter.py

afhandeling van indexering (en opvraging) van gewenste facetten

Formatter routine

inrecord.py

interne structuur waar elk te indexeren record naar herleid wordt alvorens aan de effectieve indexer doorgespeeld te worden

37.3.1.5. Tokens

explorator tokens

Dit commando laat toe om, per prefix, de tokens van een bepaalde loi in een bepaalde Lucene index op te vragen.

Het eerste argument is de naam van de mt:expindexer of de naam van de Lucene index.
Het tweede argument is de loi.

Mogelijke modifiers:

field:

opsomming van te tonen prefixen, gescheiden door ,. Indien leeg worden alle prefixen getoond. Default: ''

output:
  • '': output wordt geprint op stdout

  • path: output wordt geprint in gespecificeerde path

  • 'M': output komt terecht in ^ZEXPL("tokens",arg1,arg2)

Default: ''

Vanuit M kan dit met de macro

macro getExploratorTokens($tokens, $index, $loi, $field=""):
    '''
    $synopsis: Array van in Lucene aangemaakte tokens voor een bepaalde loi in een bepaalde index.
    $tokens: array met indexprefixen als subscript en de tokens als waarde
    $index: explorator indexer-id
    $loi: op te zoeken LOI
    $field: veldnamen, gescheiden door ,. Indien niets ingegeven worden de tokens van alle velden getoond.
    $example: m4_getExploratorTokens("irua","c:irua:10000")
    '''
    «d %Tokens^bexsexpl(.$tokens,$index,$loi,$field)»

Er bestaat ook een gebruikersproces Zoek tokens in een Lucene index.

37.3.2. Zoeken

37.3.2.1. Meta-informatie

37.3.2.1.1. Searchers

Een searcher (mt:expsearcher) wordt ingevuld via de Brocade interface en definieert de parameters voor een zoekproces, dat wordt opgestart via het toolcat-commando explorator search.

37.3.2.1.1.1. Algemene parameters
  • Template

    de template waarmee de zoekresultaten moeten geformatteerd worden

  • Index doorzoeken

    hier wordt aangeduid of deze searcher een Lucene-, XML- of Zebra-index doorzoekt

  • Fieldtypes

    sequentie van fieldtag:numeric|long|date|string gescheiden door ;. Het default fieldtype is string. Andere mogelijkheden zijn numeric, long en date. Op deze types gebeurt mogelijk een bewerking voor de opzoeking. In principe moeten deze fieldtypes op dezelfde manier ingevuld zijn bij de indexer die de index heeft aangemaakt waarop deze searcher werkt.

  • Facetten

    opsomming van de facetten die een zoekactie met deze searcher moet meebrengen

  • Zoekstringtransformatie

    mindex transformeert een zoekstring naar een M-index-hoofdvorm-structuur. Dit is voornamelijk van belang als de index waarin gezocht wordt, opgebouwd is vanuit een M-indexreservoir omdat dan de facto hoofdvormen zijn geïndexeerd. Deze transformatie is ingebouwd in de BrocadeAnalyzer, dus kan genegeerd worden als deze analyzer gebruikt wordt.

37.3.2.1.1.2. Lucene-specifieke parameters
  • Naam index

    de naam van de te doorzoeken index, zoals gedefinieerd in de indexer

  • Analyzer

    een analyzer maakt een tokenstream van een te indexeren stream. Afhankelijk van de analyzer kan dit inhouden: omzetting naar lowercase, whitespace splitsing enz. In dit veld kan de default te gebruiken analyzer ingevuld worden en/of een reeks van veldspecifieke analyzers. In dit laatste geval moet de naam van de analyzer voorafgegaan worden door veldnaam:, dus bvb. issn:WhitespaceAnalyzer. Als niets ingevuld wordt, wordt SimpleAnalyzer gebruikt voor alle velden. In principe moeten dezelfde analyzers gebruikt worden als bij de indexering. Zie voor meer details bij het analyzerveld van de indexer.

  • Default zoekveld

    het geïndexeerde veld waarin de termen gezocht worden waarvoor geen veld is opgegeven in de zoekactie. Default is dit het veld content. Het default zoekveld wordt overruled door Transformatie zoektermen zonder veldspecificatie.

  • Default operator

    de default Lucene operator is OR. Dit kan hier gewijzigd worden in AND of NOT. Voor praktisch alle Brocade toepassingen wordt ervan uitgegaan dat de default operator AND is.

  • Allow leading wildcard

    wildcards vooraan in de zoekactie zijn default niet toegelaten. Opgelet hiermee, deze parameter opzetten kan serieuze vertragingen teweegbrengen in grote indexen

  • Groeperen op

    Lucene bevat intern de mogelijkheid een zoekactie op te starten waarvan de resultaten gegroepeerd worden volgens het hier ingevulde veld. Opgelet, dit vreet geheugen en wordt daarom intern gelimiteerd op 5000 groepen en 50000 zoekresultaten. Enkel bruikbaar voor relatief kleine indexen.

  • Groep sorteren op

    veldnaam waarop groep moet gesorteerd worden, voorafgegaan door - indien reverse. Daarbij wordt een groep "gerepresenteerd" door het hoogst gesorteerde document binnen de groep. Gepredefinieerde veldnamen: relevance (=default sortering), grouphits (=sortering per aantal documenten in de groep)

  • Eerste groep-zoekactie

    Een groep-zoekactie kan in 2 fasen uitgevoerd worden. De eerste fase is dan een gewone zoekactie waarbij het zoekpatroon aangevuld wordt met het hier ingevulde patroon.

De resultaten van deze zoekactie worden eerst getoond in de resultatenlijst en zullen niet meer voorkomen in de resultatenlijst van de tweede zoekactie.

Voorbeeld

  • het ingevulde patroon eerste groep-zoekactie: levelid:fonds

  • het door de gebruiker ingevulde zoekpatroon: daisne

  • het uitgevoerde zoekpatroon: daisne AND levelid:fonds

Warning

De totale resultatenlijst is altijd een combinatie van de eerste en de tweede zoekactie.

  • Tweede groep-zoekactie

    Een groep-zoekactie kan in 2 fasen uitgevoerd worden.

De tweede fase is dan een groep-zoekactie waarbij het zoekpatroon aangevuld wordt met een opsomming van excludes, bestaande uit het hier ingevulde indexprefix gecombineerd met alle resultaten uit de eerste zoekactie.

Voorbeeld

  • het ingevulde indexprefix tweede groep-zoekactie: parent

  • het door de gebruiker ingevulde zoekpatroon: daisne

  • resultaten eerste zoekactie: isad:lh:305, isad:lh:1234

  • het uitgevoerde zoekpatroon: daisne NOT parent:isad:lh:305 NOT parent:isad:lh:1234

Warning

De totale resultatenlijst is altijd een combinatie van de eerste en de tweede zoekactie.

Note

Eerste en tweede groep-zoekactie werd ontwikkeld in het kader van discovery services, maar werd daar uiteindelijk niet gebruikt. De software is wel behouden.

  • Sortering

    de naam van het veld waarop moet gesorteerd worden. Opgelet, dat veld moet geïndexeerd zijn met tokenize=0! Indien niet ingevuld wordt gesorteerd op de Lucene relevance factor.

  • Ranking

    Probeersel dat voor Brocade vervangen is door ranking mechanismen mt:rankcontext en mt:rankdomain. Zie parameter Ranking context bij de indexer.

    Geef een mt:expranking identifier of laat leeg voor de default relevance berekening. Dit is natuurlijk enkel geldig indien voor Sortering ofwel niets ofwel relevance is ingevuld en laat toe de default Lucene relevance ranking aan te passen.

  • Extra velden ex databank

    niet alle gegevens van een record worden in de Lucene-index opgeslagen. Indien de formattering van het zoekresultaat dergelijke gegevens verwacht dan kunnen deze via de in deze parameter gespecificeerde M-executable opgehaald worden. De routine moet per record een MJSON structuur opleveren via m4_yieldMJSON en krijgt daarvoor de variabele RDuniq ter beschikking waarin de waarde staat van het uniqueid veld.

  • Max. aantal records in 1 zoekactie

    hoeveel gevonden records mogen maximaal opgehaald worden. Default is 1000. Deze parameter kan een belangrijke rol spelen voor caching in de displayer

  • Default zoekstring

    een zoekstring die altijd met een AND-operator geplakt wordt aan de ingegeven zoekstring. Deze zoekstring wordt geïnterpreteerd als een template waarvan de parameters kunnen aangeleverd worden via Parameters default zoekstring.

  • Parameters default zoekstring

    een mt:exec identifier van het type expdsrch die de parameters berekent voor de template van de default zoekstring.

  • Transformatie zoektermen zonder veldspecificatie

    beter alternatief voor een superindex. Zoektermen die niet voorafgegaan worden door een veldspecificatie, worden opgesplitst over de hier gespecificeerde velden. Bvb. ti;au transformeert een zoekstring claus ow:antwerpen naar (ti:claus OR au:claus) ow:antwerpen.

    Te gebruiken

    • indien men een default field wil dat een verzameling is van velden die met verschillende analyzers worden geïndexeerd

    Warning

    Voor de hier gespecificeerde velden moeten analyzers gebruikt worden die de stopwoorden op dezelfde manier behandelen bij indexering en bij opzoeking

  • Max. aantal gevonden records in 1 zoekactie

    een zoekactie met meer dan het hier ingevulde aantal zoekresultaten resulteert in een foutmelding. Default is 300000.

  • Highlighting

    veldnamen waarvan de zoekstring in de inhoud moet aangeduid worden. De inhoud van deze velden moet bij het indexeerproces in de index opgeslagen worden (store=1). Het resultaat wordt als extra veld highlight aan het resultaat toegevoegd en kan via de placeholder explorator_highlight in de resultaattemplate geplaatst worden.

  • Tags

    alle voorkomende veldnamen (prefixen) in de index. Dit wordt automatisch ingevuld door de indexer

  • Tag

    hier kunnen taalafhankelijke verwoordingen en een alias van een indexveld ingegeven worden. De alias levert een alternatieve zoekstring. Zo kan een veld met naam ti en alias titel opgezocht worden met ti:universe en titel:universe.

37.3.2.1.2. Facetten

Een facet groepeert dynamisch een aantal waarden van een zoekresultaat en kan in de zoekinterface als een filter op het zoekresultaat gebruikt worden. Welke waarden voor een facet moeten geïndexeerd worden, moet in de datagenerator van de indexer vastgelegd worden. De eigenschappen van een facet (mt:expfacet) worden ingevuld via de Brocade interface.

37.3.2.1.2.1. Parameters
  • Datacollector

    Zie facetten bij de indexer

  • Tag voor opzoeking

    Hier dient de prefix ingevuld te worden waaronder de facetwaarde is geïndexeerd, indien deze verschillend is van de facetnaam.

  • Hiërarchisch

    Aan te vinken indien het facet hiërarchische waarden kan hebben die dan ook als dusdanig moeten getoond worden. De verschillende levels in de waarde van een hiërarchisch facet moeten gescheiden worden door /.

Voorbeeld

pubtype^birsix (/acadbib/desktop)

Daarnaast zijn er een aantal displayparameters die aan 1 of meerdere searchers kunnen gekoppeld worden. De eerste set is de default set die gebruikt wordt als een bepaalde searcher niet expliciet aan een set gekoppeld is

  • Searchers

    lijst van searchers, gescheiden door ;, die met deze set werken

  • Benamingen

    taalafhankelijke verwoordingen

  • Range invullen

    via een slider of 2 invulvelden kan met deze optie aan de gebruiker de mogelijkheid geboden worden een gewenste range van waarden aan te duiden ipv individuele waarden aan te stippen.

  • Sortering

    hoe de facetwaarden worden gepresenteerd, in volgorde van aantal documenten, alfabetisch of berekend via een M-routine

  • Berekening sortering

    M-executable voor de sortering van de facetwaarden. Werkt met array RAfacet(i) die opnieuw gesorteerd wordt.

    Er bestaat een routine die jaartallen groepeert per decade, van het vroegste jaartal tot het eerst daaropvolgende tiental en vervolgens telkens van 01-00. Om hiervan gebruik te maken, noteer d %Groupdc^bexstool in dit veld. Tevens de optie Berekend van het veld Sortering aanstippen.

  • Omgekeerde sortering

    moet aangevinkt worden indien het resultaat van de sortering in omgekeerde volgorde moet getoond worden.

  • Frequentie

    minimum aantal documenten waarnaar facetwaarde moet verwijzen om getoond te worden (default 1)

  • Aantal getoonde waarden

    het maximum aantal facetwaarden dat getoond wordt. De rest zit verborgen achter de Meer-knop.

  • Executable presentatie

    routine die eventueel moet uitgevoerd worden om de displaywaarde van de facetwaarde te berekenen. Ze werkt met RDfacet en geeft de berekende waarde in RDfacet terug. Indien RDfacet leeg is, wordt er geen facet getoond (ook geen witregel). Rechtstreekse vertalingen in Vertalingen presentatie hebben altijd voorrang.

  • Vertalingen presentatie

    Dit zijn structuren van het formaat facetwaarde:taal:vertaling. Deze hebben altijd voorrang op wat een eventueel opgegeven executable oplevert.

  • Niet te tonen waarden

    opsomming van facetwaarden die niet moeten getoond worden

  • Te vervangen waarden

    opsomming van facetwaarde:nieuwe facetwaarde. De facetwaarde, bekomen na uitvoering van de presentatiefunctie, wordt door de nieuwe facetwaarde vervangen

37.3.2.1.3. Templates

Templates dienen om het resultaat van een zoekactie te formatteren. De parameters worden ingevuld via de Brocade interface.

De door explorator teruggegeven zoekresultaten staan tussen <data></data> tags indien het om een gewone zoekactie gaat, tussen <term></term> tags indien het een browse-actie betreft (experimenteel). Eventuele facetgegevens staan tussen <facet></facet> tags.

Een template kan bestaan uit een header, een per-record deel, en een footer. Deze delen kunnen in het meta-formulier ingevuld worden, maar kunnen ook door een M-routine op stdout geschreven worden.

Er kan gebruik gemaakt worden van placeholders: <explorator_*fieldname*>, op voorwaarde dat dat veld met store=1 geïndexeerd is. Verder zijn er ook een aantal vaste placeholders:

  • EXPLORATOR_CURDOC: de indexaanduiding van het huidige document

  • EXPLORATOR_NXTDOC: de indexaanduiding van het volgende document

  • EXPLORATOR_ALLDOC: het totaal aantal gevonden documenten in de zoekactie

Bovendien is het mogelijk l4_ constructies te gebruiken voor taalafhankelijke verwoordingen.

Als de template bvb. bestaat uit een lege header, lege footer en <explorator_uniqueid> in het per-record deel, dan wordt enkel het uniqueid (loi) van de gevonden documenten teruggegeven.

37.3.2.1.4. Ranking

In elke indexer en searcher kan een ranking-identifier ingevuld worden indien de resultatenset op relevance moet gesorteerd worden en men niet met het default ranking-algoritme wil werken. De parameters worden ingevuld via de Brocade interface <r4_web_base_url/menu/expranking/>.

Dit is ontwikkeld bij wijze van experiment. In Brocade wordt voor relevance ranking gebruik gemaakt van mechanismen via mt:rankcontext en mt:rankdomain.

37.3.2.1.4.1. Parameters
  • Similarity

    Similarity is een information retrieval model waarin de relevance-berekening van een resultatenset wordt bepaald. De meest gangbare similarity-implementatie is de TFIDF-similarity (Term frequency - Inverse document frequency), een combinatie van het zgn. Boolean Model en het Vector Space Model. Default gebruikt Lucene echter de BM25-similarity (Best Match 25), een meer probabilistisch relevantiemodel. Opgelet, veranderen van model vereist herindexering!

  • BM25

    Het BM25 model (Best Match 25) is een probabilistisch georiënteerd relevantiemodel en tevens het default model in Lucene. Het kan getweakt worden door aanpassing van de zgn. b-factor en k-factor.

    • b-factor

      De b-factor heeft invloed op het belang van de lengte van het document t.o.v. de gemiddelde documentlengte in de ganse index. De documentlengte is de som van de lengtes van alle velden. Standaard staat de b-factor op 0.75. Hoe hoger de waarde, hoe meer invloed van de lengte in de relevantieberekening. Zet je de b-factor op 0, dan schakel je dus de invloed van de veldlengte volledig uit. Zie ook norms bij de meta-informatie van de indexers.

    • k-factor

      De k-factor is een maat voor het relevantie-verschil tussen documenten met een hoge en een lage termfrequentie. De standaardwaarde is 1.2. Deze dempt de belangrijkheid van het aantal keer voorkomen van een zoekterm in een document. Verhoog je deze waarde dan verhoogt de impact van het meermaals voorkomen van een zoekterm in een document.

  • TFIDF

    Het TFIDF model (Term frequency - Inverse document frequency) is een combinatie van het zgn. Boolean Model en het Vector Space Model. Het kan getweakt worden door aanpassing van de term frequency berekening en de inverse document frequency berekening.

    • Term Frequency

      Term frequency is een maat voor hoe vaak een zoekterm in een document voorkomt. Dit uitschakelen kan nuttig zijn, bvb. bij het zoeken op titelvelden.

    • Inverse Document Frequency

      Inverse document frequency is een maat voor hoe "speciaal" een zoekterm is over alle documenten heen. Hier kan je aanduiden of je de default berekening wil gebruiken of de formule die in het BM25 model wordt gebruikt.

37.3.2.1.5. Displayer

Een searcher + template is in principe voldoende om een zoekresultaat te krijgen. Een displayer is een extra laag die dient om op een gemakkelijke manier een Brocade-interface voor een zoekactie te maken.

Een displayer (mt:expdisplayer) wordt ingevuld via de Brocade interface.

37.3.2.1.5.1. Parameters
  • Explorator searcher

    welke searcher moet opgestart worden

  • Pagina header

    html-code met header die bovenaan de pagina geplaatst wordt. Het geheel wordt verwerkt als een template zodat taalcodes kunnen gebruikt worden voor een taalonafhankelijk resultaat.

  • Header enkel op startscherm

    indien aangevinkt wordt de header niet getoond op het scherm met zoekresultaten

  • Pagina footer

    html-code met footer die onderaan de pagina geplaatst wordt. Het geheel wordt verwerkt als een template zodat taalcodes kunnen gebruikt worden voor een taalonafhankelijk resultaat.

  • Footer enkel op startscherm

    indien aangevinkt wordt de footer niet getoond op het scherm met zoekresultaten

  • M-exe voor resultaten-header
    dit is een header die geplaatst wordt boven de lijst met zoekresultaten en de ingevulde header van de gebruikte template overrulet.
    M-executable die RDheader ter beschikking krijgt. De M-executable kan RDheader eventueel veranderen en in dezelfde variabele teruggeven.
  • M-exe voor record

    M-executable die per gevonden record volgende variabelen ter beschikking krijgt:

    • RDrecord: het door de zoekactie ingevulde record-deel van de gebruikte template

    • RDuniq: de uniqueid van dit record (meestal dus de LOI)

    De M-executable kan volgende acties uitvoeren:

    • RDrecord kan veranderd en in dezelfde variabele teruggegeven worden. Zo kan de door zoekactie en template aangeboden RDrecord enkel bestaan uit de loi, waarna de M-executable van de displayer er een korte beschrijving van maakt.

    • Het resultaat van de M-executable kunnen ook meerdere te tonen records zijn. In dat geval is RDrecord een array met numerieke subscripts.

    • Het gedeelte van RDrecord of RDrecord(n) dat omgeven is door <url></url> wordt in de url voor doorlinking geplaatst.

    • Een andere variabele die door deze M-exe kan teruggegeven worden is RDvalue, d.i. de waarde die moet ingevuld worden in het <value> deel van de url voor doorlinking. Net zoals RDrecord kan ook RDvalue een array zijn met numerieke subscripts voor doorlinking van de overeenkomende subscripts in RDrecord.

  • M-exe voor resultaten-footer
    dit is een footer die geplaatst wordt onder de lijst met zoekresultaten en de ingevulde footer van de gebruikte template overrulet.
    M-executable die RDfooter ter beschikking krijgt. De M-executable kan RDfooter eventueel veranderen en in dezelfde variabele teruggeven.
  • HTML-code vóór zoekresultaten

    vaste HTML-blok die voor de zoekresultaten geplaatst wordt

  • HTML-code na zoekresultaten

    vaste HTML-blok die na de zoekresultaten geplaatst wordt

  • Aantal records per pagina

    max. aantal zoekresultaten per pagina. Dit hoeft niet gelijk te zijn aan het Max. aantal records in 1 zoekactie dat gespecificeerd wordt bij de searcher. Dit laatste is belangrijk voor caching, het eerste voor de display.

  • Filters

    opsomming van OPAC-filters, gescheiden door ;. Het enige verschil met een 'gewone' OPAC-filter is dat t.h.v. index de indextag (veldnaam) ingevuld wordt waarop in de index moet gezocht worden. Zo wordt bvb. index scope in Lucene vertaald door een aanvulling van de zoekstring met scope:*optie*.

  • Facetten

    opsomming in volgorde van te tonen facetten

  • Groepshoofding

    M-exe die de groepswaarde krijgt in RDopcgrp, het aantal documenten in de groep in RDopcgnr en het resultaat teruggeeft in RDopcghd

  • CSS

    invulling van de css-rules. Volgende css-classes zijn standaard van toepassing:

    • explorator_banner: header/footer van de pagina, zoals ingevuld in In te voegen header/footer

    • explorator_title: titel zoals ingevuld in de taalafhankelijke omschrijving

    • explorator_pattern: invulveld voor zoekpatroon

    • explorator_search: submitknop

    • explorator_filter: blok met filtergegevens

    • explorator_filterheader: titel voor blok met filtergegevens

    • explorator_filtertitle: titel van een filter

    • explorator_filteroption: optie van een filter

    • explorator_filtermore: 'meer...' header voor extra facetwaarden

    • explorator_data: overkoepelend blok met zoekresultaten, incl. summary

    • explorator_summary: blok met navigatielinks en totalen

    • explorator_previousnext: link naar volgende/vorige

    • explorator_pages: blok met paginalinks

    • explorator_currentpagenr: link met huidig paginanummer

    • explorator_pagenr: link met niet-huidig paginanummer

    • explorator_result: blok met resultaat-teller

    • explorator_header: blok met RDheader

    • explorator_footer: blok met RDfooter

    • explorator_record: 1 zoekresultaat

    • explorator_noresults: blok met aankondiging dat er geen zoekresultaten zijn

Een displayer kan in de Brocade omgeving rechtstreeks aangesproken worden door een menu-entry te maken met URL <mcgi routine="Entry:bexwshow">&RDdisp=*displayer-id*.

Vanuit een M-applicatie (bvb. lookup object) kan een displayer aangesproken worden met de macro

macro startExploratorDisplayer($id, $pattern="", $narrow=""):
    '''
    $synopsis: Start een displayer
    $id: ExploratorDisplayer identifier
    $pattern: eventueel patroon voor zoekactie. Schakelt eerste scherm met enkel vraag naar zoekpatroon uit
    $narrow: zoekpatroon dat bij alle zoekacties bijgevoegd wordt
    $example: m4_startExploratorDisplayer(id,pattern)
    '''
    «s RDdisp=$id,RDptrn=$pattern,RDnarrow=$narrow d %Entry^bexwshow»

Voorbeeld

lookup object acqrec (bestellingen) spreekt %Entry^bacwordl aan waarin m4_startExploratorDisplayer wordt opgestart met $narrow = de huidige acquisitieinstelling

Er bestaat ook een phtml-script exploratordisplayer.phtml waarmee een displayer vanuit de web-omgeving kan opgestart worden.

Voorbeeld

r4_web_base_url/explorator/exploratordisplayer.phtml?displayer=order r4_web_base_url/explorator/exploratordisplayer.phtml?displayer=order&pattern=journal

37.3.2.2. Lucene query parser syntax

Een overzicht van de query syntax vind je in de API documentatie van queryparser. In principe is er een nieuwe beschrijving bij elke nieuwe Lucene release maar die syntax verandert praktisch nooit.

Warning

De default Lucene operator is OR maar explorator hanteert AND als de default operator.

Een explorator zoekactie begint met een transformatie van het opgegeven zoekpatroon via utilities.transform en de macro

macro parseExploratorStringEntry($result, $string, $searcher, $mode="lucene"):
    '''
    $synopsis: Transformeer een zoekstring naar de juiste vorm voor opzoeking in een index
    $result: resultaat
    $string: zoekstring
    $searcher: Explorator searcherid
    $mode: Explorator indexvorm
    $example: m4_parseExploratorStringEntry(result,string,searcher)
    '''
    «s $result=$$%Parse^bexsexpl($string,$searcher,$mode)»

O.a. de Transformatie zoektermen zonder veldspecificatie gebeurt hier.

37.3.2.3. Een zoekactie vanuit een M-applicatie

De displayers en opacs gebruiken m4_initExploratorSearch om m4_execExploratorSearch aan te spreken. Deze laatste macro start de zoekactie op via het commando explorator search indien er geen daemon draait, of rechtstreeks via een http-request m4_startHttpRequest indien de daemon wel actief is.

macro initExploratorSearch($id, $pid, $pattern, $options="", $searcher, $lg, $pager="", $browse=0):
    '''
    $synopsis: Initialiseer een explorator zoekactie
    $id: identifier van deze zoekactie
    $pid: process id van daemon of leeg
    $pattern: zoekpatroon
    $options: eventuele extra opties die aan de zoekactie moeten meegegeven worden
    $searcher: explorator searcher id
    $lg: taal voor template
    $pager: aantal records per pagina indien pager gebruikt moet worden
    $browse: 0 = gewone zoekactie | 1 = browsing
    $example: m4_initExploratorSearch(id,pid,"van",searcher="users",lg="N",pager=20)
    '''
    «d %Init^bexsexpl(.$id,$pid,$pattern,$options,$searcher,$lg,$pager,$browse)»
macro execExploratorSearch($id, $pid, $pattern="", $options="", $searcher="", $start="", $lg="", $browse=0):
    '''
    $synopsis: indien $pid="" : voer zoekactie uit
               indien $pid'="": wacht op resultaten zoekactie, opgestart door js
               voer paging administratie uit
    $id: identifier van de zoekactie
    $pid: process id van daemon of leeg
    $pattern: zoekpatroon
    $options: eventuele extra opties die aan de zoekactie moeten meegegeven worden
    $searcher: explorator searcher id
    $start: startwaarde (volgnummer, telkens met 1 te verhogen)
    $lg: taal voor template
    $browse: 0 = gewone zoekactie | 1 = browsing
    $example: m4_execExploratorSearch(id,pid,pattern,options,search,start,lg)
    '''
    «d %Exec^bexsexpl($id,$pid,$pattern,$options,$searcher,$start,$lg,$browse)»

Daarnaast zijn ook volgende macro's beschikbaar om een zoekactie te starten vanuit een M-module:

macro listExploratorSearch($pattern, $searcher, $list, $options=""):
    '''
    $synopsis: plaats de resultaten van een zoekactie in een lijst
    $pattern: zoekpatroon
    $searcher: explorator searcher id
    $list: lst- of ulst-loi (wordt gemaakt indien lijst niet bestaat)
    $options: eventuele extra opties die aan de zoekactie moeten meegegeven worden
    $example: m4_listExploratorSearch(pattern,search,list)
    '''
    «d %List^bexsexpl($pattern,$searcher,$list,$options)»
macro yieldExploratorSearch($result, $pattern, $searcher, $options="", $init=0):
    '''
    $synopsis: spreek explorator search aan als generator, tot $result=""
    $result: resultaat
    $pattern: zoekpatroon
    $searcher: explorator searcher id
    $options: eventuele extra opties die aan de zoekactie moeten meegegeven worden
    $init: forceer initialisatie van de search. Noodzakelijk indien nieuwe search wordt opgestart na eerdere search in zelfde proces.
    $example: m4_yieldExploratorSearch(result,pattern,search)
    '''
    «s $result=$$%Yield^bexsexpl($pattern,$searcher,$options,$init)»

37.4. Daemon

37.4.1. Werking en routines

Explorator kan opgestart worden als een daemon met behulp van de CherryPy HTTP-server. Dit is een threaded server die standaard draait op poort 11111 met een maximum van 10 threads, maar beide parameters kunnen bij opstart meegegeven worden (zie toolcatspecificaties).

Bij startup wordt in elke *[indextype]*indexer en *[indextype]*searcher routine gekeken of er een functie startdaemon bestaat, bij shutdown wordt gezocht naar een functie stopdaemon. Dit is ingevuld in de lucenesearcher module waarbij voor alle gedefinieerde Lucene indexen een IndexSearcher wordt opgestart, en ook in de luceneindexer module. Dit laatste moet updates, bvb. vanuit een Brocade applicatie, versnellen omdat rechtstreeks met de openstaande indexer kan geconnecteerd worden. Bovendien kunnen de te openen readers met de indexers gelinkt worden als zgn. Near-Real-Time readers, die beter kunnen reageren op wijzigingen die door de indexers zijn aangebracht.

Updates zijn voor de openstaande searchers niet zichtbaar, daarom is de daemon uitgerust met een reset-functie die op regelmatige tijdstippen kan uitgevoerd worden. Deze functie draait in een aparte thread.

Warning

De reset is enkel effectief voor updates aan de index. Indien er iets verandert aan de meta-informatie van de searcher moet een volledige restart van de daemon uitgevoerd worden.

Een tweede extra thread is de zgn. update-thread die op geregelde tijdstippen (interval te definiëren met modifier wupdate) de update-queue gaat lezen en verwerken.

De daemon wordt aangesproken via het HTTP-protocol waarbij zoveel mogelijk de syntax van de index en search functie van de toolcat-applicatie wordt gerespecteerd.

Indien de serverpoort bereikbaar is voor de client, kan de CherryPy server rechtstreeks aangesproken worden:

r4_web_base_url:11111/explorator/search?pattern=claus&source=authorities

source is de identifier van de searcher. De URL kan verder uitgebreid worden met opties zoals gespecificeerd in de toolcatapplicatie.

Als de serverpoort niet bereikbaar is voor de client kan gebruik gemaakt worden van een PHP script via de Apache server:

r4_web_base_url/explorator/exploratordaemon.phtml?action=search&pattern=claus&source=authorities

Alle logging gebeurt in directory

r4_explorator_process_dir/daemon

De daemon is uitgerust met een testfunctie. Voor de juiste syntax zie de specificatie bij de toolcat-applicatie. De resultaten komen in

r4_explorator_process_dir/daemon/test

(.csv, .txt en .html files). De .html file wordt bovendien naar de webomgeving gekopieerd

r4_explorator_web_dir

Er is een standaard procman proces standard.explorator dat de daemon automatisch kan (her)starten.

Technisch:

2 hoofdklassen:
-> BrocadeCherrypyServer
-> Explorator

DAEMON START

-> Explorator().startserver(port,nrthreads,reset)

   -> reset wordt vastgelegd in self.__reset
   -> server = BrocadeCherrypyServer(port, nrthreads)
      -> stdout wordt omgeleid
   -> server.subscribe met zichzelf (Explorator) als applicatie
      -> applicatie (Explorator) wordt genoteerd in self.__applications
      -> pid van server (BrocadeCherrypyServer) wordt genoteerd in applicatie (Explorator)
      -> server zelf wordt genoteerd in applicatie (Explorator)
      -> queue en resetlock voor applicatie (Explorator) worden geinitialiseerd
   -> server.start
      -> CherryPy configuratie wordt opgezet
         -> engine start = BrocadeCherrypyServer.__start
            -> start van elke applicatie in self.__applications (enkel Explorator) = Explorator.start
               -> Explorator.__initdaemon
                  -> inlezen van alle meta-informatie
                  -> uitvoeren van lucenesearcher.startdaemon (via Explorator.__ixtypes)
                     -> openen van IndexReader per index
                     -> openen van facetdb per index
                     -> initdaemon.ixtype['lucene']['searcher'][index] = (indexreader, facetdb)
               -> zetten van pidfile
               -> indien reset (daemon moet zich om de n sec resetten), starten van resetthread die Explorator.__watchreset uitvoert
                  -> voert na timeout BrocadeCherrypyServer.applicationreset uit
                     -> voorbereidende functie Explorator.prereset
                        -> pass
                     -> zet resetlock (blokkeer nieuwe zoekacties)
                     -> wacht tot uitstaande zoekacties afgehandeld zijn
                     -> begin met reset = Explorator.restart
                        -> Explorator.__resetdaemon
                           -> lucenesearcher.resetdaemon (via Explorator.__ixtypes)
                     -> zet resetlock af
                     -> afsluitende functie Explorator.postreset
                        -> pass
         -> opzet van threadstart = wat uitgevoerd wordt bij start van een thread = BrocadeCherrypyServer.__startthread
            -> startthread van elke applicatie in self.__applications (enkel Explorator) -> bestaat niet voor Explorator


DAEMON STOP

-> pid wordt gekilld met signal.SIGTERM
   -> wordt opgevangen door opzet van CherryPy server in BrocadeCherrypyServer.start = BrocadeCherrypyServer.__terminate
      -> BrocadeCherrypyServer.stop = cherrypyengine.exit
      -> BrocadeCherrypyServer.__stopthread
         -> stopthread van elke applicatie in self.__applications (enkel Explorator) -> bestaat niet voor Explorator


DAEMON RESET

-> via url /registry.explorator_daemon_url/reset wordt Explorator.reset aangesproken
   -> BrocadeCherrypyServer.applicationreset
      -> zie reset na timeout onder DAEMON START / server.start

Note

Alle routines staan in project /explorator/application.

exploratordaemon.py

bevat de implementatie van de server en de afhandeling van alle daemon commando's

testdaemon.py

afhandeling van het commando explorator daemon test

37.4.2. Start

De modifiers waarmee de daemon gestart wordt, worden op de volgende manier bepaald:

  • modifiers die expliciet worden meegegeven met het opstartcommando hebben altijd voorrang. Niet expliciete modifiers krijgen een default waarde.

  • het bestand r4_explorator_process_dir/daemon/explorator.cfg bevat de modifiers van de vorige opstart of configuratie commando. Deze modifier-waarden worden ingelezen en overschrijven de niet expliciet meegegeven modifiers.

  • r4_explorator_process_dir/daemon/explorator.cfg wordt overschreven met de huidige modifiers.

37.4.2.1. Configuratie

explorator daemon config

Aan dit commando kunnen dezelfde modifiers meegegeven worden als aan het commando explorator daemon start.

Ze worden weggeschreven in r4_explorator_process_dir/daemon/explorator.cfg en gebruikt bij de volgende opstart om waarden toe te kennen aan de niet expliciet meegegeven modifiers.

37.4.2.2. Systemd

explorator start | restart

Dit commando gebruikt de registrywaarde os-service om de daemon (terug) op te starten als een systemd service. Onderhuids wordt het commando explorator daemon start uitgevoerd.

Vermits hier geen modifiers kunnen meegegeven worden werkt deze opstart altijd met de modifiers die gezet zijn door de vorige opstart, of door het commando explorator daemon config, of met de default modifiers.

Warning

Dit is de voorkeur startmethode teneinde conflicten met systemd te voorkomen.

37.4.2.3. Basiscommando

explorator daemon start | restart | run
start

start de daemon als een afzonderlijk proces. Dit is tevens het commando dat door systemd wordt uitgevoerd via explorator start.

run

idem als start, behalve dat de daemon in hetzelfde proces en dus niet in de achtergrond gestart wordt. Met debug=yes wordt alle output op de console geschreven.

restart

stop, gevolgd door start

Mogelijke modifiers:

port

default 11111

threads

maximum aantal threads (default 10)

reset

minimum aantal seconden alvorens een automatische reset wordt uitgevoerd. Default=300 Dit gebeurt in een aparte thread van de daemon.

wupdate

minimum aantal seconden voor scanning van update global of directory. Default=120. Dit gebeurt in een aparte thread van de daemon.

indexers

yes = voer functie startdaemon (on startup) en stopdaemon (on shutdown) uit in [ixtype]indexer.py. Default = yes. Zie hier voor verdere specificatie.

searchers

yes = voer functie startdaemon (on startup) en stopdaemon (on shutdown) uit in [ixtype]searcher.py. Default = yes. Zie hier voor verdere specificatie.

showfacets

yes = toon facetten in het zoekresultaat. Default = yes.

37.4.2.4. Automatische herstart

explorator daemon auto avgresponse=n

Dit commando checkt de gemiddelde responsetijd in het afgelopen kwartier via analyse van de logfile r4_explorator_process_dir/daemon/explorator_log. Indien deze groter is dan de aan modifier avgresponse meegegeven waarde (in milliseconden, default 500), dan wordt de daemon herstart via systemd.

Er is een procman process standardexploratorautorestart dat om de 10 minuten deze check uitvoert met avgresponse=1000.

37.4.3. Stop

37.4.3.1. Systemd

explorator stop

Dit commando gebruikt de registrywaarde os-service om de daemon systemd service te stoppen. Onderhuids wordt het commando explorator daemon stop uitgevoerd.

Warning

Dit is de voorkeur stopmethode teneinde conflicten met systemd te voorkomen.

37.4.3.2. Basiscommando

explorator daemon stop

Hier zijn geen modifiers aan verbonden.

Note

Indien de daemon interactief is opgestart via explorator daemon run, dan kan hij ook gestopt worden met CTRL-C.

37.4.4. Reset

explorator daemon reset

De daemon is uitgerust met een extra thread die met een frequentie, bepaald door modifier reset, checkt of er veranderingen aan indexen gebeurt zijn in het afgelopen interval. In dat geval worden de IndexReaders die aan die index verbonden zijn, gesloten en terug geopend teneinde de wijzigingen zichtbaar te maken. Zie ook bij de werking van de daemon.

Warning

reset is enkel effectief voor updates aan de index. Indien er iets verandert aan de meta-informatie van de searcher moet een volledige restart van de daemon uitgevoerd worden.

37.4.5. Status

37.4.5.1. Systemd

explorator status

Dit commando geeft informatie omtrent de software en gebruikt ook de registrywaarde os-service om de status van de daemon systemd service te tonen.

Volgende instructies worden daarbij uitgevoerd:

  • tonen van Lucene versie

  • commando explorator daemon status

  • ps -ef | grep exploratordaemon

  • zoeken op indexerrors in logfile r4_explorator_process_dir/daemon/explorator_log

37.4.5.2. Basiscommando

explorator daemon status

Volgende zaken worden gecheckt:

  • draait de daemon, wat is de processid

  • wat is de gemiddelde responsetijd over het afgelopen kwartier

37.4.6. Logfiles

  • r4_explorator_process_dir/daemon/BrocadeCherrypyServer_access_log

  • r4_explorator_process_dir/daemon/BrocadeCherrypyServer_error_log

  • r4_explorator_process_dir/daemon/explorator_log

  • r4_explorator_process_dir/daemon/explorator_err

37.4.7. Workload

explorator daemon workload

Met dit commando kan het aantal zoekopdrachten van dag x tot dag y weergegeven worden, opgesplitst per searcher.

Mogelijke modifiers:

begin

startdatum in formaat mm/dd/yyyy

end

einddatum in formaat mm/dd/yyyy

pattern

een eventueel zoekpatroon in de logfilelijnen

show

yes = toon gevonden logfilelijnen | no (default)

37.4.8. Test

explorator daemon test

Met dit commando kan een testset aangemaakt worden waarmee de server kan gevoed worden. Op het einde wordt een performantierapport gegenereerd:

  • r4_explorator_process_dir/daemon/test/test_yyyymmdd_nnn.log

  • r4_explorator_process_dir/daemon/test/test_yyyymmdd_nnn.csv

  • r4_explorator_process_dir/daemon/test/test_yyyymmdd_nnn.html

  • r4_web_base_url/explorator/test_yyyymmdd_nnn.html

Mogelijke modifiers:

collect
yes (default) = verzamel testdata via de indexer gespecificeerd in modifier id.
no = gebruik de testdata die staan in r4_explorator_process_dir/daemon/test
id

indexer identifier wiens datagenerator de testset moet leveren en wiens index zal ondervraagd worden

run

yes = start de test (default). Resultaten komen in r4_explorator_process_dir/daemon/test (.csv, .txt en .html files). De .html file wordt bovendien naar de webomgeving gecopieerd (r4_explorator_web_dir/)

group

indien run=yes bepaalt group het aantal requests in 1 resultaat-groep (default 100, d.w.z. dat per 100 requests de totale en gemiddelde requesttijd wordt opgegeven)

max

maximum aantal requests voor een run (default 500)

37.5. Xml

Een indexer die werkt met het xml-indextype maakt XML-files aan volgens de explorator-dtd en verwacht volgende parameters:

  • Naam index

    naam van de directory waar de xml-files terechtkomen. Subdirectory van

    r4_explorator_database_dir/xml/index
    
  • Encoding

    encoding van de xml-files (default = UTF-8)

  • Max. aantal records per xml-file

    default = 10000

37.6. Zebra

De Zebra indexing software is een qua opzet vrij ingewikkeld pakket dat indexen aanmaakt die via Z39.50 en SRU/SRW kunnen geraadpleegd worden. Indexering gebeurt via het commando zebraidx, het zoekproces vereist een server die opgestart wordt via zebrasrv.

Er zijn verschillende interne recordformaten mogelijk. Explorator werkt met het DOM XML record model en verwacht UTF-8 MARCXML files die via xsl-stylesheets geïndexeerd en opgevraagd worden.

Voor de opzet van één en ander, zie Zebra indexing software.

Het indextype zebra wordt enkel in indexers aangeboden. Volgende parameters dienen ingevuld te worden:

  • Naam index

    naam van de directory waar de indexfiles terechtkomen. Subdirectory van

    r4_explorator_database_dir/zebra/index
    

    Dit komt overeen met de database in Zebra. Indexnamen kunnen hetzelfde zijn over indexers heen, maar dan worden de records in dezelfde zebra-database geplaatst.

  • Identifier

    een identifier heeft zijn eigen register en heeft een eigen zebrasrv proces of virtuele host nodig voor raadpleging. Identifiers kunnen gelijk zijn over indexers heen, de records kunnen gescheiden blijven door een andere indexnaam (=zebra database) te kiezen.

  • RecordType

    1 van de parameters in zebra.cfg die de xml-file met de index- en retrieval pipelines definieert

  • RecordId

    1 van de parameters in zebra.cfg die de unieke recordidentificatie definieert.