Maison > Article > développement back-end > Comment utiliser Sphinx avec CakePHP ?
CakePHP est un excellent framework de développement d'applications Web qui offre des fonctions puissantes et une conception flexible. Sphinx est un moteur de recherche en texte intégral populaire qui nous aide à traiter efficacement d'énormes quantités de données.
Dans cet article, nous présenterons comment utiliser Sphinx dans CakePHP pour mieux répondre à nos besoins de recherche.
Tout d'abord, nous devons installer Sphinx. Sphinx propose une variété de méthodes d'installation, notamment l'installation du code source, l'installation du package binaire, etc. Ici, nous présentons l'utilisation d'APT sous Ubuntu Linux pour installer Sphinx.
Ouvrez le terminal et entrez la commande suivante :
sudo apt-get update
sudo apt-get install sphinxsearch
Après le l'installation est terminée, nous pouvons vérifier si Sphinx est correctement installé en utilisant la commande suivante :
sudo /usr/bin/searchd
Si tout va bien, vous devriez pouvoir voir le résultat similaire à celui-ci : #🎜 🎜#
Sphinx 3.1.1-id64-release (commit 4b8c4635)Copyright (c) 2001-2020, Andrew Aksyonoff
Copyright (c) 2008 -2020, Sphinx Technologies Inc (http: //sphinxsearch.com)
#🎜 🎜 #source src1 # 🎜🎜 # {# 🎜🎜 #
type = mysql sql_host = localhost sql_user = username sql_pass = password sql_db = database sql_query = SELECT id, title, content FROM articles# 🎜🎜 #} # 🎜🎜 ## 🎜🎜 # index idx1 # 🎜🎜 # {# 🎜🎜 # #
source = src1 path = /var/lib/sphinxsearch/data/idx1 docinfo = extern morphology = stem_en charset_type = utf-8 min_word_len = 3# 🎜🎜 #} # 🎜🎜 ## 🎜 🎜 🎜 #searchd{
listen = 127.0.0.1:9312 log = /var/log/sphinxsearch/searchd.log query_log = /var/log/sphinxsearch/query.log read_timeout = 5 max_children = 30 pid_file = /var/run/sphinxsearch/searchd.pid max_matches = 1000 seamless_rotate = 1
Ici, nous définissons une source de données nommée src1 et utilisons la base de données MySQL pour la récupération des données. La table de données récupérée est constituée d'articles, le. les champs de données à récupérer sont l'identifiant, le titre et le contenu.
Ensuite, un index nommé idx1 est défini, src1 est utilisé comme source de données et le fichier d'index est enregistré dans le répertoire /var/lib/sphinxsearch/data/idx1.
Créer un modèle CakePHP
Ensuite, créez notre modèle dans CakePHP. Nous pouvons utiliser la commande suivante pour créer une classe de modèle nommée Article :
./bin/cake bake model Article
Après l'exécution, CakePHP sera automatiquement sous src/Model Create une classe modèle appelée Article.
Écrire le code du contrôleur CakePHPnamespace AppController;
use CakeCoreExceptionException;
use CakeUtilitySecurity;use CakeUtilityHash;#🎜🎜 # use CakeORMTableRegistry;
use CakeHttpClient;public function search() { $this->loadModel('Articles'); $q = $this->request->getQuery('q'); $indexer = new SphinxClient(); $indexer->setServer('localhost', 9312); $indexer->setMatchMode(SphinxClient::SPH_MATCH_ALL); $result = $indexer->query($q, 'idx1'); $ids = Hash::extract($result['matches'], '{n}.id'); $articles = $this->Articles->find()->where(['id IN' => $ids]); $this->set(compact('articles', 'q')); }
Créez ensuite un objet SphinxClient, définissez l'adresse et le port du serveur Sphinx et utilisez le mode SPH_MATCH_ALL pour les requêtes de recherche.
Ensuite, extrayez les identifiants des résultats renvoyés par Sphinx et recherchez ces données d'article dans le modèle Articles.
Enfin, affichez les résultats de la requête dans la vue.
Grâce aux étapes ci-dessus, nous pouvons utiliser Sphinx pour implémenter la recherche en texte intégral dans CakePHP. Dans le cadre du développement réel, nous pouvons étendre et optimiser davantage la fonction de recherche selon les besoins pour répondre aux différents besoins commerciaux.
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!