Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan php Elasticsearch untuk melaksanakan fungsi carian berasaskan lokasi?

Bagaimana untuk menggunakan php Elasticsearch untuk melaksanakan fungsi carian berasaskan lokasi?

WBOY
WBOYasal
2023-09-13 08:29:001378semak imbas

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

Bagaimana untuk menggunakan PHP Elasticsearch untuk melaksanakan fungsi carian berasaskan lokasi?

1. Pengenalan
Dengan perkembangan Internet, semakin banyak laman web dan aplikasi perlu melaksanakan fungsi carian berdasarkan lokasi geografi. Sebagai contoh, platform tempahan restoran perlu memaparkan restoran berdekatan berdasarkan lokasi semasa pengguna perlu memaparkan tarikan berdekatan berdasarkan lokasi berlepas pengguna, aplikasi navigasi peta perlu memaparkan tempat letak kereta di sekelilingnya berdasarkan destinasi pengguna; dan lain-lain tunggu. Kunci untuk mencapai fungsi ini ialah keupayaan untuk mencari dan mengisih dengan cekap berdasarkan maklumat lokasi geografi.

Elasticsearch ialah enjin carian sumber terbuka yang menyediakan keupayaan carian dan analisis teks penuh yang berkuasa melalui indeks terbalik dan teknologi carian teragih. Ia mempunyai fungsi carian lokasi geografi terbina dalam yang boleh mencari titik berdekatan berdasarkan koordinat latitud dan longitud.

2. Persediaan

  1. Pasang Elasticsearch
    Pertama, anda perlu memasang Elasticsearch pada pelayan. Anda boleh melawati tapak web rasmi untuk memuat turun dan memasang versi terkini Elasticsearch.
  2. Pasang perpustakaan klien PHP Elasticsearch
    Pustaka klien PHP Elasticsearch ialah alat yang digunakan untuk berinteraksi dengan Elasticsearch. Anda boleh menggunakan Komposer untuk memasangnya dan melaksanakan arahan berikut:

    composer require elasticsearch/elasticsearch

3 Cipta indeks dan pemetaan
Sebelum memulakan carian, anda perlu membuat indeks terlebih dahulu dan menyediakan pemetaan. . jenis medan dan atribut. Di sini kita perlu menambah pemetaan geolokasi untuk medan geolokasi. Kod sampel adalah seperti berikut:

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);
  1. 4 Tambah dokumen
    Menggunakan perpustakaan klien PHP Elasticsearch, anda boleh menambah dokumen pada indeks dengan mengikuti langkah di bawah.

  2. Dapatkan koordinat latitud dan longitud

    Sebelum menambah dokumen, anda perlu mendapatkan koordinat latitud dan longitud lokasi. Anda boleh menggunakan perpustakaan geokod pihak ketiga seperti Geocode.xyz atau MapQuest.

  3. Tambah Dokumen
Gunakan perpustakaan klien PHP Elasticsearch untuk menambah nama lokasi dan koordinat latitud dan longitud pada indeks. Kod sampel adalah seperti berikut:

$params = [
    'index' => 'geolocation',
    'body'  => [
        'mappings' => [
            'properties' => [
                'location' => [
                    'type'       => 'geo_point',
                    'lat_lon'    => true,
                    'geohash'    => true,
                    'geohash_precision' => 5
                ],
            ],
        ],
    ],
];

$response = $client->indices()->putMapping($params);

    5. Cari berdasarkan lokasi geografi
  1. Dengan menetapkan parameter pertanyaan carian, anda boleh mencari berdasarkan lokasi geografi.
  2. Tetapkan parameter carian

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

Lakukan carian

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

    Kod ini akan mengembalikan dokumen dalam jarak 30 kilometer dari koordinat latitud dan longitud (Bandar New York). Lintas hasil carian untuk mendapatkan nama tempat yang memenuhi kriteria.
  1. 6. Ringkasan

    Menggunakan PHP Elasticsearch untuk melaksanakan fungsi carian berdasarkan lokasi geografi boleh memberikan maklumat berkaitan lokasi geografi yang lebih tepat dan mudah untuk tapak web dan aplikasi. Fungsi ini mudah dicapai dengan menyediakan indeks dan pemetaan, menambah dokumen dan melakukan carian berasaskan geolokasi. Dalam aplikasi praktikal, pengisihan dan penapisan hasil carian boleh dioptimumkan lagi untuk meningkatkan pengalaman pengguna.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan php Elasticsearch untuk melaksanakan fungsi carian berasaskan lokasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn