Maison  >  Article  >  développement back-end  >  Comment utiliser Sphinx avec CakePHP ?

Comment utiliser Sphinx avec CakePHP ?

PHPz
PHPzoriginal
2023-06-05 22:10:321415parcourir

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.

  1. Installer Sphinx

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)

    Configuring Sphinx
Ensuite, nous devons configurer Sphinx en fonction nos besoins. Le fichier de configuration Sphinx se trouve dans /etc/sphinxsearch/sphinx.conf. Nous pouvons éditer le fichier à l'aide de la commande suivante :

sudo nano /etc/sphinxsearch/sphinx.conf

Voici un exemple de configuration simple :

#🎜 🎜 #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.

Enfin, certains paramètres du serveur searchd sont définis, tels que l'IP et le port d'écoute, le chemin du fichier journal, le délai d'attente des requêtes, etc.

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 CakePHP
  1. Enfin, nous devons écrire le code du contrôleur CakePHP pour gérer les demandes de recherche. Voici un exemple simple :

namespace AppController;

use CakeCoreExceptionException;

use CakeUtilitySecurity;

use CakeUtilityHash;#🎜🎜 # use CakeORMTableRegistry;

use CakeHttpClient;
    class ArticlesController extends AppController
  1. {
  2. 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'));
    }
}

Ici, nous chargeons d'abord la classe de modèle Articles, Et obtenez le mot-clé de recherche nommé « q » dans les paramètres de requête HTTP.


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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn