Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan PHP dan Elasticsearch untuk melaksanakan carian lokasi geografi

Cara menggunakan PHP dan Elasticsearch untuk melaksanakan carian lokasi geografi

王林
王林asal
2023-07-18 16:15:23810semak imbas

Cara menggunakan PHP dan Elasticsearch untuk melaksanakan carian lokasi geografi

Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat Internet, carian lokasi geografi telah menjadi semakin biasa dalam pelbagai aplikasi. Sama ada anda sedang mencari perniagaan berdekatan di tapak e-dagang atau mencari rakan berdekatan di media sosial, carian geo-lokasi memainkan peranan penting. Dalam artikel ini, kami akan meneroka cara melaksanakan carian geolokasi menggunakan PHP dan Elasticsearch, dan menyediakan contoh kod yang berkaitan.

  1. Pasang dan konfigurasikan Elasticsearch

Mula-mula, kita perlu memasang dan mengkonfigurasi Elasticsearch. Elasticsearch boleh dimuat turun dan dipasang dari laman web rasmi. Selepas pemasangan selesai, kami perlu menetapkan beberapa parameter penting dalam fail konfigurasi, seperti port HTTP dan laluan storan data. Fail konfigurasi biasanya terletak di /etc/elasticsearch/elasticsearch.yml. Jika anda menggunakan konfigurasi lalai, anda boleh melangkau langkah ini. /etc/elasticsearch/elasticsearch.yml。如果使用默认配置,则可以跳过该步骤。

  1. 安装Elasticsearch客户端库

我们需要安装Elasticsearch的PHP客户端库,以便与Elasticsearch进行交互。可以使用Composer来管理依赖关系。在项目根目录下创建一个composer.json文件,并添加以下内容:

{
    "require": {
        "elasticsearch/elasticsearch": "~7.0"
    }
}

然后在终端中使用以下命令来安装依赖:

composer install
  1. 创建地理位置索引

接下来,我们需要创建一个地理位置索引,以便存储位置数据。我们将使用Elasticsearch提供的REST API来创建索引。以下是一个示例代码片段:

<?php
require 'vendor/autoload.php';

$client = new ElasticsearchClient();

$params = [
    'index' => 'locations',
    'body' => [
        'mappings' => [
            'properties' => [
                'location' => [
                    'type' => 'geo_point'
                ]
            ]
        ]
    ]
];

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

print_r($response);

在上面的代码中,我们使用Elasticsearch提供的Client类来与Elasticsearch进行通信。我们通过指定索引名称和映射(mapping)来创建一个新的索引。我们使用geo_point类型来定义地理位置字段。

  1. 添加地理位置数据

现在,我们可以添加一些地理位置数据到我们的索引中。以下是一个添加数据的示例代码:

<?php
require 'vendor/autoload.php';

$client = new ElasticsearchClient();

$params = [
    'index' => 'locations',
    'body' => [
        'location' => [
            'lat' => 40.712776,
            'lon' => -74.005974
        ]
    ]
];

$response = $client->index($params);

print_r($response);

在上面的代码中,我们使用index方法来添加一条新的文档。我们指定了索引名称,并提供了一个包含经纬度信息的地理位置字段。

  1. 执行地理位置搜索

最后,我们可以执行地理位置搜索。以下是一个搜索附近位置的示例代码:

<?php
require 'vendor/autoload.php';

$client = new ElasticsearchClient();

$params = [
    'index' => 'locations',
    'body' => [
        'query' => [
            'bool' => [
                'must' => [
                    'match_all' => []
                ],
                'filter' => [
                    'geo_distance' => [
                        'distance' => '10km',
                        'location' => [
                            'lat' => 40.712776,
                            'lon' => -74.005974
                        ]
                    ]
                ]
            ]
        ]
    ]
];

$response = $client->search($params);

print_r($response);

在上面的代码中,我们使用search方法来执行搜索操作。我们使用bool查询来组合多个查询条件。在这种情况下,我们使用了一个match_all查询来返回所有文档,并使用geo_distance查询来过滤10km

    Pasang perpustakaan pelanggan Elasticsearch

    Kami perlu memasang perpustakaan pelanggan PHP Elasticsearch untuk berinteraksi dengan Elasticsearch. Anda boleh menggunakan Komposer untuk mengurus kebergantungan. Cipta fail composer.json dalam direktori akar projek dan tambah kandungan berikut:

    rrreee🎜Kemudian gunakan arahan berikut dalam terminal untuk memasang dependencies: 🎜rrreee
      🎜 Cipta Indeks Geolokasi 🎜🎜🎜 Seterusnya, kita perlu mencipta indeks geolokasi untuk menyimpan data lokasi. Kami akan menggunakan API REST yang disediakan oleh Elasticsearch untuk mencipta indeks. Berikut ialah contoh coretan kod: 🎜rrreee🎜 Dalam kod di atas, kami menggunakan kelas Klien yang disediakan oleh Elasticsearch untuk berkomunikasi dengan Elasticsearch. Kami mencipta indeks baharu dengan menyatakan nama indeks dan pemetaan. Kami menggunakan jenis geo_point untuk menentukan medan lokasi geografi. 🎜
        🎜Tambah data geolokasi🎜🎜🎜Kini, kami boleh menambah beberapa data geolokasi pada indeks kami. Berikut ialah contoh kod untuk menambah data: 🎜rrreee🎜Dalam kod di atas, kami menggunakan kaedah index untuk menambah dokumen baharu. Kami menyatakan nama indeks dan menyediakan medan geolokasi yang mengandungi maklumat latitud dan longitud. 🎜
          🎜Lakukan carian geolokasi🎜🎜🎜Akhir sekali, kami boleh melakukan carian geolokasi. Berikut ialah contoh kod untuk mencari lokasi berdekatan: 🎜rrreee🎜Dalam kod di atas, kami menggunakan kaedah carian untuk melaksanakan operasi carian. Kami menggunakan pertanyaan bool untuk menggabungkan berbilang syarat pertanyaan. Dalam kes ini, kami menggunakan pertanyaan match_all untuk mengembalikan semua dokumen dan pertanyaan geo_distance untuk menapis lokasi dalam 10km. 🎜🎜Ringkasan🎜🎜Dengan menggunakan PHP dan Elasticsearch, kami boleh melaksanakan carian lokasi geografi dengan mudah. Kami boleh menggunakan API REST yang disediakan oleh Elasticsearch untuk mencipta indeks, menambah data dan melaksanakan operasi carian. Melalui penggunaan keadaan pertanyaan yang munasabah, kami boleh mencapai fungsi carian lokasi geografi yang cekap. Saya harap artikel ini dapat membantu anda memahami cara menggunakan PHP dan Elasticsearch untuk melaksanakan carian lokasi geografi, dan menyediakan rujukan panduan untuk projek anda. 🎜

Atas ialah kandungan terperinci Cara menggunakan PHP dan Elasticsearch untuk melaksanakan carian lokasi geografi. 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