Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Membangunkan fungsi carian geolokasi menggunakan PHP dan Carian Manticore

Membangunkan fungsi carian geolokasi menggunakan PHP dan Carian Manticore

王林
王林asal
2023-08-06 17:51:20947semak imbas

Membangunkan fungsi carian geolokasi menggunakan PHP dan Manticore Search

Dengan perkembangan Internet, fungsi carian geolokasi telah menjadi semakin penting dalam banyak aplikasi. Sama ada aplikasi seperti peta dalam talian, navigasi trafik atau cadangan perniagaan, carian lokasi geografi memainkan peranan yang tidak boleh diganti. Dalam artikel ini, kami akan memperkenalkan cara membangunkan fungsi carian geolokasi menggunakan PHP dan Carian Manticore.

Manticore Search ialah enjin carian teks penuh yang berkuasa berdasarkan bahagian enjin carian Sphinx. Manticore Search menyokong pelbagai fungsi carian, termasuk carian geolokasi. Ia menggunakan koordinat geolokasi untuk menyimpan dan mencari data geolokasi. Oleh itu, kita boleh menggunakannya untuk melaksanakan fungsi carian geolokasi.

Pertama, kita perlu memasang Manticore Search. Anda boleh melawati laman web rasmi Manticore Search (https://manticoresearch.com) untuk memuat turun dan memasang versi terkini. Setelah pemasangan selesai, kita perlu mencipta indeks dan menyediakan medan geolokasi.

Dalam PHP, kami boleh menggunakan perpustakaan ManticoreSearch untuk berinteraksi dengan Manticore Search. Pertama, kita perlu memasang perpustakaan ManticoreSearch menggunakan Komposer. Dalam terminal, navigasi ke direktori projek anda dan jalankan arahan berikut:

composer require manticoresearch/manticoresearch-php

Setelah pemasangan selesai, kami boleh mula menulis kod untuk melaksanakan fungsi carian geolokasi. Katakan kami mempunyai apl direktori perniagaan yang membolehkan pengguna mencari perniagaan berdekatan berdasarkan lokasi semasa mereka.

Pertama, kita perlu mencipta indeks yang mengandungi medan geolokasi. Andaikan nama medan ialah "lokasi" dan jenisnya ialah "ruang". Kita boleh menggunakan kaedah yang disediakan oleh perpustakaan ManticoreSearch untuk mencipta indeks. Kod berikut menunjukkan cara membuat indeks:

require_once 'vendor/autoload.php';

use ManticoresearchClient;
use ManticoresearchExceptionsRuntimeException;

// 创建客户端实例
$client = new Client();

try {
    // 建立与搜索引擎的连接
    $client->connect();

    // 创建索引
    $client->indices()->create(['index' => 'stores']);

    // 设置地理位置字段
    $client->indices()->updateSettings([
        'index' => 'stores',
        'body' => [
            'attributes' => [
                'location' => ['type' => 'geopoint'],
            ],
        ],
    ]);
    
} catch (RuntimeException $e) {
    echo "出现错误:" . $e->getMessage();
}

Seterusnya, kita perlu menyimpan data geolokasi pedagang ke dalam indeks. Katakan kami mempunyai senarai perniagaan yang mengandungi nama dan koordinat lokasi geografi mereka. Kita boleh menyimpan data ini ke dalam indeks menggunakan kaedah yang disediakan oleh perpustakaan ManticoreSearch. Kod berikut menunjukkan cara menyimpan data perniagaan:

// 假设我们有一个包含商家名称和地理位置坐标的数组
$stores = [
    ['name' => '商家A', 'latitude' => 39.9042, 'longitude' => 116.4074],
    ['name' => '商家B', 'latitude' => 31.2304, 'longitude' => 121.4737],
    // ...
];

foreach ($stores as $store) {
    $data = [
        'name' => $store['name'],
        'location' => [
            'lat' => $store['latitude'],
            'lon' => $store['longitude'],
        ],
    ];
    
    try {
        // 添加文档到索引中
        $client->index('stores')->add($data);
    } catch (RuntimeException $e) {
        echo "存储数据时出现错误:" . $e->getMessage();
    }
}

Kini setelah data perniagaan disimpan, kita boleh mula melaksanakan fungsi carian geolokasi. Kod berikut menunjukkan cara mencari perniagaan berdekatan berdasarkan koordinat geo-lokasi pengguna:

try {
    // 设置搜索参数
    $params = [
        'index' => 'stores',
        'body' => [
            'query' => [
                'bool' => [
                    'filter' => [
                        'geo_distance' => [
                            'distance' => '10km',
                            'location' => [
                                'lat' => $userLatitude,
                                'lon' => $userLongitude,
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ];
    
    // 执行搜索查询
    $result = $client->search($params);
    
    // 处理搜索结果
    foreach ($result['hits']['hits'] as $hit) {
        echo $hit['_source']['name'] . "
";
    }
    
} catch (RuntimeException $e) {
    echo "搜索时出现错误:" . $e->getMessage();
}

Dalam kod di atas, kami menggunakan penapis geo_distance untuk menapis perniagaan yang berada dalam jarak 10 kilometer dari lokasi semasa pengguna. Anda boleh melaraskan jejari carian mengikut keperluan anda.

Melalui langkah di atas, kami berjaya membangunkan fungsi carian lokasi geografi menggunakan PHP dan Carian Manticore. Pengguna kini boleh mencari perniagaan berdekatan berdasarkan lokasi mereka. Anda boleh terus mengembangkan fungsi, seperti menambah halaman butiran perniagaan, ulasan pengguna, dsb.

Ringkasan:
Dalam artikel ini, kami memperkenalkan cara menggunakan Carian PHP dan Manticore untuk membangunkan fungsi carian geolokasi. Dengan memahami proses menggunakan Carian Manticore untuk membuat indeks, menyimpan data dan melakukan pertanyaan carian, anda boleh membangunkan keupayaan carian geolokasi yang berkuasa berdasarkan keperluan anda dengan mudah. Saya doakan anda berjaya!

Atas ialah kandungan terperinci Membangunkan fungsi carian geolokasi menggunakan PHP dan Carian Manticore. 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