CakePHP は、Web アプリケーションを開発するための豊富な機能とツールを提供する人気のある PHP フレームワークです。 Elasticsearch も、全文検索と分析に使用される人気のあるツールです。この記事では、CakePHPでElasticsearchを使う方法を紹介します。
まず、CakePHP と統合するために Elasticsearch コンポーネントをインストールする必要があります。利用可能なコンポーネントは多数ありますが、ここでは Elasticsearch が公式に提供する PHP クライアントである elasticsearch-php コンポーネントを使用します。
Composer を使用してコンポーネントをインストールします:
composer require elasticsearch/elasticsearch
次に、Elasticsearch の接続を構成する必要があります。 config/app.php ファイルに、次の設定を追加します。
'elastic' => [ 'host' => 'localhost',// Elasticsearch主机 'port' => '9200',// Elasticsearch端口 ],
次に、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', ]);// 关联关系 } }
これで、Elasticsearch インデックスを作成できます。バージョン 4.x より前では、次のコマンドを使用します:
bin/cake elasticsearch create_index ElasticsearchModel
バージョン 4.x 以降では、次のコマンドを使用します:
bin/cake elasticsearch:indices create_indexes ElasticsearchModel
次に、ドキュメントを追加できます。コントローラーでは、次のコードを作成できます。
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.')); } }
これで、ドキュメントを検索できるようになります。コントローラーでは、次のコードを記述できます。
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 を使用して、検索結果を表示できます。
ドキュメントを削除する必要がある場合は、次のコードを使用できます:
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 サイトの他の関連記事を参照してください。