Indexierung von ArcGIS Server Layern

smart.finder ermöglicht es Ihnen, Layer eines ArcGIS Feature- oder Kartenservice zu indexieren. Hierzu müssen Sie das Indexierungsschema anpassen, sowie eine Abbildung der Attribute eines Feature-Types in das Schema erstellen. Das folgende Beispiel zeigt Ihnen die notwendigen Schritte.

smart.finder Server wird mit einem vorkonfigurierten ArcGIS Feature-Service Setup ausgeliefert. Dieses besteht aus:

  • Einem Solr Core mit vorkonfiguriertem Schema (smartsearch)

  • Einer Beispiel-App namens full-screen-map-multicore

Sowohl das Indexierungsschema als auch die Layer-Konfiguration sind bereits für das Indexieren eines Layers Points of Interest in Münster mit insgesamt 18739 Features vorbereitet. Sie können dieses Beispiel als Blaupause für die Einrichtung weiterer Layer benutzen. Die folgenden Abschnitte erläutert im Einzelnen, was hierfür zu tun ist.

Datenbasis

Nehmen wir an, dass Sie ein Layer für Points of Interest in Münster indexieren wollen. Ein Feature dieses Layers hat folgende Felder:

  • FID (type: esriFieldTypeOID, alias: FID, SQL Type: sqlTypeOther, length: 0, nullable: false, editable: false)

  • osm_id (type: esriFieldTypeString, alias: osm_id, SQL Type: sqlTypeOther, length: 10, nullable: true, editable: true)

  • code (type: esriFieldTypeSmallInteger, alias: code, SQL Type: sqlTypeOther, nullable: true, editable: true)

  • fclass (type: esriFieldTypeString, alias: fclass, SQL Type: sqlTypeOther, length: 28, nullable: true, editable: true)

  • name (type: esriFieldTypeString, alias: name, SQL Type: sqlTypeOther, length: 100, nullable: true, editable: true)

  • Shape__Area (type: esriFieldTypeDouble, alias: Shape__Area, SQL Type: sqlTypeDouble, nullable: true, editable: false)

  • Shape__Length (type: esriFieldTypeDouble, alias: Shape__Length, SQL Type: sqlTypeDouble, nullable: true, editable: false)

Die Felder osm_id, code und name sollen bei der Indexierung der Features berücksichtigt werden.

Anpassung des Schemas

smart.finder wird mit einem vorkonfigurierten Core für diesen Anwendungsfall ausgeliefert. Der smartsearch Core liegt im Verzeichnis solr.home:

/ct-finder-server-webapp-2.1.0/WEB-INF/solr.home/smartsearch

smartsearch schema.xml
<fields>
    <field name="identifier" type="string"   indexed="true" stored="true" required="false" multiValued="true"/>
    <field name="title" type="text"     indexed="true" stored="true" required="false" multiValued="false"/>
    <field name="layer" type="text"     indexed="true" stored="true" required="false" multiValued="false"/>
    [...]
    <field name="poi_name" type="text"   indexed="true" stored="true" required="false" multiValued="false"/>
    <field name="poi_code" type="text"   indexed="true" stored="true" required="false" multiValued="false"/>

    <!-- copy to search field -->
    <copyField source="identifier" dest="full_text"/>
    <copyField source="title" dest="full_text"/>
    <copyField source="layer" dest="full_text"/>
    <copyField source="poi_name" dest="full_text"/>
    <copyField source="poi_code" dest="full_text"/>
    [...]
</fields>

Folgende Felder sind verpflichtend im Smart Search Schema:

layer

Speichert den Namen des indexierten Layers

title

Explizite Darstellung der Suchergebnisse genutzt wird

Sie können weitere Felder je nach indexierten ArcGIS Service Layer synonym zum o.g. Vorgehen hinzufügen.

Verknüpfung Layer/Schema

Die Verknüpfung zwischen den Feldern des Layers und dem Schema wird durch die Datei /ct-finder-server-webapp-2.1.0/WEB-INF/classes/spring-feature-layer-config.xml hergestellt. Das bereits existierende (und lauffähige) Beispiel zeigt Ihnen, wie Sie die Namen der Felder des Layers auf die Felder des Schemas abbilden müssen. Zur Erstellung einer neuen Layer-Konfiguration kopieren Sie das existierende Beispiel, fügen es in eine neue Datei ein und passen es dann Ihren Anforderungen entsprechend an.

Erstellen einer neuen Layer-Konfiguration
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
    <util:list id="layerConfigurations">
        <!-- Configuration for indexing feature layer with id 0 -->
        <bean class="de.conterra.finder.api.arcgis.arcgisserver.LayerConfiguration" name="layerConfigurationFederalStates">
            [...]
        </bean>
        <!-- Configuration of new custom layer -->
        <bean class="de.conterra.finder.api.arcgis.arcgisserver.LayerConfiguration" name="layerCustomFeatureServer">
            [...]
        </bean>
    </util:list>
</beans>

Folgende Einstellungen können Sie für den Feature-Service oder Kartenservice Layer vornehmen:

name (erforderlich)

Eindeutiger Name der Layerkonfiguration.

Beispiel:

<bean class="de.[...].LayerConfiguration" name="<NAME_DER_KONFIGURATION>"> [...] </bean>
arcGISServerUrl (erforderlich)

URL auf den Layer des ArcGIS Feature- oder Kartenservice.

id (erforderlich)

ID des Layers.

descriptiveName

Beschreibender Name des Layers.

Dieser wird genutzt, um die Kategorien der Suchtreffer anzuzeigen.

pageSize

Maximale Anzahl angefragter Features pro Request gegen den Layer.

Wenn dieser Wert nicht gesetzt ist, wird der global für den Indexierungsservice arcgisServerContentIndexingService konfigurierte Wert aus der Datei /ct-finder-server-webapp-2.1.0/WEB-INF/classes/spring-indexing-config.xml verwendet.

indexedFieldsToSchemaMapping (erforderlich)

Abbildung der Felder des Schemas auf die Felder des Layers.

Das generelle Schema ist: <entry key="<NAME_DES_FELDES_IM_LAYER>" value="<NAME_DES_FELDES_IM_SCHEMA>"/>

Beispiel:

<property name="indexedFieldsToSchemaMapping">
    <map>
        <entry key="osm_id" value="identifier"/>
        <entry key="code" value="poi_code"/>
        <entry key="name" value="poi_name"/>
    </map>
</property>

Die Felder osm_id, code und name sind Attribute des Feature-Layers, die korrespondierenden Felder identifier, poi_code und poi_name sind die Felder des Schemas, in die die Werte indexiert werden.

titleFields (erforderlich)

Aussehen des Titelfelds.

Dieses wird verwendet, um die Treffer in der Suchbox anzuzeigen.

Wenn Sie für ein Feature mit name="Strassen" und code="0428" einen Title erzeugen wollen, der - Strassen (0428) lautet, erzeugen Sie folgende Konfiguration:

 <property name="titleFields">
    <list>
        <bean class="de.conterra.finder.api.arcgis.arcgisserver.TitleField">
            <property name="name" value="name"/>
            <property name="postDelimiter" value=" ("/>
            <property name="preDelimiter" value="- "/>
        </bean>
        <bean class="de.conterra.finder.api.arcgis.arcgisserver.TitleField">
            <property name="name" value="code"/>
            <property name="postDelimiter" value=")"/>
        </bean>
    </list>
</property>

Nutzen Sie die Properties postDelimiter und preDelimiter, um den finalen Titel zu erzeugen.

indexGeometry

Legt fest, ob die Geometry eines Features indexiert werden soll.

Standardwert: true

translateDomainValues

Legt fest, ob existierende Domain-Werte von Features als Namen im Index berücksichtigt werden sollen.

Bei false wird lediglich der Code eines Feldes übernommen.

Standardwert: false

Indexierung des Layers

Um den Layer zu indexieren, müssen Sie im Job-Manager einen Indexierungsjob für eine Ressource vom Typ URL anlegen.

Die URL dieses Jobs zeigt auf den Feature-Service Layer, den Sie zuvor in der Layer-Konfiguration definiert haben. Bezogen auf diese lautet die URL: <arcGISServerUrl>/<id>.

Nach dem Start des Jobs werden die Felder des Layer entsprechend der Konfiguration indexiert.

Falls der Feature-Layer den Fehler-Code Error: Error performing query operation während der Indexierung zurückgibt, ist es möglich, dass die Heap-Size der SOCs im ArcGIS Server zu gering ist, um die Feature-Response komplett bereitzustellen.

Sie können das auf zwei verschiedene Wege lösen:

Ergebnis der Indexierung

  1. Um die Ergebnisse zu sehen, öffnen Sie die Beispielapp: https://<yourserver>/ct-finder-client-webapp-2.1/?lang=de&app=full-screen-map-multicore.

  2. Wählen Sie den smart search Core:

    map.app Smart Search Core Auswahl
  3. Nach Eingabe des Suchbegriffs Schule stellt sich das Suchergebnis wie folgt dar:

    Suchergebnis
  4. Ein Klick auf ein Suchergebnis in der Liste zeigt das Feature in der Karte an.