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 respectievelijktxtfeeder.py
,xmlfeeder.py
,mfeeder.py
ofpluginfeeder.py
aangesproken, die de records afleveren aanluceneindexer.py
voor de aanmaak van Lucene indexen ofxmlindexer.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 functierecord
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 vanfieldtag:numeric|long|date|string
gescheiden door;
.Het default fieldtype isstring
. Andere mogelijkheden zijnnumeric
,long
endate
. 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 velduniqueid
(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 metm4_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 eenprefix:pattern
zoekpatroon, dan is hettokenize
subscript van de datagenerator wel van belang en moet hetindex
subscript op1
staan, wat default zo is. In het andere geval kan de datagenerator subscriptindex=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
ofVolledige 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 voorexplorator 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/indexWarning
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 doorveldnaam:
, dus bvb.issn:WhitespaceAnalyzer
.Als niets ingevuld wordt, wordtSimpleAnalyzer
gebruikt voor alle velden.WhitespaceAnalyzer
enKeywordAnalyzer
kunnen eventueel aangevuld worden met|lowercase
omdat deze analyzers de input niet omzetten naar lowercase. Overigens is deze constructie hetzelfde als rechtstreeksWhitespaceAnalyzerLowercase
invullen of zelfsBrocadeAnalyzer(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 makenstop:
yes (True) | stopwoordenset | no (False) (default)
yes
= standaard Brocade stopwoordenset wordt gebruikt
no
= geen stopwoordenWarning
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 hetsortrank
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/ofirua
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
enmt:rankdomain
. Zie ook parameter Ranking context. Hier kan eenmt: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 vantg:lhbr
LOI's worden in de index geplaatst onderbr*prefix*
enlh*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 demt:expindexer
identifier van de aanleverende explorator indexer. De M-executable krijgtRDvalue
ter beschikking en moet een gewijzigdeRDvalue
teruggeven. Dex
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
enorder
opgestart worden en de daar gegenereerde prefixau
getransponeerd wordt naarcreator
. 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 metRDloi
en levert een numerieke arrayRAfacet(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 alsNumericField
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 doormfeeder.py
, wordtindextools.getWordsBrocadeString
ofindextools.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 deBrocadeAnalyzer
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 macrom4_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 veldpath
voor de pathnaampath 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
offile
. 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 dienslastrun
parameterdate: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 eenmdate
attribuut ingevuld zijn met de laatste datum van wijziging. Indien geenmdate
attribuut is ingevuld wordt het record geïndexeerd. Bij het overlopen van een directory wordt naar demodification 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 wordtRDrecord
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 telkensRDrecord
aangeleverd.
- delete
indien
yes
worden alle aangeleverde items verwijderd uit de index. Zet automatischupdate
opyes
.- append
no
: default. Een nieuwe index wordt aangemaakt tenzijupdate
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 vantoolcat
, vandaaredaemon
.- 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 opyes
gezet. Indien geen trace gevonden wordt gebeurt er verder niets (zietry
). Opgelet: niet vergetentrace
ook terug opyes
te zetten indien later een volgenderesume
moet uitgevoerd worden.no
: default.try
: er wordt geprobeerd een resume uit te voeren. Indien geen trace gevonden wordt begint indexering opnieuw metresume=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 variabeleRDsuggst=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 classindexer.Indexer
.- De indexer gaat
feeder.Feeder
aanspreken om de te indexeren records of files binnen te krijgen.Afhankelijk van de gespecificeerde source wordtmfeeder.Feeder
,xmlfeeder.Feeder
,txtfeeder.Feeder
,pluginfeeder.Feeder
offilefeeder.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 metm4_exploratorIndexVersion
explorator_creator
: maker van de index, meestal eenmt:expindexer
identifier. Kan gelezen worden metm4_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 functierecord
,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.
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 isstring
. Andere mogelijkheden zijnnumeric
,long
endate
. 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 deBrocadeAnalyzer
, 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, wordtSimpleAnalyzer
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 inAND
ofNOT
. Voor praktisch alle Brocade toepassingen wordt ervan uitgegaan dat de default operatorAND
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
enmt: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 ofwelrelevance
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 variabeleRDuniq
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 typeexpdsrch
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 zoekstringclaus 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 veldhighlight
aan het resultaat toegevoegd en kan via de placeholderexplorator_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 aliastitel
opgezocht worden metti:universe
entitel: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 optieBerekend
van het veldSortering
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 inRDfacet
terug. IndienRDfacet
leeg is, wordt er geen facet getoond (ook geen witregel). Rechtstreekse vertalingen inVertalingen 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 documentEXPLORATOR_NXTDOC
: de indexaanduiding van het volgende documentEXPLORATOR_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 dieRDheader
ter beschikking krijgt. De M-executable kanRDheader
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
: deuniqueid
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 aangebodenRDrecord
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
ofRDrecord(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 zoalsRDrecord
kan ookRDvalue
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 dieRDfooter
ter beschikking krijgt. De M-executable kanRDfooter
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. indexscope
in Lucene vertaald door een aanvulling van de zoekstring metscope:*optie*
.
- Facetten
opsomming in volgorde van te tonen facetten
- Groepshoofding
M-exe die de groepswaarde krijgt in
RDopcgrp
, het aantal documenten in de groep inRDopcgnr
en het resultaat teruggeeft inRDopcghd
- CSS
invulling van de css-rules. Volgende css-classes zijn standaard van toepassing:
explorator_banner
: header/footer van de pagina, zoals ingevuld inIn 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 metRDheader
explorator_footer
: blok metRDfooter
explorator_record
: 1 zoekresultaat
explorator_noresults
: blok met aankondiging dat er geen zoekresultaten zijn
- Doorlinking zoekresultaten
de URL of menu-roepcode of displaysysteem-id (omgeven door
<explorator></explorator>
) waarmee elk zoekresultaat moet omringd worden. Een URL kan<value>
bevatten, dat dan vervangen wordt doorRDvalue
, berekend in de M-exe per record. Enkel het deel vanRDrecord
dat omgeven is door<url></url>
wordt in de link geplaatst.Indien het resultaat van een zoekactie een mix van LOI's is, kan de link per LOI gespecificeerd worden door hem te laten voorafgaan door
loi-id:
, bvb.q:/menu/order/UDrecord=<value>
.
- Doorlinken naar nieuw scherm
moet de link opgestart worden in een nieuw scherm
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 waarinm4_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.3.2.4. Toolcat explorator search
37.3.2.4.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] [edaemon=yes|no] [showfacets=yes|no]
37.3.2.4.2. Verklaring
Het eerste argument is een zoekpatroon. Een mogelijk tweede argument is een mt:expsearcher identifier. In dat geval zijn een aantal modifiers niet van toepassing omdat ze in de meta-info van de searcher vervat zitten.
Mogelijke modifiers zijn:
- api
wordt de functie aangesproken via een api (default false)
- 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("id",identifier). Deze optie wordt gebruikt door de displayers en opacs.
- 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
transformeert een zoekstring naar een M-index-hoofdvorm-structuur | 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 (defaultyes
)- 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
experimenteel
yes
= er wordt gezocht in de indextermen, niet in de documenten |no
(default)- edaemon
yes
= zoeken verloopt via daemon indien deze draait (default) |no
Note
Modifier
daemon
is een dedicated modifier vantoolcat
, vandaaredaemon
.- options
dit is een
tag=value;tag=value;...
string. Mogelijke tags zijn afhankelijk van het indextype en staan opgesomd in de macrom4_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.3.2.4.3. Werking en routines
explorator search
instantieert de class searcher.Searcher
. Deze transformeert in eerste instantie de het opgegeven zoekpatroon.
In principe wordt, afhankelijk van het indextype, *indextype*searcher.Searcher
aangesproken die alle gevraagde records in de desbetreffende index verzamelt.
De searcher levert outrecord.Record
en outrecord.Facet
objecten af.
Deze worden aan een formatter.Formatter
instance doorgespeeld die ze formatteert volgens het meegegeven mt:exptemplate
meta-object. De close
method van dit formatter-object geeft het resultaat door aan een formatter.Output
instance, die het resultaat op het gewenste output kanaal schrijft.
In de praktijk is enkel zoeken via Lucene uitgewerkt. Voor zoeken in Zebra indexen zijn Z39.50 en/of SRU/SRW clients nodig.
Note
Alle routines staan in project /explorator/application
.
Globale zoekroutine
- searcher.py
overkoepelende zoekklasse die de type-specifieke zoekroutine opstart
Type-specifieke zoekroutines
- lucenesearcher.py
lucene zoekactie
Lucene facetroutine
- lucenefaceter.py
afhandeling van opvraging (en indexering) van gewenste facetten
Lucene parser routines
- luceneanalyzer.py
bepaling van de te gebruiken analyzer en implementatie van
BrocadeAnalyzer
- lucenecustom.py
query parser
Formatter routines
- formatter.py
algemene routine voor formattering van de gevonden records
- outrecord.py
interne structuur waar elk gevonden record naar herleid wordt
37.3.2.4.4. Wat te doen bij zoekproblemen?
Als een bepaald record in een zoekactie verwacht, maar niet teruggevonden wordt:
controleer of indexer en searcher dezelfde analyzers gebruiken voor dezelfde velden.
Warning
Denk eraan dat
tokenize=0
voor een bepaald prefix in de datagenerator van de indexer, overeenkomt met het definiëren vanprefix:KeywordAnalyzer
in de analyzerlijst van de indexer, maar dit laatste niet strikt noodzakelijk maakt, terwijl het wel noodzakelijk is in de analyzerlijst van de searcher!check aanwezigheid en structuur van het record in de Lucene index via toolcat-commando
explorator tokens
bekijk de mogelijk transformatie van de zoekstring. Hiervoor kan je macro
m4_parseExploratorStringEntry
gebruikenindien geen zoekstringtransformatie gebeurt, controleer in de searcher welk default zoekveld er eventueel gebruikt wordt
controleer de searcher op het eventueel aanplakken van een default zoekstring
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. Metdebug=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 functiestartdaemon
(on startup) enstopdaemon
(on shutdown) uit in[ixtype]indexer.py
. Default =yes
. Zie hier voor verdere specificatie.- searchers
yes
= voer functiestartdaemon
(on startup) enstopdaemon
(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
no
= gebruik de testdata die staan inr4_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 inr4_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
bepaaltgroup
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/indexDit 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.