ホームページ >バックエンド開発 >PHPチュートリアル >php Elasticsearchを使用して位置ベースの検索機能を実装するにはどうすればよいですか?

php Elasticsearchを使用して位置ベースの検索機能を実装するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-09-13 08:29:001394ブラウズ

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

PHP Elasticsearch を使用して位置ベースの検索機能を実装するにはどうすればよいですか?

1. はじめに
インターネットの発展に伴い、地理的位置に基づいた検索機能を実装する必要がある Web サイトやアプリケーションがますます増えています。たとえば、レストラン注文プラットフォームはユーザーの現在位置に基づいて近くのレストランを表示する必要があり、旅行 Web サイトはユーザーの出発地に基づいて近くの観光スポットを表示する必要があり、地図ナビゲーション アプリケーションはユーザーの目的地に基づいて周囲の駐車場を表示する必要があります。など待ってください。この機能を実現する鍵となるのは、地理的位置情報に基づいて効率的に検索および並べ替えを行う機能です。

Elasticsearch は、転置インデックスと分散検索テクノロジーを通じて強力な全文検索と分析機能を提供するオープンソースの検索エンジンです。緯度と経度の座標に基づいて近くの地点を検索できる地理的位置検索機能が組み込まれています。

2. 準備

  1. Elasticsearchのインストール
    まず、サーバーにElasticsearchをインストールする必要があります。公式 Web サイトにアクセスして、Elasticsearch の最新バージョンをダウンロードしてインストールできます。
  2. PHP Elasticsearch クライアント ライブラリのインストール
    PHP Elasticsearch クライアント ライブラリは、Elasticsearch と対話するために使用されるツールです。 Composer を使用してインストールし、次のコマンドを実行します:

    composer require elasticsearch/elasticsearch

3. インデックスとマッピングの作成
検索を開始する前に、まずインデックスを作成し、マッピングを設定する必要があります。 。

  1. インデックスの作成
    Elasticsearch が提供する PHP クライアント ライブラリを使用してインデックスを作成します。サンプル コードは次のとおりです:

    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. マッピングのセットアップ
    ドキュメントをインデックスに追加する前に、フィールド タイプと属性のマッピングを定義する必要があります。ここでは、地理位置情報フィールドの地理位置マッピングを追加する必要があります。サンプル コードは次のとおりです:

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

4. ドキュメントの追加
Elasticsearch の PHP クライアント ライブラリを使用して、以下の手順に従ってドキュメントをインデックスに追加できます。

  1. 緯度と経度の座標を取得する
    ドキュメントを追加する前に、場所の緯度と経度の座標を取得する必要があります。 Geocode.xyz や MapQuest などのサードパーティのジオコーディング ライブラリを使用できます。
  2. ドキュメントの追加
    Elasticsearch の PHP クライアント ライブラリを使用して、場所の名前と緯度経度の座標をインデックスに追加します。サンプルコードは以下のとおりです:

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

5. 地理的位置に基づく検索
検索クエリのパラメータを設定することで、地理的位置に基づいて検索できます。

  1. 検索パラメータの設定

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

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

このコードは、までの距離を返します。固定緯度経度座標 (ニューヨーク市) から 30 キロメートル以内の文書。検索結果をたどって、条件を満たす場所の名前を取得します。

6. 概要
PHP Elasticsearch を使用して地理的位置に基づく検索機能を実装すると、Web サイトやアプリケーションに、より正確で便利な地理的位置関連情報を提供できます。この機能は、インデックスとマッピングを設定し、ドキュメントを追加し、地理位置情報に基づいた検索を実行することで簡単に実現できます。実際のアプリケーションでは、検索結果の並べ替えとフィルタリングをさらに最適化して、ユーザー エクスペリエンスを向上させることができます。

以上がphp Elasticsearchを使用して位置ベースの検索機能を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。