CakePHP est un framework PHP populaire qui fournit des fonctionnalités et des outils riches pour développer des applications Web. Elasticsearch est un autre outil populaire utilisé pour la recherche et l'analyse en texte intégral. Dans cet article, nous présenterons comment utiliser Elasticsearch avec CakePHP.
Tout d'abord, nous devons installer un composant Elasticsearch à intégrer à CakePHP. De nombreux composants sont disponibles, mais nous utiliserons le composant elasticsearch-php, qui est le client PHP officiellement fourni par Elasticsearch.
Installez le composant à l'aide de Composer :
composer require elasticsearch/elasticsearch
Ensuite, nous devons configurer la connexion pour Elasticsearch. Dans le fichier config/app.php, ajoutez la configuration suivante :
'elastic' => [ 'host' => 'localhost',// Elasticsearch主机 'port' => '9200',// Elasticsearch端口 ],
Maintenant, nous devons créer le modèle pour interagir avec Elasticsearch. Créez un fichier appelé ElasticsearchModel.php dans src/Model et écrivez le code suivant :
<?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', ]);// 关联关系 } }
Maintenant, nous pouvons créer l'index Elasticsearch. Avant la version 4.x, utilisez la commande suivante :
bin/cake elasticsearch create_index ElasticsearchModel
Après la version 4.x, utilisez la commande suivante :
bin/cake elasticsearch:indices create_indexes ElasticsearchModel
Ensuite, nous pouvons ajouter des documents. Dans le contrôleur, nous pouvons écrire le code suivant :
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.')); } }
Maintenant, nous pouvons rechercher des documents. Dans le contrôleur, on peut écrire le code suivant :
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')); }
On peut utiliser Paginator dans la View pour afficher les résultats de la recherche.
Si vous devez supprimer un document, nous pouvons utiliser le code suivant :
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']); }
Conclusion
Ce qui précède explique comment utiliser Elasticsearch dans CakePHP. Dans ce processus, nous avons utilisé le composant elasticsearch-php pour nous connecter à Elasticsearch, créer un modèle Elasticsearch, créer un index, ajouter des documents, rechercher des documents et supprimer des documents.
Pour les développeurs, utiliser Elasticsearch est un moyen simple et efficace de mettre en œuvre la recherche et l'analyse en texte intégral. L'utilisation d'Elasticsearch dans CakePHP peut nous aider à créer des applications Web plus efficacement et à offrir une meilleure expérience utilisateur et de meilleures performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!