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 サイトの他の関連記事を参照してください。