Indem Sie bei der Indexerstellung jedem Dokument Standortinformationen (Breiten- und Längengrad) hinzufügen, können Sie bei der Suche nach dem Abstand von einem angegebenen Punkt filtern.
Übersicht
Bei der standortbasierten Suche werden nur Dokumente in die Suchergebnisse aufgenommen, die sich innerhalb eines Radius um einen angegebenen Punkt (Breiten- und Längengrad) befinden. Diese Einschränkung wird als Filter mithilfe einer geo_distance-Abfrage von OpenSearch angewendet und wirkt sich daher nicht auf die Bewertung (Relevanz) aus. Zudem wird eine Sortierung nach Entfernung nicht unterstützt.
Das Feld, in dem die Standortinformationen gespeichert werden, muss im OpenSearch-Mapping als Typ geo_point definiert sein. Standardmäßig ist das Feld location als Typ geo_point vorbereitet. Da jedoch standardmäßig kein Mechanismus zum Speichern von Werten im Feld location bereitgestellt wird, müssen Sie die Standortinformationen selbst hinterlegen, etwa über die Feldzuordnung beim Data-Store-Crawling, per Skript oder über die API zum Registrieren von Dokumenten in der Suchmaschine.
Verwendung
Die standortbasierte Suche wird angegeben, indem Sie der Suchanfrage die folgenden Parameter hinzufügen. Standardmäßig ist sie für das Feld location verfügbar.
| Parameter | Beschreibung |
|---|---|
geo.<fieldname>.point | Geben Sie Breiten- und Längengrad des Mittelpunkts im Format Breitengrad,Längengrad an. Die Werte sind Dezimalgrad (Typ Double); geben Sie zwei durch Komma getrennte Zahlen an. Beispiel: 35.681236,139.767125 |
geo.<fieldname>.distance | Geben Sie die Entfernung (den Radius) vom Mittelpunkt an. Beispiel: 10km |
Tabelle: Anfrageparameter
Für <fieldname> geben Sie den Namen des Feldes an, in dem die Standortinformationen gespeichert sind. Angegeben werden können nur Felder, die in query.geo.fields registriert sind; standardmäßig ist dies location. Um ein anderes Feld zu verwenden, mappen Sie es als Typ geo_point und fügen Sie es durch Komma getrennt in query.geo.fields in fess_config.properties hinzu.
Um beispielsweise Dokumente innerhalb eines Radius von 10 km um den Punkt mit Breitengrad 35.681236 und Längengrad 139.767125 (in der Nähe des Bahnhofs Tokio) zu suchen, fügen Sie der Suchanfrage die folgenden Parameter hinzu.
Entfernungseinheiten
Der Wert von geo.<fieldname>.distance wird als Entfernungseinheit von OpenSearch interpretiert. Neben km (Kilometer) können unter anderem mm, cm, m, in, ft, yd, mi (Meilen) und nmi (Seemeilen) verwendet werden. Wird die Einheit weggelassen und nur eine Zahl angegeben, wird diese als Meter interpretiert (Beispiel: 500 entspricht 500 Metern).
Mehrfachangabe
Wenn Sie für dasselbe Feld mehrere
geo.<fieldname>.point-Werte angeben, werden Dokumente gesucht, die sich innerhalb des Radius mindestens eines der Punkte befinden (ODER-Bedingung).Wenn Sie für unterschiedliche Felder jeweils Standortinformationen angeben, werden Dokumente gesucht, die alle Bedingungen erfüllen (UND-Bedingung).
Bemerkung
geo.<fieldname>.point und geo.<fieldname>.distance müssen beide angegeben werden. Wird distance nicht angegeben, wird die Bedingung für dieses point ignoriert. Zudem tritt ein Fehler auf, wenn der Wert von point nicht dem Format Breitengrad,Längengrad (zwei durch Komma getrennte Zahlen) entspricht oder nicht als Zahl interpretiert werden kann.