全文検索とデータ分析に PHP と ElasticSearch を使用する方法

WBOY
リリース: 2023-05-11 10:20:02
オリジナル
1760 人が閲覧しました

情報量の増加に伴い、大規模データの管理と処理がデータ サイエンティストやソフトウェア開発者にとっての課題となっています。これに応じて、情報検索とデータ分析もデータ管理と処理の主要なタスクになっています。これを解決するのが、大量のデータを処理し、高速かつ高精度に検索・分析を行うことができるオープンソースの分散検索・分析エンジンであるElasticSearch(以下、ES)です。全文検索やデータ分析機能を実装するために、この記事では ES の基本を紹介し、PHP を使用して ES アプリケーションを構築する方法を示します。

ElasticSearch の基礎知識

Index

まずは ES の基本概念について説明します。 ES では、インデックスは検索可能なデータを含むインスタンスであり、データベース内のテーブルとして表示できます。 ES は Apache Lucene 検索ライブラリ上に構築されており、インデックスの継続的な更新と Lucene インデックスの再構築によってデータの更新とクエリを実装します。したがって、ES のパフォーマンスは、転置インデックスに基づくデータ構造である Lucene インデックスの影響を受けます。転置インデックスは単語を中心としており、テキストを分析して各単語がどの文書に出現するかを記録し、文書と単語の関係を転置インデックスに保存します。 ES は、単語の分割とインデックス作成のために、さまざまなデータ型に対応するさまざまなアナライザーを設計しました。これには主にテキストアナライザー、数値アナライザー、日付アナライザー、地理的位置アナライザーなどが含まれます。

シャーディングとレプリカ

ES は、シャーディングとレプリカを使用して分散検索とデータ ストレージをサポートし、スケーラビリティと信頼性を向上させます。各インデックスは複数のシャードに分割でき、各シャードはデータの一部を保存し、関連する検索リクエストを処理します。インデックスのサイズが単一ノードのストレージ容量を超える場合、ノードを追加することで検索機能とストレージ機能を拡張できます。さらに、各シャードをレプリカで構成して、システムの有効性と可用性を高めることができます。

クエリと集計

ES は、ユーザーがより効率的にデータを取得して分析できるように、さまざまな高度なクエリと集計操作をサポートしています。 URI および JSON 形式を使用してクエリ リクエストを定義することにより、ES はセグメンテーション クエリ、フィルタ クエリ、ファジー クエリなどの複数のタイプのクエリを実行できます。同時に、ES はユーザーがデータを分析およびマイニングできるようにするための集計操作もサポートしています。集計操作では、最大値、最小値、合計、平均、カウントなどの一般的な操作を含む、検索結果のグループ化、フィルター処理、統計などを実行できます。

PHP と ElasticSearch の使用

ES のインストールと構成

まず、ES をローカルまたはサーバーにデプロイする必要があります。インストール方法の詳細については説明しません。 ESはこちら。通常の状況では、インストールされている ES のデフォルトのリスニング ポートは 9200 です。次に、ElasticSearch クライアント ライブラリが PHP 環境にインストールされていることを確認します。次のコマンドを実行して、PHP 用のオープンソース ElasticSearch クライアント ライブラリをインストールできます。

$ composer require elasticsearch/elasticsearch
ログイン後にコピー

次に、ES の IP アドレスとポート番号を設定する必要があります。 PHP アプリケーションで、ElasticSearch クラスを通じて ES クライアント接続をインスタンス化します。

require 'vendor/autoload.php'; use ElasticsearchClientBuilder; $client = ClientBuilder::create()->setHosts(['http://localhost:9200'])->build();
ログイン後にコピー

これで、PHP プログラムで ES クライアント接続が初期化されました。次に、全文検索とデータ分析を実行してみましょう。

全文検索

テキストベースのデータの場合、ES は強力な全文検索機能を提供します。 ES を使用した全文検索の例を次に示します。

$results = $client->search([ 'index' => 'my_index', 'body' => [ 'query' => [ 'match' => [ 'field_name' => 'search_text' ] ] ] ]);
ログイン後にコピー

この例では、一致クエリを実行して、インデックス my_index 内の field_name フィールドの search_text テキストを検索します。 ES は一致するすべての結果を返し、必要に応じてページング、フィルタリング、並べ替え操作を実行できます。

データ集約

集約操作は、ユーザーがデータをより簡単に理解し、分析できるようにする ES のもう 1 つの重要な機能です。以下は、データ集約に ES を使用する方法を示す簡単な例です。

$results = $client->search([ 'index' => 'my_index', 'body' => [ 'query' => [ 'match_all' => [] ], 'aggs' => [ 'group_by_field' => [ 'terms' => [ 'field' => 'field_name' ] ] ] ] ]);
ログイン後にコピー

この例では、集約操作を実行し、インデックス my_index の field_name フィールドをグループ化します。 ES は、各グループのドキュメントの数とその他の関連情報を返します。

検索パフォーマンスの最適化

ES アプリケーションのパフォーマンスを向上させるには、いくつかのベスト プラクティスの原則に従う必要があります。たとえば、ES 検索操作を実行するときは、パフォーマンスとユーザー エクスペリエンスを向上させるために、過度の一致する検索結果を最小限に抑える必要があります。この目標を達成するには、クエリ キャッシュ、フィルター キャッシュ、キャッシュされたフィルターなど、検索リクエストに複数のオプティマイザーを設定できます。

結論

この記事では、ES の基本的な概念と、PHP と ES の使用方法を紹介しました。 ES は強力な全文検索機能とデータ分析機能を提供し、大量のデータを処理および管理するアプリケーションにとって非常に優れたソリューションです。オープンソースベースのツールなので、PHP などの複数の言語を使用してアクセスして統合できます。全文検索やデータ分析用のアプリケーションを設計している場合、ES は間違いなく試してみる価値のある選択肢です。

以上が全文検索とデータ分析に PHP と ElasticSearch を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!