ホームページ > バックエンド開発 > PHPチュートリアル > PHP と Elasticsearch を使用して検索結果を表示および移動する方法

PHP と Elasticsearch を使用して検索結果を表示および移動する方法

WBOY
リリース: 2023-07-18 11:14:02
オリジナル
946 人が閲覧しました

PHP と Elasticsearch を使用して検索結果を表示および移動する方法

インターネットの急速な発展に伴い、検索機能はさまざまな Web サイトやアプリケーションの標準になりました。検索結果を効率的に表示し、優れたナビゲーション エクスペリエンスを提供する方法は、Web サイト開発者が直面する重要な課題となっています。この記事では、PHPとElasticsearchを使って検索結果の表示やナビゲーション機能を実装する方法を紹介します。

1. 開発環境をセットアップする

まず、PHP と Elasticsearch の開発環境をセットアップする必要があります。 PHP および Elasticsearch 関連のパッケージがインストールされていることを確認してください。

2. インデックスの作成

始める前に、データを保存するためのインデックスを作成する必要があります。製品検索機能を作成したいとすると、「products」というインデックスを作成できます。 Elasticsearch では、インデックスはデータベース内のテーブルに似ており、データの保存と整理に使用されます。

次のコードを使用して、「products」という名前のインデックスを作成します:

<?php
require 'autoload.php';

use ElasticsearchClientBuilder;

$hosts = [
    'localhost:9200' // Elasticsearch的主机和端口
];

$client = ClientBuilder::create()
            ->setHosts($hosts)
            ->build();

$params = [
    'index' => 'products' // 索引名称
];

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

echo "Index created successfully.";
?>
ログイン後にコピー

3. データのインポート

次に、作成したインデックスにデータをインポートする必要があります。真ん中。この例では、いくつかの製品情報の JSON データを含む「products.json」という名前のファイルがあると仮定します。

次のコードを使用して、「products」インデックスにデータをインポートします:

<?php
require 'autoload.php';

use ElasticsearchClientBuilder;

$hosts = [
    'localhost:9200' // Elasticsearch的主机和端口
];

$client = ClientBuilder::create()
            ->setHosts($hosts)
            ->build();

$params = [
    'index' => 'products', // 索引名称
    'body'  => [
        // 导入数据的JSON数组
        [
            'index' => [
                '_index' => 'products',
                '_type'  => 'product',
            ]
        ],
        [
            'title'      => 'iPhone 11',
            'description' => 'An amazing smartphone by Apple.',
            'price'      => 999,
        ],
        [
            'index' => [
                '_index' => 'products',
                '_type'  => 'product',
            ]
        ],
        [
            'title'      => 'Samsung Galaxy S20',
            'description' => 'A powerful smartphone by Samsung.',
            'price'      => 899,
        ],
        // 更多商品数据...
    ]
];

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

echo "Data imported successfully.";
?>
ログイン後にコピー

4. 検索関数を実行します

これで、インデックスの作成とデータのインポートが完了しました。 、続行すると、検索機能を実装できます。 PHP では、Elasticsearch の Search API を使用して検索クエリを実行できます。

次のコードを使用して検索関数を実装します。

<?php
require 'autoload.php';

use ElasticsearchClientBuilder;

$hosts = [
    'localhost:9200' // Elasticsearch的主机和端口
];

$client = ClientBuilder::create()
            ->setHosts($hosts)
            ->build();

$params = [
    'index' => 'products', // 索引名称
    'body'  => [
        'query' => [
            'match' => [
                'title' => 'iPhone' // 搜索关键字
            ]
        ]
    ]
];

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

// 处理搜索结果
foreach ($response['hits']['hits'] as $hit) {
    echo $hit['_source']['title'] . "<br>";
    echo $hit['_source']['description'] . "<br>";
    echo $hit['_source']['price'] . "<br>";
    echo "<hr>";
}
?>
ログイン後にコピー

上記のコードは、Elasticsearch の「match」クエリを使用して検索を実行し、検索結果を走査して表示します。

5. 結果のページングとナビゲーションを実装する

一般に、検索結果の数が多くなる可能性があるため、より良いユーザー エクスペリエンスを提供するために、結果のページングとナビゲーション機能を実装する必要があります。 PHP では、Elasticsearch の「from」パラメータと「size」パラメータを使用してページングを実装できます。

次のコードを使用して、ページングおよびナビゲーション機能を実装します。

<?php
require 'autoload.php';

use ElasticsearchClientBuilder;

$hosts = [
    'localhost:9200' // Elasticsearch的主机和端口
];

$client = ClientBuilder::create()
            ->setHosts($hosts)
            ->build();

$page = isset($_GET['page']) ? intval($_GET['page']) : 1; // 当前页数
$perPage = 10; // 每页显示的数量

$from = ($page - 1) * $perPage;

$params = [
    'index' => 'products', // 索引名称
    'body'  => [
        'from' => $from, // 从第几个结果开始
        'size' => $perPage // 每页显示的数量
        'query' => [
            'match' => [
                'title' => 'iPhone' // 搜索关键字
            ]
        ]
    ]
];

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

// 处理搜索结果
foreach ($response['hits']['hits'] as $hit) {
    echo $hit['_source']['title'] . "<br>";
    echo $hit['_source']['description'] . "<br>";
    echo $hit['_source']['price'] . "<br>";
    echo "<hr>";
}

// 显示分页导航
$totalPages = ceil($response['hits']['total']['value'] / $perPage); // 总页数

for ($i = 1; $i <= $totalPages; $i++) {
    echo "<a href='search.php?page=$i'>$i</a>";
}
?>
ログイン後にコピー

上記のコードは、ユーザーのリクエスト パラメーターに基づいて現在のページ番号を決定し、「from」パラメーターと「size」パラメーターを使用します。結果の範囲を制御します。同時に、検索結果の総数と各ページに表示される数に基づいて、ページ分割されたナビゲーションが計算されて表示されます。

概要

この記事では、PHPとElasticsearchを使って検索結果の表示やナビゲーション機能を実現する方法を紹介します。開発環境をセットアップし、インデックスを作成し、データをインポートし、検索機能を実行することで、効率的な検索エクスペリエンスを実現し、ページ分割されたナビゲーションを通じてより優れたユーザー エクスペリエンスを提供できます。読者の皆さんも、この記事のサンプルコードを基に、ご自身のプロジェクトに簡単に適用できると思います。

以上がPHP と Elasticsearch を使用して検索結果を表示および移動する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート