PHP Elasticsearch とリレーショナル データベースの統合のための実践ガイド
はじめに:
インターネットとビッグ データ時代の到来により、データ ストレージは処理方法も常に進化しています。従来のリレーショナル データベースは、大量のデータ、同時読み取りと書き込み、全文検索などのシナリオに直面すると、徐々にいくつかの欠点が明らかになってきました。 Elasticsearch は、リアルタイムの分散検索および分析エンジンとして、その高性能の全文検索、リアルタイム分析、データ視覚化機能により、徐々に業界の注目と利用を集めています。
ただし、実際のアプリケーション シナリオの多くでは、従来のデータ ストレージと処理要件に加え、全文検索やインテリジェントなレコメンデーションなどの機能を考慮するために、既存のリレーショナル データベースを Elasticsearch と統合する必要があることがよくあります。この記事では、PHP 環境で Elasticsearch をリレーショナル データベースと統合する方法を紹介し、具体的なコード例を示します。
パート 1: 環境の準備と構成
まず、Elasticsearch サーバーをインストールして構成する必要があります。対応するインストール パッケージは、公式 Web サイト (https://www.elastic.co/downloads/elasticsearch) からダウンロードできます。インストールが完了したら、Elasticsearch サービスを開始します。
PHP と Elasticsearch 間の対話は、公式に提供されている PHP-Elasticsearch ライブラリを通じて実現できます。 Composer を通じてインストールできます。コマンドは次のとおりです:
composer require elasticsearch/elasticsearch
インストールが完了したら、対応する名前空間をインポートすることで、Elasticsearch の関連 API を使用できるようになります。
リレーショナル データベースを準備し、その中に対応するテーブル構造を作成する必要があります。 MySQL を例に挙げると、次の SQL ステートメントを使用して「users」という名前のテーブルを作成できます。
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT, email VARCHAR(50) );
次に、リレーショナル データベースを構成する必要があります。以下に示すように、config.php
ファイルを編集して、データベース接続関連の情報を構成する必要があります。
<?php $hostname = 'localhost'; $username = 'your_username'; $password = 'your_password'; $database = 'your_database'; ?>
パート 2: データの同期とインデックスの作成
データベース内のデータを Elasticsearch に同期する前に、この機能を実装するための PHP スクリプトを作成する必要があります。以下は簡単な例です:
<?php require 'vendor/autoload.php'; require 'config.php'; // 建立数据库连接 $connection = new mysqli($hostname, $username, $password, $database); if ($connection->connect_error) { die("连接数据库失败:" . $connection->connect_error); } // 查询数据库数据 $result = $connection->query("SELECT * FROM users"); if (!$result) { die("查询数据失败:" . $connection->error); } // 将数据同步到Elasticsearch $client = ElasticsearchClientBuilder::create()->build(); foreach ($result as $row) { $params = [ 'index' => 'users', 'type' => 'user', 'id' => $row['id'], 'body' => [ 'name' => $row['name'], 'age' => $row['age'], 'email' => $row['email'] ] ]; $client->index($params); } echo "数据同步完成。"; ?>
スクリプトを実行すると、データベース内のデータが Elasticsearch の users
インデックスに同期されます。
インデックスは、リレーショナル データベースのテーブルと同様に、Elasticsearch でデータを編成する方法です。 Elasticsearch でインデックスを設定し、対応するフィールド マッピングを定義する必要があります。
以下はインデックスを作成するサンプル コードです:
<?php $params = [ 'index' => 'users', 'body' => [ 'mappings' => [ 'user' => [ 'properties' => [ 'name' => [ 'type' => 'text' ], 'age' => [ 'type' => 'integer' ], 'email' => [ 'type' => 'keyword' ] ] ] ] ] ]; $client->indices()->create($params); ?>
上の例では、users
という名前のインデックスを定義します。これには name# が含まれます。 3 つのフィールド: ##、
age、
email であり、対応するフィールド マッピングが使用されます。
<?php require 'vendor/autoload.php'; // 连接Elasticsearch $client = ElasticsearchClientBuilder::create()->build(); // 查询用户信息 $params = [ 'index' => 'users', 'type' => 'user', 'body' => [ 'query' => [ 'match' => [ 'name' => 'John' ] ] ] ]; $response = $client->search($params); print_r($response); ?>
name フィールドに「John」を含むユーザー情報をクエリします。
<?php require 'vendor/autoload.php'; // 连接Elasticsearch $client = ElasticsearchClientBuilder::create()->build(); // 查询用户信息 $params = [ 'index' => 'users', 'type' => 'user', 'body' => [ 'query' => [ 'match' => [ 'name' => 'John' ] ] ] ]; $response = $client->search($params); echo "查询到" . $response['hits']['total']['value'] . "条用户信息:" . PHP_EOL; foreach ($response['hits']['hits'] as $hit) { echo "ID:" . $hit['_id'] . ",Name:" . $hit['_source']['name'] . ",Age:" . $hit['_source']['age'] . ",Email:" . $hit['_source']['email'] . PHP_EOL; } ?>
以上がPHP Elasticsearch とリレーショナル データベースの統合実践ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。