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

Voor explorator zelf worden volgende Delphi waarden gedefinieerd:

  • explorator-daemon-url

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

  • explorator-database-dir

    de rootdirectory voor alle indexen. Deze wordt verder opgesplitst in

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

    werkdirectory voor de indextypes

r4_explorator_process_dir/*indextype*
  • explorator-update-dir

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

  • explorator-web-dir

    webdirectory voor phtml- en js-scripts

De Zebra indexing software heeft eigen Delphi waarden. Zie daarvoor Zebra indexing software.

37.3. Meta-informatie - Brocade interface

De meta-informatie bestaat uit volgende lagen:

indexers
sturen het indexeerproces
searchers
sturen de zoekacties
templates
formattering van de zoekresultaten
facetten
verfijning van de zoekresultaten
displayers
een presentatielaag in een Brocade-service
ranking
een aantal parameters die kunnen aangepast worden om de relevance score van een Lucene zoekactie aan te passen

37.3.1. Indexers

Een indexer definieert de parameters voor een indexeerproces, dat wordt opgestart via het toolcat-commando explorator -index.

Een indexer werkt met een feeder die de te indexeren items aanlevert en dit zijn ofwel afzonderlijke records ofwel bestanden. De indexering zelf kan dan gebeuren door 1 of meerdere indextypes van het desbetreffende type.

Streamtype of recordtype
  • record: afzonderlijke records worden aangeboden, hetzij via txt- of xml-files, hetzij via een M-generator, hetzij via een plugin (lucene, xml)
  • file: volledige files worden aangeboden aan een externe software, bvb. zebra, zonder dat de exploratorsoftware ze leest en/of parset (zebra)
Streamtype van het type record = recordfeeder
  • Datagenerator

    • een path naar te indexeren file, of 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 M-expressie die per record een MJSON structuur oplevert via m4_writeMJSON. Gebruik hiervoor de macro m4_exportExploratorRecordRsv. De routine moet altijd volgende variabelen kunnen herkennen en behandelen:
      • RDupdate: leeg of bevat een $H-tijdsaanduiding. Aan de hand hiervan moeten records kunnen geselecteerd worden voor updating.
      • RDrecord: leeg of bevat een reeks lois die moet geïndexeerd worden, gescheiden door ;

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 [].

boost numeric [0]
geeft een “meerwaarde” aan dit record. In een Lucene-index wordt dit verrekend in de score van een document
encoding [brocade]
de encoding van de velden
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*,boost numeric [0]
geeft een “meerwaarde” aan dit veld. In een Lucene-index wordt dit verrekend in de score van een document
fieldname,*nr*,encoding ['']
encoding van dit veld indien verschillend van de globale encoding van het record
fieldname,*nr*,fieldtype string | stream | numeric [string] | long
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 [0]
moet dit veld geïndexeerd worden
fieldname,*nr*,tokenize 1 | 0 [1]
moet de inhoud van dit veld nog bewerkt 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.

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.

  • Tags

    Wordt 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. 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, gevolgd door 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 zoekstringtransformatie.

  • Indexeren met browsing faciliteit

    experimenteel. Aanvinken vergt heropbouw van de index

  • Facetten

    opsomming van te indexeren facetten. De datagenerator moet de facetten berekenen. Belangrijkste aandachtspunt is dat zo’n veld altijd tokenize=0 moet meekrijgen.

    • een facet wordt meestal op dezelfde manier berekend en aangeboden als een ander veld (tokenize=0!!). Desnoods worden van een bepaald attribuut 2 te indexeren velden gemaakt, 1 voor gewone opzoeking en 1 als facet.
    • 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).
    • als een facet een eigen datacollector heeft kan gewerkt worden met m4_getExploratorRecordFacet. Zie bvb. %Ixqcat^bacsorix (/acquisitie/application).
  • Lucene index

    moet een Lucene index aangemaakt worden

  • XML index

    moet een XML index aangemaakt worden

Streamtype van het type file = filefeeder
  • Path

    file die aan de indexsoftware moet aangeleverd worden, of directory waarvan alle files aangeleverd worden

  • Zebra index

    moet een Zebra index aangemaakt worden

Nachtelijk proces
Er bestaat een procman-proces standard.exploratorprocman. Dat overloopt alle bestaande indexers en voert uit wat hier aangevinkt staat. 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.

Lucene-specifieke parameters

naam index

naam van de directory waar de indexen terecht komen. Subdirectory van

r4_explorator_database_dir/lucene/index
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. StandardAnalyzer, issn:WhitespaceAnalyzer. Als niets ingevuld wordt, wordt SimpleAnalyzer gebruikt voor alle velden. WhitespaceAnalyzer en KeyboardAnalyzer 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).

BrocadeAnalyzer is een zelf ontwikkelde analyzer die met volgende argumenten kan aangesproken worden:

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

    • standard = StandardAnalyzer
    • simple = SimpleAnalyzer
    • whitespace = WhitespaceAnalyzer
    • brocadestring = maakt tokens zoals in M-indexen voor niet-persoonsnamen
    • brocadeauthor = maakt tokens zoals in M-indexen voor persoonsnamen
  • stop: yes (True) | stopwoordenset | no (False) (default)

    • yes = standaard Brocade stopwoordenset wordt gebruikt
    • no = geen stopwoorden
  • isolatin: yes (default indien niet brocadestring of brocadeauthor) | no

    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: 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.

  • experimenteel: ngram en browse

Waarschuwing

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.

Autosuggest-analyzer
de analyzers die moeten gebruikt worden voor opbouw en raadpleging van de autosuggest-index, gescheiden door “;”. Indien slechts 1 analyzer gegeven 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”.
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. 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. 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 highlighting functie in de searcher moet kunnen gebruikt worden. Van de velden waarvoor highlighting gewenst is worden extra gegevens in de index bewaard (positions, offsets). Tevens moet de inhoud in de index opgeslagen worden (store=1).
Uitvoeren na indexaanmaak
hier kan een M-expressie 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.
Index boost
hier wordt gespecificeerd welke velden een boost moeten krijgen op moment van indexeren. Let op, dit staat los van een boost die ook nog eens op het moment van zoeken kan meegegeven worden. Gebruik veldnaam:boostgetal;….
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.
Ranking
een ranking-identifier (of leeg voor de default relevance berekening). In een meta-informatie van de ranking kunnen een aantal parameters getweakt worden.

Indexen komen altijd terecht in

r4_explorator_database_dir

XML-specifieke parameters

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 terecht komen. 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

Zebra-specifieke parameters

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 terecht komen. 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.

37.3.2. Searchers

Een searcher definieert de parameters voor een zoekproces, dat wordt opgestart via het toolcat-commando explorator -search.

Naast de gebruikelijke omschrijvingsvelden kunnen volgende algemene velden ingevuld worden:

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
Zoekstring transformatie
als de index waarin gezocht wordt, opgebouwd is vanuit een M-indexreservoir, dan zijn eigenlijk M-hoofdvormen geïndexeerd. Een zoekstring moet dan ook eerst als dusdanig getransformeerd worden. mindex is momenteel de enige mogelijke waarde voor deze parameter (of blanco).

Lucene-specifieke parameters

Naam index
de naam van de te doorzoeken index
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 (gescheiden door ;). In dit laatste geval moet de naam van de analyzer voorafgegaan worden door veldnaam:, dus bvb. StandardAnalyzer;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. Wordt overruled door transformatie zoektermen zonder veldspecificatie.
Default operator
de default Lucene operator is OR. Dit kan hier gewijzigd worden in AND of NOT
Allow leading wildcard
wildcards vooraan in de zoekactie zijn default niet toegelaten. Opgelet hiermee, deze parameter opzetten kan serieuze vertragingen teweeg brengen 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 500 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)
Sortering
de naam van het veld waarop moet gesorteerd worden. Opgelet, dat veld moet geïndexeerd zijn met tokenize=0! Indien blank wordt gesorteerd op de Lucene relevance factor.
Extra velden ex databank
niet alle gegevens van een record worden in de Lucene-index opgeslagen. Indien de formatering van het zoekresultaat dergelijke gegevens verwacht dan kunnen deze via de in deze parameter gespecificeerde M-expressie opgehaald worden. De routine moet per record een PyMDict structuur opleveren via m4_pyMDict 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. Deze parameter kan een belangrijke rol spelen voor caching in de displayer
Default zoekstring
een zoekstring die met een AND-operator altijd geplakt wordt aan de ingegeven zoekstring
Transformatie zoektermen zonder veldspecificatie

alternatief voor 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

  • wanneer men de mogelijkheid van zoektermen zonder veldspecificatie (defaultfield) wil behouden, en toch gebruik maken van de boostfactor die aan bepaalde velden kan meegegeven worden. Als bij indexering aan het ti veld een hogere boostfactor wordt toegekend dan aan het au veld, dan zullen, in het aangehaalde voorbeeld en bij sortering op relevantie, records waarbij claus in de titel voorkomt, een hogere relevantie krijgen en dus bovenaan in het zoekresultaat verschijnen
  • indien men een defaultfield wil dat een verzameling is van velden die met verschillende analyzers worden geïndexeerd

Waarschuwing

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

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 dus via de placeholder explorator_highlight in de resultaattemplate geplaatst worden.
Tags
veldnamen die automatisch ingevuld worden door het indexeerproces maar hier een verwoording en zelfs een alias kunnen krijgen. De alias levert een alternatieve zoekstring. Een veld met naam ti en alias titel kan opgezocht worden met ti:universe en titel:universe.
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.3. 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.

Naast de gebruikelijke omschrijvingsvelden kunnen volgende algemene parameters ingevuld worden in de meta-informatie:

Datacollector
voor eventuele berekening van de facetwaarde.
Tag voor opzoeking
Hier dient de tag (veldnaam) ingevuld te worden waaronder de facetwaarde wordt aangeboden aan de indexer, 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.

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 searchers niet expliciet aan een set gekoppeld is

Searchers
lijst van searchers, gescheiden door ;, die met deze set werken
Benamingen
taalafhankelijke verwoordingen
Sortering
hoe de facetwaarden worden gepresenteerd, in volgorde van aantal documenten, alfabetisch of berekend via een M-routine
Berekening sortering

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

Er bestaat een routine die de 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)
Presentatie
routine die eventueel moet uitgevoerd worden om de displaywaarde van de facetwaarde te berekenen. Werkt met RDfacet en geeft berekende waarde in RDfacet terug.
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.4. Template

Templates dienen om het resultaat van een zoekactie te formatteren.

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. 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.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.

Naast de gebruikelijke omschrijvingsvelden kunnen volgende velden ingevuld worden:

Explorator searcher
welke searcher moet opgestart worden
M-exe voor header
dit is een header die geplaatst wordt boven de lijst met zoekresultaten en de ingevulde header van de gebruikte template overrulet. M-expressie die RDheader ter beschikking krijgt. De M-expressie kan RDheader eventueel veranderen en in dezelfde variabele teruggeven.
M-exe voor record

M-expressie die per gevonden record, RDrecord ter beschikking krijgt, d.i. het door de zoekactie ingevulde record-deel van de gebruikte template.

  • De M-expressie kan RDrecord veranderen en in dezelfde variabele teruggeven. Zo kan de door zoekactie en template aangeboden RDrecord enkel bestaan uit de loi, waarna de M-expressie van de displayer er een korte beschrijving van maakt.
  • Het resultaat van de M-expressie 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 footer
dit is een footer die geplaatst wordt onder de lijst met zoekresultaten en de ingevulde footer van de gebruikte template overrulet. M-expressie die RDfooter ter beschikking krijgt. De M-expressie kan RDfooter eventueel veranderen en in dezelfde variabele teruggeven.
HTML-code voor record-block
vaste HTML-blok die voor de zoekresultaten geplaatst wordt
HTML-code na record-block
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 groepswaarde krijgt in RDopcgrp, aantal documenten in de groep in RDopcgnr en 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
In te voegen header
html-code met header die bovenaan de pagina geplaatst wordt
Header enkel op startpagina
indien aangevinkt wordt de header niet getoond op het scherm met zoekresultaten
In te voegen footer
html-code met footer die onderaan de pagina geplaatst wordt
Footer enkel op startpagina
indien aangevinkt wordt de footer niet getoond op het scherm met zoekresultaten
Doorlinking zoekresultaten
de URL of menu-roepcode waarmee elk zoekresultaat moet omringd worden. Een URL kan <value> bevatten, dat dan vervangen wordt door RDvalue, berekend in de M-exe per record. Enkel het deel van RDrecord dat omgeven is door <url></url> wordt in de link geplaatst.
Doorlinken naar nieuw scherm
moet de link opgestart worden in een nieuw scherm

Een displayer kan rechtstreeks aangesproken worden door een menu-entry te maken met URL <mcgi routine="Entry:bexwshow">&RDdisp=*displayer-id*. De displayer toont dan in eerste instantie enkel het invulveld voor het zoekpatroon. Indien men dit invulveld in een andere applicatie wil inbedden kan de displayer van daaruit aangesproken worden met de macro m4_startExploratorDisplayer(id,pattern).

37.3.6. 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.

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.4. Daemon

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. Opgelet: 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 de 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 gecopieerd

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
                        -> obsolete vanaf 3.8 (alles werkt met TaxonomyWriter) Explorator.__resetfacets
                           -> lucenesearcher.facetdaemon (via Explorator.__ixtypes)
                              -> facetdb.makeindex (luceneID - recordID) in initdaemon indien index veranderd is
                     -> zet resetlock (blokkeer nieuwe zoekacties)
                     -> wacht tot uitstaande zoekacties afgehandeld zijn
                     -> begin met reset = Explorator.restart
                        -> Explorator.__resetdaemon
                           -> lucenesearcher.resetdaemon (via Explorator.__ixtypes)
                              -> obsolete vanaf 3.8 - nieuwe facetdb voor elke veranderde index (maakt gebruik van in lucenesearcher.facetdaemon berekende structuren)
                     -> 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

37.5. 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"):
    '''
    $editfile: /explorator/application/explorator.d
    $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("au::3","authorities")
    '''

    «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 het 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.6. Toolcatapplicatie explorator

37.6.1. Indexeren

37.6.1.1. Commando

explorator -index xmlfile | directory | Brocade indexer-id [type=indextype] \
[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] [daemon=yes|no] \
[trace=yes|no] [resume=yes|no|try] [browse=yes|no] [suggestonly=yes|no]

37.6.1.2. Verklaring

Indexen komen terecht in *registry.explorator-database-dir*/*indextype*/index/*indexnaam*, de bijhorende facetten in *registry.explorator-database-dir*/*indextype*/taxo/*indexnaam*

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

  • een identifier van een indexer. In dit geval zijn de modifiers type en options niet van toepassing omdat alle gegevens in de meta-informatie van de indexer vervat zitten
  • een xmlfile met vastgelegde structuur (zie explorator.dtd)
  • een textfile die dan als enige document geïndexeerd wordt. Textfiles 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:

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.
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.
daemon
yes = indexering verloopt via daemon indien deze draait (default voor updates). Full index verloopt nooit via daemon.
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
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.6.1.3. Werking

explorator -index instantieert de class indexer.Indexer. Deze 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 of filefeeder.Feeder gebruikt.

Indien records aangeleverd worden, wordt elk record omgezet in een inrecord.Record object. indexer.Indexer start dan de type-afhankelijke indexering via de class *indextype*indexer.Indexer.

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).

Alle routines staan in project /explorator/application.

37.6.2. Zoeken

37.6.2.1. Commando

explorator -search pattern [Brocade searcher-id] \
[start=start] [result=path] [type=indextype] [fieldtype=*fieldtag*:string|numeric|long|date] \
[facet=*facettags*] [lg=language] [transform=mindex|''] [template=path] \
[options="tag=value;..."] [browse=yes|no] [daemon=yes|no] [showfacets=yes|no]

37.6.2.2. Verklaring

Het eerste argument is een zoekpatroon. Een mogelijk 2de argument is een identifier van een Brocade searcher In dat geval zijn een aantal modifiers niet van toepassing omdat ze in de meta-info van de searcher vervat zitten.

Mogelijke modifiers zijn:

start
de startwaarde van de terug te geven records. Kan indextype afhankelijk zijn. In Lucene is dit een documentnummer
result
  • blank: plaats resultaten op stdout
  • pathnaam van bestand waarin resultaten terechtkomen
  • M_identifier: resultaten worden geplaatst in de databank onder ^ZEXPL(identifier). Deze optie wordt gebruikt door de displayers
lg
taal waarin l4_-constructies van template moeten vertaald worden (default N)
type
indexeertype. Momenteel enkel lucene. Niet nodig indien een searcher als 2de argument is opgegeven, want dan staat het indextype in de meta-informatie
fieldtype
fieldtag:string|numeric|long|date;..... Niet nodig indien een searcher als 2de argument is opgegeven is, want dan staan de fieldtypes in de meta-informatie
transform
mindex = transformeer naar arme karakterset | leeg. Niet nodig indien een searcher als 2de argument is opgegeven is, want dan staan het transformtype in de meta-informatie
facet
facettags, gescheiden door ;. Niet nodig indien een searcher als 2de argument is opgegeven is, want dan staan de facetten in de meta-informatie.
showfacets
no = toon geen facetten in het zoekresultaat (default yes)
template
pathname van file met template. Headergegevens moeten in de file tussen <explorator_header> en </explorator_header> staan, footergegevens tussen <explorator_footer> en </explorator_footer>, template voor elk record tussen <explorator_record> en /<explorator_record>. Niet nodig indien een searcher als 2de argument is opgegeven, want dan kunnen alle template-gegevens via de meta-informatie worden teruggevonden.
browse
yes = er wordt gezocht in de indextermen, niet in de documenten | no (default)
daemon
yes = zoeken verloopt via daemon indien deze draait (default) | no
options
dit is een tag=value;tag=value;... string. Mogelijke tags zijn afhankelijk van het indextype en staan opgesomd in de macro m4_getExploratorSearcherMetaData in /explorator/meta/searcher.d. Indien een searcher als 2de argument is opgegeven komen de opties uit de meta-informatie van deze searcher, maar ze kunnen overschreven worden door expliciet meegegeven opties.

37.6.2.3. Werking

explorator -search instantieert de class searcher.Searcher. Afhankelijk van het indextype wordt *indextype*searcher.Searcher aangesproken die alle gevraagde records in de desbetreffende index verzamelt. Elk record wordt omgezet in een outrecord.Record object.

Vervolgens wordt Formatter.formatter geïnstantieerd met het juiste template en de output-target. De close method van dit formatter-object schrijft alles op de gevraagde output.

Alle routines staan in project /explorator/application.

37.6.3. Daemon

37.6.3.1. Commando

explorator -daemon start | stop | run | reset | status | workload | test

37.6.3.2. Verklaring

Het eerste argument is de actie die moet uitgevoerd worden

start

start de daemon als een afzonderlijk proces.

Mogelijke modifiers:

port
default 11111
threads
maximum aantal threads (default 10)
reset
minimum aantal seconden alvorens een automatische reset wordt uitgevoerd. Default=0 (geen automatische reset)
wupdate
minimum aantal seconden voor scanning van update global of directory. Default=120
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.
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.
stop
stop het daemon proces
restart
stop, gevolgd door start
reset
daemon wordt opnieuw geïnitialiseerd, alle resetdaemon functies in [ixtype]indexer.py en ixtype]searcher.py worden uitgevoerd. Hiermee kunnen Lucene updates zichtbaar gemaakt worden voor de daemon.
status
toon statusinformatie van de daemon
statusix
test of daemon is opgestart met indexers
workload

aantal zoekopdrachten van dag x tot dag y, opgesplitst per searcher.

Mogelijke modifiers:

begin
startdatum in formaat mm/dd/yyyy
end
einddatum in formaat mm/dd/yyyy
pattern
zoekpatroon in logfilelijnen
show
yes = toon gevonden lijnen | no (default)
test

hiermee kan een testset aangemaakt worden waarmee de server kan gevoed worden. Op het einde wordt een performantierapport gegenereerd

Mogelijke modifiers:

collect
yes = verzamel testdata via de Brocade-indexer gespecificeerd in modifier id. no = gebruik de testdata die staan registry_explorator_process_dir/daemon/test
id
Brocade indexer identifier wiens datagenerator de testset moet leveren en wiens index zal ondervraagd worden
run
yes = start de test. Resultaten komen in registry_explorator_process_dir/daemon/test (.csv, .txt en .html files). De .html file wordt bovendien naar de webomgeving gecopieerd registry_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 100000)