Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk menggunakan Sphinx dengan CakePHP?
CakePHP ialah rangka kerja pembangunan aplikasi web yang sangat baik yang menyediakan fungsi berkuasa dan reka bentuk yang fleksibel. Sphinx ialah enjin carian teks penuh popular yang membantu kami memproses sejumlah besar data dengan cekap.
Dalam artikel ini, kami akan memperkenalkan cara menggunakan Sphinx dengan CakePHP untuk mengendalikan keperluan carian kami dengan lebih baik.
Mula-mula, kita perlu memasang Sphinx. Sphinx menyediakan pelbagai kaedah pemasangan, termasuk pemasangan kod sumber, pemasangan pakej binari, dsb. Di sini, kami memperkenalkan menggunakan APT di bawah Ubuntu Linux untuk memasang Sphinx.
Buka terminal dan masukkan arahan berikut:
sudo apt-get update
sudo apt-get install sphinxsearch
Selepas pemasangan selesai, kita boleh menggunakan arahan berikut untuk menyemak Adakah Sphinx dipasang dengan betul:
sudo /usr/bin/searchd
Jika semuanya baik-baik saja, anda sepatutnya dapat melihat output yang serupa dengan yang berikut:
Keluaran Sphinx 3.1.1-id64- (commit 4b8c4635)
Hak Cipta (c) 2001-2020, Andrew Aksyonoff
Hak Cipta (c) 2008-2020, Sphinx Technologies Inc (http://sphinxsearch.com)
Seterusnya, kita perlu mengkonfigurasi Sphinx agar sesuai dengan keperluan kita. Fail konfigurasi Sphinx terletak di /etc/sphinxsearch/sphinx.conf. Kita boleh mengedit fail ini menggunakan arahan berikut:
sudo nano /etc/sphinxsearch/sphinx.conf
Berikut ialah contoh konfigurasi mudah:
sumber src1
{
type = mysql sql_host = localhost sql_user = username sql_pass = password sql_db = database sql_query = SELECT id, title, content FROM articles
}
indeks idx1
{
source = src1 path = /var/lib/sphinxsearch/data/idx1 docinfo = extern morphology = stem_en charset_type = utf-8 min_word_len = 3
}
dicari
{
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
}
Di sini kami mentakrifkan sumber data bernama src1 dan menggunakan pangkalan data MySQL untuk mendapatkan data Jadual data yang akan diambil ialah artikel, dan medan data yang akan diambil ialah id, tajuk dan kandungan.
Seterusnya, indeks bernama idx1 ditakrifkan, src1 digunakan sebagai sumber data dan fail indeks disimpan dalam direktori /var/lib/sphinxsearch/data/idx1.
Akhir sekali, beberapa parameter pelayan yang dicari ditentukan, seperti mendengar IP dan port, laluan fail log, tamat masa pertanyaan, dsb.
Seterusnya, cipta model kami dalam CakePHP. Kita boleh menggunakan arahan berikut untuk mencipta kelas model bernama Artikel:
./bin/cake bake model Article
Selepas dijalankan, CakePHP secara automatik akan mencipta kelas model bernama Article di bawah src/Model Kelas model artikel.
Akhir sekali, kita perlu menulis kod pengawal CakePHP untuk mengendalikan permintaan carian. Berikut ialah contoh mudah:
namespace AppController;
gunakan CakeCoreExceptionException;
gunakan CakeUtilitySecurity;
gunakan CakeUtilityHash;
gunakan CakeCoreExceptionException;
gunakan CakeUtilitySecurity;
gunakan CakeUtilityHash;
gunakan Cake;
class ArticlesController memanjangkan AppController
{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')); }}Di sini kita mula-mula memuatkan kelas model Articles dan mendapatkan kunci carian bernama "q" dalam parameter pertanyaan HTTP Character . Kemudian buat objek SphinxClient, tetapkan alamat dan port pelayan Sphinx, dan gunakan mod SPH_MATCH_ALL untuk pertanyaan carian. Seterusnya, ekstrak id daripada hasil yang dikembalikan oleh Sphinx dan cari data artikel ini dalam model Artikel. Akhir sekali, paparkan hasil pertanyaan dalam paparan. Melalui langkah di atas, kami boleh menggunakan Sphinx untuk melaksanakan carian teks penuh dalam CakePHP. Dalam pembangunan sebenar, kami boleh mengembangkan dan mengoptimumkan lagi fungsi carian mengikut keperluan untuk memenuhi keperluan perniagaan yang berbeza.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan Sphinx dengan CakePHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!