ホームページ >バックエンド開発 >PHPチュートリアル >全文検索機能を実現するPHPとElasticsearchの連携について詳しく解説
インターネットの発展に伴い、企業はますます大量のテキスト データに直面するようになりました。情報分野の企業にとって、関連するコンテンツをいかに迅速かつ正確に検索するかは重要な課題の一つとなっている。 Lucene をベースにしたオープンソースの検索エンジンである Elasticsearch は、高可用性、高スケーラビリティ、高速検索という特徴を備えており、企業の全文検索に推奨されるソリューションの 1 つとなっています。 PHP は人気のあるサーバーサイド プログラミング言語として、Web 開発や API 開発も迅速に実行でき、Elasticsearch と統合されてよく使用される言語の 1 つになりました。
この記事では、PHPとElasticsearchを連携して全文検索機能を実現するまでの具体的な手順を中心に説明します。
1. Elasticsearch の概要
Elasticsearch は、大量のテキスト データを迅速かつ正確に取得するために使用できる、Lucene ベースのオープンソース検索エンジンです。 Elasticsearch は分散ストレージ アーキテクチャを採用し、水平拡張をサポートし、大規模なデータ ストレージと高速検索のニーズに適応できます。
Elasticsearch は RESTful API インターフェイスを提供し、JSON 形式でのデータ対話をサポートし、一般的に使用されるプログラミング言語と統合できます。 Elasticsearch では、データはドキュメントに従って保存されます。各ドキュメントには複数のフィールドが含まれており、各フィールドをネストして他のフィールドを含めることができるため、データ構造がより柔軟になります。同時に、Elasticsearch はドキュメントに対する全文検索、完全一致、集計、分析、その他の操作をサポートします。
2. PHP と Elasticsearch の統合
Elasticsearch-PHP は、Elasticsearch をカプセル化する公式の PHP クライアント ライブラリです。 RESTful API インターフェイスにより、PHP アプリケーションで Elasticsearch を簡単に操作できます。 Composer を介してライブラリをインストールし、次のコマンドを実行できます:
composer require elasticsearch/elasticsearch
Elasticsearch に接続する前に、Elasticsearch サービスを開始する必要があります。 Elasticsearch-PHP ライブラリを使用して PHP で Elasticsearch に接続するには、最初に ElasticsearchClient オブジェクトをインスタンス化し、接続されている Elasticsearch サーバーの IP とポートを設定する必要があります。
require 'vendor/autoload.php'; $client = ElasticsearchClientBuilder::create()->setHosts(['http://127.0.0.1:9200'])->build();
その中で、setHosts() メソッドが渡されます。配列パラメータ。各要素は Elasticsearch サーバーを表し、高可用性と負荷分散を実現するために複数のサーバーをセットアップできます。
Elasticsearch では、インデックスは、データベース内のテーブルと同様に、同様のデータを保存および取得するために使用されるデータ構造です。次のコードを使用して、「my_index」という名前のインデックスを作成できます。
$params = [ 'index' => 'my_index', 'body' => [ 'settings' => [ 'number_of_shards' => 5, // 分片数 'number_of_replicas' => 1, // 副本数 ], ], ]; $response = $client->indices()->create($params);
このうち、$params 配列パラメータの「settings」は、シャードの数やインデックスの数などの情報を含むインデックスの設定を表します。コピー数。 「body」はインデックスのマッピングを表します。このパラメータでインデックスのフィールドとタイプを設定できます。
Elasticsearch にドキュメントを追加します。これは、次のコードによって実現できます:
$params = [ 'index' => 'my_index', 'id' => '1', 'body' => [ 'title' => 'Elasticsearch PHP集成', 'content' => 'Elasticsearch是一款基于Lucene的开源搜索引擎...' ] ]; $response = $client->index($params);
その中で、$params 配列パラメーター内にあります。 、「index」は追加するドキュメントのインデックス名を表します、「id」はドキュメントの一意の識別子、オプションのパラメータを表します、「body」はドキュメントの内容を表し、複数のフィールドと値を設定できます。
Elasticsearch でのドキュメントの検索は、次のコードを通じて実現できます:
$params = [ 'index' => 'my_index', 'body' => [ 'query' => [ 'match' => [ 'title' => 'Elasticsearch PHP' ] ] ] ]; $response = $client->search($params);
その中で、$params 配列パラメーター内にあります。 , 「index」は検索する文書のインデックス名を示し、「body」は検索条件を示し、複数の検索条件や振り分けルールを設定できます。
3. PHP Elasticsearch を使用した全文検索
Elasticsearch を使用して全文検索を実装する前に、データを取得したものは最初にインデックスを作成する必要があります。インデックスを作成するときに、取得するフィールドをテキスト型に設定すると、全文インデックスを実行できるようになります。
この例では、取得するデータが id、名前、年齢、スコアのフィールドを含む学生テーブルであると仮定します。次のコードを使用して、「student」という名前のインデックスを作成できます:
$params = [ 'index' => 'student', 'body' => [ 'settings' => [ 'number_of_shards' => 5, 'number_of_replicas' => 1, ], 'mappings' => [ 'properties' => [ 'id' => ['type' => 'integer'], 'name' => ['type' => 'text', 'analyzer' => 'ik_max_word'], 'age' => ['type' => 'integer'], 'score' => ['type' => 'double'] ] ] ] ]; $response = $client->indices()->create($params);
その中で、「name」フィールドのタイプがテキストに設定され、単語セグメンターが指定されています。ここでは in ik_max_word が使用されており、単語の分割を最大限に高める方法で中国語のテキストを処理できます。
インデックスの作成後、ドキュメントをインデックスに追加できます。学生情報を追加したいとします。次のコードを使用して実現できます。
$params = [ 'index' => 'student', 'body' => [ 'id' => 1, 'name' => '张三', 'age' => 18, 'score' => 90.5 ] ]; $response = $client->index($params);
ループ追加を通じて複数のドキュメントをインデックスに追加できます。
ドキュメントのインデックスを作成して追加した後、全文検索を実行できます。この例では、マッチ クエリを使用して全文検索を実現しており、キーワードを入力して検索できます。これは、次のコードによって実現できます。
$params = [ 'index' => 'student', 'body' => [ 'query' => [ 'match' => [ 'name' => '张三' ] ] ] ]; $response = $client->search($params);
このうち、「name」フィールドは照合に使用され、全文検索が必要な他のフィールドに置き換えることができます。検索結果で返される情報は $response にあり、クエリ結果を取得して表示することができます。
4. 概要
この記事では、PHP と Elasticsearch を統合して全文検索機能を実現するための詳細な手順を紹介します。 Elasticsearch への接続、インデックスの構築、ドキュメントの追加、ドキュメントの検索の手順を通じて、大量のテキスト データを迅速かつ正確に取得できます。全文検索を実行する場合、検索の精度と効率を向上させるために、単語セグメンターを使用して中国語をセグメント化することをお勧めします。
以上が全文検索機能を実現するPHPとElasticsearchの連携について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。