ホームページ >バックエンド開発 >PHPチュートリアル >CakePHP で Elasticsearch を使用するにはどうすればよいですか?

CakePHP で Elasticsearch を使用するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-06-03 21:31:511047ブラウズ

CakePHP は、Web アプリケーションを開発するための豊富な機能とツールを提供する人気のある PHP フレームワークです。 Elasticsearch も、全文検索と分析に使用される人気のあるツールです。この記事では、CakePHPでElasticsearchを使う方法を紹介します。

  1. Elasticsearch コンポーネントのインストール

まず、CakePHP と統合するために Elasticsearch コンポーネントをインストールする必要があります。利用可能なコンポーネントは多数ありますが、ここでは Elasticsearch が公式に提供する PHP クライアントである elasticsearch-php コンポーネントを使用します。

Composer を使用してコンポーネントをインストールします:

composer require elasticsearch/elasticsearch
  1. 接続を構成します

次に、Elasticsearch の接続を構成する必要があります。 config/app.php ファイルに、次の設定を追加します。

'elastic' => [
    'host' => 'localhost',// Elasticsearch主机
    'port' => '9200',// Elasticsearch端口
],
  1. モデルの作成

次に、Elasticsearch と対話するためのモデルを作成する必要があります。 src/Model に ElasticsearchModel.php というファイルを作成し、次のコードを記述します。

<?php
namespace AppModel;

use CakeElasticSearchIndex;

class ElasticsearchModel extends Index
{
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->setIndex('my_index');// Elasticsearch索引名称
        $this->setType('my_type');// Elasticsearch类型名称
        
        $this->primaryKey('id');// 主键
        $$this->belongsTo('Parent', [
            'className' => 'Parent',
            'foreignKey' => 'parent_id',
        ]);// 关联关系
    }
}
  1. インデックスの作成

これで、Elasticsearch インデックスを作成できます。バージョン 4.x より前では、次のコマンドを使用します:

bin/cake elasticsearch create_index ElasticsearchModel

バージョン 4.x 以降では、次のコマンドを使用します:

bin/cake elasticsearch:indices create_indexes ElasticsearchModel
  1. ドキュメントの追加

次に、ドキュメントを追加できます。コントローラーでは、次のコードを作成できます。

public function add()
{
    $this->request->allowMethod('post');
    $data = $this->request->data;

    $document = $this->ElasticsearchModel->newDocument();
    $document->id = $data['id'];
    $document->parent_id = $data['parent_id'];
    $document->title = $data['title'];
    $document->content = $data['content'];
    $document->body = $data['body'];

    if ($this->ElasticsearchModel->save($document)) {
        $this->Flash->success(__('The document has been saved.'));
        return $this->redirect(['action' => 'index']);
    } else {
        $this->Flash->error(__('The document could not be saved. Please, try again.'));
    }
}
  1. ドキュメントの検索

これで、ドキュメントを検索できるようになります。コントローラーでは、次のコードを記述できます。

public function search()
{
    $this->paginate = [
        'contain' => ['Parent'],
    ];

    $query = $this->request->getQuery('q');
    $documents = $this->ElasticsearchModel->find()
        ->contain(['Parent'])
        ->where(['title LIKE' => "%$query%"])
        ->paginate();

    $this->set(compact('documents'));
}

ビューで Paginator を使用して、検索結果を表示できます。

  1. ドキュメントの削除

ドキュメントを削除する必要がある場合は、次のコードを使用できます:

public function delete($id)
{
    $this->request->allowMethod(['post', 'delete']);
    $document = $this->ElasticsearchModel->find()->where(['id' => $id])->firstOrFail();
    if ($this->ElasticsearchModel->delete($document)) {
        $this->Flash->success(__('The document has been deleted.'));
    } else {
        $this->Flash->error(__('The document could not be deleted. Please, try again.'));
    }

    return $this->redirect(['action' => 'index']);
}

結論

上記はElasticsearchを使用したCakePHPメソッドです。このプロセスでは、elasticsearch-php コンポーネントを使用して Elasticsearch への接続、Elasticsearch モデルの作成、インデックスの作成、ドキュメントの追加、ドキュメントの検索、ドキュメントの削除を行いました。

開発者にとって、Elasticsearch の使用は、全文検索と分析を実装する簡単かつ効果的な方法です。 CakePHP で Elasticsearch を使用すると、Web アプリケーションをより効率的に構築し、より優れたユーザー エクスペリエンスとパフォーマンスを提供できます。

以上がCakePHP で Elasticsearch を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。