Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan Sphinx dengan CakePHP?

Bagaimana untuk menggunakan Sphinx dengan CakePHP?

PHPz
PHPzasal
2023-06-05 22:10:321472semak imbas

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.

  1. Pasang Sphinx

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)

  1. Mengkonfigurasi Sphinx

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.

  1. Mencipta model CakePHP

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.

  1. Tulis kod pengawal CakePHP

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;

gunakan Cake CakeHttpClient;

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn