Diese Anleitung soll zeigen, wie sich die Suche von GeoNetwork um ein Suchwort oder einen Suchbegriff erweitern lässt.
Sie kann auch dazu verwendet werden, den Lucene-Index auf wenige Suchwörter einzuschränken. Dies führt zu einer schnelleren Index-Generierung und ermöglicht, GeoNetwork mit einer größeren Anzahl von Metadaten zu betreiben.
Das folgende Verfahren wurde mit GeoNetwork 2.6.0 RC2 erprobt.
Aufbau des Lucene-Index
Der Lucene-Index von GeoNetwork kann in drei Gruppen zerlegt werden:
Felder für die Suche nach Metadaten | any, title, abstract, … |
Felder für Listen (Autocomplete) | _title, _abstract, … |
Felder für (GeoNetwork) interne Zwecke | _op1, _op2, … |
Aufbau des Lucene-Index
Der Lucene-Index von GeoNetwork kann in drei Gruppen zerlegt werden:
Felder für die Suche nach Metadaten |
any, title, abstract, … |
Felder für Listen (Autocomplete) |
_title, _abstract, … |
Felder für interne Zwecke von GeoNetwork |
_op1, op2, … |
Konfiguration des Lucene-Index
Die Konfigurationsdatei gibt an, welche Metadatenelemente indexiert werden sollen.
/geonetwork/web/geonetwork/xml/schemas/iso19139/index-fields.xsl
Das folgende Beispiel zeigt, wie das Metadatenfeld „Metadaten-Standard-Name“ als zusätzliches Feld in die Indexierung aufgenommen werden kann. Das Lucene-Feld erhält den Namen __standardName.
<xsl:for-each select="gmd:metadataStandardName/gco:CharacterString"> <Field name="__standardName" string="{string(.)}" store="true" index="true" token="true"/> </xsl:for-each>
Einstellungen für die Indexierung
store | Zusätzliche Abspeicherung des Originalwertes |
index | Ermöglicht das Durchsuchen des Feldes (i. d. R. immer true) |
token | Zerlegung des Begriffs in so genannte Tokens (Wortteile – siehe Beispiel unten) Felder: zerlegt in Token: • ermöglichen eine freie Suche • ignorieren Groß- und Kleinschreibung • Beispiele: Any, Titel, Kurzfassung, … Felder: nicht zerlegt in Token • benötigen die exakte Schreibweise bei der Suche • unterscheiden Groß- und Kleinschreibung • ideal für Autocomplete-Listen • Beispiele: Schlüsselwörter, ISO-Themen , … |
Aufbau des Lucene-Index
Der Lucene-Index von GeoNetwork kann in drei Gruppen zerlegt werden:
Felder für die Suche nach Metadaten |
any, title, abstract, … |
Felder für Listen (Autocomplete) |
_title, _abstract, … |
Felder für interne Zwecke von GeoNetwork |
_op1, op2, … |
break
Ansicht des Feldes __standardName nicht zerlegt in Token
Bei allen fünf Beispieldatensätzen von GeoNetwork wurde der gleiche Metadatenstandard eingetragen: ISO 19115:2003/19139. Bei diesem Feld (nicht tokenized) wäre nur eine Suche nach exakt diesem String erfolgreich.
break
Ansicht des Feldes __standardName zerlegt in Token
Wird das Feld mit der Einstellung token=“true“ erzeugt, zerlegt der Tokenizer den obigen String in:
"iso", "19115", "2003/19139"
Somit wäre eine Suche nach einem Standard-Namen mit dem Suchbegriff „iso“ beispielsweise erfolgreich.
break
Mapping Lucene-Index CSW-Schnittstelle
Um das neue Lucene-Index-Feld per CSW Schnittstelle (Catalogue-Service-Web) durchsuchen zu können, muss noch eine Verknüpfung zwischen dem Lucene-Feld und einem CSW-Queryable hergerstellt werden.
Das Mapping zwischen CSW-Queryables und den Feldern im Lucene-Index erfolgt über die Datei:
/geonetwork/WEB-INF/config-csw.xml
Hinzufügen des Feldes __standardName als zusätzliches Suchfeld (AdditionalQueryable)
<parameter name="StandardName" field="__standardName" type="AdditionalQueryables" />
Mit folgendem CSW-GetRecords-Request lässt sich das Feld StandardName (Einstellung token=true) durchsuchen:
<?xml version="1.0" encoding="UTF-8"?> <GetRecords xmlns="http://www.opengis.net/cat/csw/2.0.2" xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:dct="http://purl.org/dc/terms/" xmlns:gml="http://www.opengis.net/gml" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" service="CSW" version="2.0.2" maxRecords="50" startPosition="1" resultType="results" outputFormat="application/xml" outputSchema="csw:IsoRecord" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd"> <Query typeNames="gmd:MD_Metadata"> <ElementSetName typeNames="csw:IsoRecord">full</ElementSetName> <Constraint version="1.1.0"> <ogc:Filter> <ogc:PropertyIsLike escapeChar="\" singleChar="?" wildCard="*"> <ogc:PropertyName>StandardName</ogc:PropertyName> <ogc:Literal>iso</ogc:Literal> </ogc:PropertyIsLike> </ogc:Filter> </Constraint> </Query> </GetRecords>
Für Fragen oder Anregungen bitte die Kommentarfunktion benutzen!