Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verwende ich PHP Elasticsearch, um eine standortbasierte Suchfunktion zu implementieren?

Wie verwende ich PHP Elasticsearch, um eine standortbasierte Suchfunktion zu implementieren?

WBOY
WBOYOriginal
2023-09-13 08:29:001332Durchsuche

如何利用php Elasticsearch实现基于地理位置的搜索功能?

Wie verwende ich PHP Elasticsearch, um eine standortbasierte Suchfunktion zu implementieren?

1. Einführung
Mit der Entwicklung des Internets müssen immer mehr Websites und Anwendungen Suchfunktionen basierend auf dem geografischen Standort implementieren. Beispielsweise muss eine Restaurant-Bestellplattform nahe gelegene Restaurants basierend auf dem aktuellen Standort des Benutzers anzeigen; eine Reise-Website muss nahegelegene Sehenswürdigkeiten basierend auf dem Startpunkt des Benutzers anzeigen; eine Kartennavigationsanwendung muss umliegende Parkplätze basierend auf dem Ziel des Benutzers anzeigen; usw. warten. Der Schlüssel zum Erreichen dieser Funktionalität ist die Fähigkeit, basierend auf geografischen Standortinformationen effizient zu suchen und zu sortieren.

Elasticsearch ist eine Open-Source-Suchmaschine, die leistungsstarke Volltextsuch- und Analysefunktionen durch invertierte Index- und verteilte Suchtechnologie bietet. Es verfügt über eine integrierte Suchfunktion für geografische Standorte, mit der anhand von Breiten- und Längenkoordinaten nach Punkten in der Nähe gesucht werden kann.

2. Vorbereitung

  1. Elasticsearch installieren
    Zunächst müssen Sie Elasticsearch auf dem Server installieren. Sie können die offizielle Website besuchen, um die neueste Version von Elasticsearch herunterzuladen und zu installieren.
  2. Installieren Sie die PHP Elasticsearch-Clientbibliothek
    Die PHP Elasticsearch-Clientbibliothek ist ein Tool zur Interaktion mit Elasticsearch. Mit Composer können Sie den folgenden Befehl installieren und ausführen:

    composer require elasticsearch/elasticsearch

3. Index und Mapping erstellen
Bevor Sie mit der Suche beginnen, müssen Sie zunächst den Index erstellen und das Mapping einrichten.

  1. Index erstellen
    Verwenden Sie die von Elasticsearch bereitgestellte PHP-Client-Bibliothek, um einen Index zu erstellen. Der Beispielcode lautet wie folgt:

    require 'vendor/autoload.php';
    
    $client = ElasticsearchClientBuilder::create()->build();
    $params = [
        'index' => 'geolocation',
        'body'  => [
            'settings' => [
                'index' => [
                    'number_of_shards'   => 1,
                    'number_of_replicas' => 0,
                ],
            ],
        ],
    ];
    
    $response = $client->indices()->create($params);
  2. Zuordnung einrichten
    Bevor Sie Dokumente zum Index hinzufügen, müssen Sie die Zuordnung definieren von Feldtypen und Attributen. Hier müssen wir eine Geolocation-Zuordnung für das Geolocation-Feld hinzufügen. Der Beispielcode lautet wie folgt:

    $params = [
        'index' => 'geolocation',
        'body'  => [
            'mappings' => [
                'properties' => [
                    'location' => [
                        'type'       => 'geo_point',
                        'lat_lon'    => true,
                        'geohash'    => true,
                        'geohash_precision' => 5
                    ],
                ],
            ],
        ],
    ];
    
    $response = $client->indices()->putMapping($params);

4. Dokumente hinzufügen
Mit der PHP-Clientbibliothek von Elasticsearch können Sie Dokumente zum Index hinzufügen, indem Sie die folgenden Schritte ausführen.

  1. Erhalten Sie die Breiten- und Längenkoordinaten.
    Bevor Sie ein Dokument hinzufügen, müssen Sie die Breiten- und Längenkoordinaten des Standorts abrufen. Sie können Geokodierungsbibliotheken von Drittanbietern wie Geocode.xyz oder MapQuest verwenden.
  2. Dokumente hinzufügen
    Verwenden Sie die PHP-Clientbibliothek von Elasticsearch, um den Namen sowie die Breiten- und Längenkoordinaten des Ortes zum Index hinzuzufügen. Der Beispielcode lautet wie folgt:

    $params = [
        'index' => 'geolocation',
        'id'    => 1,
        'body'  => [
            'location' => [
                'lat' => 40.7128,
                'lon' => -74.0060,
            ],
            'name' => 'New York City',
        ],
    ];
    
    $response = $client->index($params);

5. Suche basierend auf dem geografischen Standort
Durch Festlegen von Suchabfrageparametern können Sie basierend auf dem geografischen Standort suchen.

  1. Suchparameter festlegen

    $params = [
        'index' => 'geolocation',
        'body'  => [
            'query' => [
                'bool' => [
                    'must'   => [
                        'match_all' => new stdClass(),
                    ],
                    'filter' => [
                        'geo_distance' => [
                            'distance' => '30km',
                            'location' => [
                                'lat' => 40.7143,
                                'lon' => -74.0060,
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ];
  2. Suche durchführen

    $response = $client->search($params);
    
    foreach ($response['hits']['hits'] as $hit) {
        echo $hit['_id']. ': '. $hit['_source']['name']. PHP_EOL;
    }

Dieser Code gibt Dokumente im Umkreis von 30 Kilometern um die angegebenen Breiten- und Längenkoordinaten (New York City) zurück. Durchsuchen Sie die Suchergebnisse, um die Namen von Orten zu erhalten, die den Kriterien entsprechen.

6. Zusammenfassung
Die Verwendung von PHP Elasticsearch zur Implementierung einer Suchfunktion basierend auf dem geografischen Standort kann genauere und bequemere geografische Standortinformationen für Websites und Anwendungen bereitstellen. Diese Funktionalität lässt sich ganz einfach durch das Einrichten von Indizes und Zuordnungen, das Hinzufügen von Dokumenten und das Durchführen geolokalisierungsbasierter Suchen erreichen. In praktischen Anwendungen kann die Sortierung und Filterung von Suchergebnissen weiter optimiert werden, um das Benutzererlebnis zu verbessern.

Das obige ist der detaillierte Inhalt vonWie verwende ich PHP Elasticsearch, um eine standortbasierte Suchfunktion zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn