Maison  >  Article  >  développement back-end  >  Comment utiliser php Elasticsearch pour implémenter la fonction de recherche basée sur la localisation ?

Comment utiliser php Elasticsearch pour implémenter la fonction de recherche basée sur la localisation ?

WBOY
WBOYoriginal
2023-09-13 08:29:001331parcourir

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

Comment utiliser PHP Elasticsearch pour implémenter la fonction de recherche basée sur la localisation ?

1. Introduction
Avec le développement d'Internet, de plus en plus de sites Web et d'applications doivent mettre en œuvre des fonctions de recherche basées sur la localisation géographique. Par exemple, une plateforme de commande de restaurants doit afficher les restaurants à proximité en fonction de la position actuelle de l'utilisateur ; un site Web de voyage doit afficher les attractions à proximité en fonction du point de départ de l'utilisateur ; une application de navigation cartographique doit afficher les parkings environnants en fonction de la destination de l'utilisateur ; etc. attendez. La clé pour réaliser cette fonctionnalité est la capacité de rechercher et de trier efficacement en fonction des informations de localisation géographique.

Elasticsearch est un moteur de recherche open source qui offre de puissantes capacités de recherche et d'analyse en texte intégral grâce à une technologie d'index inversé et de recherche distribuée. Il dispose d'une fonction de recherche de localisation géographique intégrée qui peut rechercher des points à proximité en fonction des coordonnées de latitude et de longitude.

2. Préparation

  1. Installer Elasticsearch
    Tout d'abord, vous devez installer Elasticsearch sur le serveur. Vous pouvez visiter le site officiel pour télécharger et installer la dernière version d'Elasticsearch.
  2. Installer la bibliothèque client PHP Elasticsearch
    La bibliothèque client PHP Elasticsearch est un outil utilisé pour interagir avec Elasticsearch. Vous pouvez utiliser Composer pour installer et exécuter la commande suivante :

    composer require elasticsearch/elasticsearch

3. Créer un index et un mappage
Avant de lancer la recherche, vous devez d'abord créer l'index et configurer le mappage.

  1. Créer un index
    Utilisez la bibliothèque client PHP fournie par Elasticsearch pour créer un index. L'exemple de code est le suivant :

    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. Configurer le mappage
    Avant d'ajouter des documents à l'index, vous devez définir le mappage. des types de champs et des attributs. Ici, nous devons ajouter une cartographie de géolocalisation pour le champ de géolocalisation. L'exemple de code est le suivant :

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

4. Ajouter des documents
À l'aide de la bibliothèque client PHP d'Elasticsearch, vous pouvez ajouter des documents à l'index en suivant les étapes ci-dessous.

  1. Obtenir les coordonnées de latitude et de longitude
    Avant d'ajouter un document, vous devez obtenir les coordonnées de latitude et de longitude de l'emplacement. Vous pouvez utiliser des bibliothèques de géocodage tierces telles que Geocode.xyz ou MapQuest.
  2. Ajouter des documents
    Utilisez la bibliothèque client PHP d'Elasticsearch pour ajouter le nom et les coordonnées de latitude et de longitude du lieu à l'index. L'exemple de code est le suivant :

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

5. Recherche basée sur l'emplacement géographique
En définissant les paramètres de requête de recherche, vous pouvez effectuer une recherche en fonction de l'emplacement géographique.

  1. Définir les paramètres de recherche

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

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

Ce code renverra les documents dans un rayon de 30 kilomètres des coordonnées de latitude et de longitude données (New York City). Parcourez les résultats de la recherche pour obtenir les noms des lieux qui répondent aux critères.

6. Résumé
L'utilisation de PHP Elasticsearch pour implémenter une fonction de recherche basée sur la localisation géographique peut fournir des informations relatives à la localisation géographique plus précises et plus pratiques pour les sites Web et les applications. Cette fonctionnalité est facilement réalisée en configurant des index et des mappages, en ajoutant des documents et en effectuant des recherches basées sur la géolocalisation. Dans les applications pratiques, le tri et le filtrage des résultats de recherche peuvent être encore optimisés pour améliorer l'expérience utilisateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn