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
:
/smartfinder-search/WEB-INF/solr.home/smartsearch
<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 /smartfinder-search/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.
<?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/smartfinder-search/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
undname
sind Attribute des Feature-Layers, die korrespondierenden Felderidentifier
,poi_code
undpoi_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"
undcode="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
undpreDelimiter
, 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>
.
Für das vorgefertigte Beispiel lautet die URL: https://services.arcgis.com/ObdAEOfl1Z5LP2D0/arcgis/rest/services/poi_muenster_WFL1/FeatureServer/0
Nach dem Start des Jobs werden die Felder des Layer entsprechend der Konfiguration indexiert.
Falls der Feature-Layer den Fehler-Code Sie können das auf zwei verschiedene Wege lösen:
|
Ergebnis der Indexierung
-
Um die Ergebnisse zu sehen, öffnen Sie die Beispielapp:
https://<yourserver>/smartfinder/?lang=de&app=full-screen-map-multicore
. -
Wählen Sie den smart search Core:
-
Nach Eingabe des Suchbegriffs
Schule
stellt sich das Suchergebnis wie folgt dar: -
Ein Klick auf ein Suchergebnis in der Liste zeigt das Feature in der Karte an.