PHP+Sphinx+Mysql开发搜索引擎详细实例讲解
大家听到搜索引擎都会感觉很难写,一点思路都没有,其实PHP也可以做搜索引擎的开发,不过PHP需要结合sphinx和mysql才可以开发出我们想要的搜索引擎,想了解PHP是如何进行搜索引擎开发的嘛!一起来看看吧!!
首先我们下载Sphinx这个工具,下载地址官网下载地址:www.sphinxsearch.com,找到sphinx-2.2.10-release-win64.zip,64位的下载这个,解压到我们的PHP运行目录下面,为后面网页查看结果方便。
sphinx介绍:
Sphinx 是SQL Phrase Index(查询词组索引)的缩写,Sphinx是一个基于SQL的全文检索引擎,它提供的API接口包括:PHP,Python,Perl,Ruby,java等,同时为MySQL也设计了一个引擎插件SphinxSE,它是一个分布式的全文检索系统。
优点:
高速的建立索引可达到10M/s
高性能的搜索(在2-4G的文本数据上,平均每次检索响应的时间小于0.1秒)
可处理海量数据(目前已知可以处理100G的文本数据,在单一的CPU的系统上可处理100M的文档)
提供的优秀的相关度算法,基于短语相似度和统计BM2的复合Ranking的方法
支持分布式搜索
提供文档片段生成功能
可作为Mysql的存储引擎提供搜索服务
支持布尔,短语,词语相似度等多种检索模式
缺点:
必须要有主键
主键必须为整数
不负责数据存储
配置不灵活
解压之后的sphinx结构如图所示:
下面就是进行我们的相关配置,看到图中的sphinx-min.conf.in,复制到我们的bin目录下面方便一会使用改名字为sphinx.conf,
修改里面的内容:
source src1 { type = mysql sql_host = localhost #主机地址 sql_user = root#帐号 sql_pass = #密码 sql_db = sphinx #数据库 sql_port = 3306 # 数据库端口 3306 sql_query = SELECT id, name, age FROM users #查询语句 sql_attr_uint = group_id sql_attr_timestamp = date_added sql_query_pre = set names utf8 #数据库编码 } index test1 { source = src1 path = D:/myapaphe/www/sphinx/data #这个一定要配置 charset_type = utf-8 #指定编码 ngram_len = 1 #要找中文需指定为1. ngram_chars = U+3000..U+2FA1F } indexer { mem_limit = 128M } searchd { listen = 9312 listen = 9306:mysql41 log = D:\myapaphe\www\sphinx\log\searchd.log #进程日志 query_log = D:\myapaphe\www\sphinx\log\query.log #查询日志 read_timeout = 5 max_children = 30 pid_file = D:\myapaphe\www\sphinx\log\searchd.pid seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 workers = threads # for RT to work binlog_path = D:\myapaphe\www\sphinx\data }
上面这些一定要配置完毕,路径一定要符合自己的路径。
接下来生成查询索引:
安装searchd服务:
接下来加载配置文件:
启动服务:
OK前面的配置工作,以及服务启动已经完成现在开始代码:
在sphinx下面的api文件夹下面创建test3.php,运行test3.php
<?php require ( "sphinxapi.php" ); $s = new SphinxClient(); $s->SetServer('localhost',9312); $result = $s->Query('高七'); echo '<pre class="brush:php;toolbar:false">'; print_r($result);
乱码是因为cmd默认是gbk编码,我们放到浏览器中去查看:
我们看到sphinx查到的并不是完整的结果而是把id返给了我们,让我们根据id再去查数据。
下面进行查询时间比对:
我是在4万多条数据测试的时间是0.001s,我们看下mysql的查询需要多久:
我们看到需要0.04s,数据不多,结果没有那么明显,不过0.039s的差距已经不小了。
到此sphinx的整合到此完毕,希望可以帮到大家。
相关推荐:
Atas ialah kandungan terperinci PHP+Sphinx+Mysql开发搜索引擎详细实例讲解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
