您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
phpcms全文检索功能实现集成sphinx的方法
怀蝶2025-06-09phpcms教程已有人查阅
导读sphinx是俄罗斯人开发的一个搜索引擎,基于c++编写,具有强大的检索能力,本身支持中文单个字符的检索,中文分词需要额外的插件Coreseek,但该插件已很久未更新
sphinx配置
sphinx是俄罗斯人开发的一个搜索引擎,基于c++编写,具有强大的检索能力,本身支持中文单个字符的检索,中文分词需要额外的插件Coreseek,但该插件已很久未更新,github用户eric1688基于sphinx 2.2.9版本改写了可以较好支持中文分词的sphinx for chinese,本文配置均基于此版本,下载地址在此,向作者致敬。
另:如果是别的系统,建议使用elastic search开发,对中文分词的支持更完善一些,社区更为活跃,但需求不复杂的话,sphinx已足够,而且配置相比更方便些。安装sphinx
本文基于ubuntu 18.04安装sphinx,从上述地址下载压缩包,以下示例大部分基于作者的说明
下载解压$ git clone https://github.com/eric1688/sphinx
安装gcc 和 mysqlsudo apt update
配置中文支持$ tar -xvf xdict_1.1.tar.gz $ /usr/local/sphinx/bin/mkdict xdict_1.1.txt xdict
从xdict_1.1.txt生成xdict文件,xdict_1.1.txt文件可以根据需要进行修改$ cp xdict /usr/local/sphinx/etc/
配置sphinx.conf
sphinx.conf是最关键的一部分,sphinx的运作主要基于该文件。以下是本人的配置文件,结合phpcms数据库进行配置,该文件存放于bin子目录中# 主索引数据源
phpcms(版本:phpcmsv9 9.6.3)集成了sphinx的接口,也有相关的文档,但对应的sphinx版本较老,因此要正常使用,需要做一定的修改后台配置
模块->全站搜索->模块配置
基本配置:“是否启用全站搜索”选择“是”
sphinx全文索引配置:选择启用,服务器主机地址:192.168.91.130 端口号:9312相关代码修改
phpcms>modules>search>index.php......
从下载的安装包api目录中找到sphinxapi.php,复制到phpcms>modules>search>classes目录中,并改名为sphinxapi.class.php定时索引(todo)配置完毕,如有疑问请留言。
sphinx是俄罗斯人开发的一个搜索引擎,基于c++编写,具有强大的检索能力,本身支持中文单个字符的检索,中文分词需要额外的插件Coreseek,但该插件已很久未更新,github用户eric1688基于sphinx 2.2.9版本改写了可以较好支持中文分词的sphinx for chinese,本文配置均基于此版本,下载地址在此,向作者致敬。
另:如果是别的系统,建议使用elastic search开发,对中文分词的支持更完善一些,社区更为活跃,但需求不复杂的话,sphinx已足够,而且配置相比更方便些。安装sphinx
本文基于ubuntu 18.04安装sphinx,从上述地址下载压缩包,以下示例大部分基于作者的说明
下载解压$ git clone https://github.com/eric1688/sphinx
$ cd sphinx
编译(假设安装到/usr/local/sphinx目录,下同)安装gcc 和 mysqlsudo apt update
sudo apt install build-essential
sudo apt install mysql-server
编译安装sphinx$ ./configure --prefix=/usr/local/sphinx --prefix 指定安装路径 --with-mysql 编译mysql支持 --with-pgsql 编译pgsql支持
$ make
$ make install
安装完成后,sphinx目录下应有bin、etc、share三个子目录,新建data和log两个子目录配置中文支持$ tar -xvf xdict_1.1.tar.gz $ /usr/local/sphinx/bin/mkdict xdict_1.1.txt xdict
从xdict_1.1.txt生成xdict文件,xdict_1.1.txt文件可以根据需要进行修改$ cp xdict /usr/local/sphinx/etc/
配置sphinx.conf
sphinx.conf是最关键的一部分,sphinx的运作主要基于该文件。以下是本人的配置文件,结合phpcms数据库进行配置,该文件存放于bin子目录中# 主索引数据源
source main
{
type = mysql
sql_host = 192.168.91.1 #phpcms所使用数据库地址
sql_user = sphinx #用户名
sql_pass = sphinx #密码
sql_db = phpcms_v9 #phpcms数据库名字
sql_port = 3306 #数据库端口
sql_query_pre = SET NAMES utf8
sql_query_pre = REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search
sql_query = SELECT searchid, adddate, siteid, typeid, id as news_id, data FROM v9_search WHERE searchid>=$start AND searchid<=$end
sql_query_range = SELECT 1,max_doc_id FROM v9_sphinx_counter WHERE counter_id=1
sql_range_step = 5000
sql_attr_uint = typeid
sql_attr_uint = siteid
sql_attr_uint = news_id
sql_attr_timestamp = adddate
sql_query_info = SELECT * FROM v9_search WHERE searchid=$id
}
#增量索引数据源
source delta
{
type = mysql
sql_host = 192.168.91.1 #phpcms所使用数据库地址
sql_user = sphinx #用户名
sql_pass = sphinx #密码
sql_db = phpcms_v9 #phpcms数据库名字
sql_port = 3306 #数据库端口
sql_query_pre = SET NAMES utf8
sql_query_pre = REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search
sql_query = SELECT searchid, adddate, siteid, typeid, id as news_id, data FROM v9_search WHERE searchid>=$start AND searchid<=$end
sql_query_range = SELECT 1,max_doc_id FROM v9_sphinx_counter WHERE counter_id=1
sql_range_step = 5000
sql_attr_uint = typeid
sql_attr_uint = siteid
sql_attr_uint = news_id
sql_attr_timestamp = adddate
sql_query_info = SELECT * FROM v9_search WHERE searchid=$id
}
#主索引
index main
{
source = main
path = /usr/local/sphinx/data/main
charset_type = utf-8
chinese_dictionary = /usr/local/sphinx/etc/xdict
}
#增量索引
index delta
{
source = delta
path = /usr/local/sphinx/data/delta
charset_type = utf-8
chinese_dictionary = /usr/local/sphinx/etc/xdict
}
indexer
{
mem_limit = 128M
}
searchd
{
listen = 9312
listen = 9306:mysql41 #监听端口,配置完成后可用于测试
log = /usr/local/sphinx/log/searchd.log
query_log = /usr/local/sphinx/log/query.log
read_timeout = 5
max_children = 30
pid_file = /usr/local/sphinx/log/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
binlog_path = /usr/local/sphinx/data
}
建立索引文件,并开启服务# 以下命令执行的当前目录均为/usr/local/sphinx
$ ./indexer --all
$ ./searchd
测试# 假设sphinx所在服务器ip为192.168.91.130
$ mysql -h192.168.91.130 -P9306
mysql> select * from main;
+------+------------+--------+--------+---------+
| id | adddate | siteid | typeid | news_id |
+------+------------+--------+--------+---------+
| 941 | 1585707168 | 1 | 1 | 231 |
| 942 | 1585707168 | 1 | 1 | 232 |
| 943 | 1585707168 | 1 | 1 | 233 |
| 944 | 1585707168 | 1 | 1 | 234 |
| 945 | 1585707168 | 1 | 1 | 235 |
| 946 | 1585707168 | 1 | 1 | 236 |
| 947 | 1585707168 | 1 | 1 | 237 |
| 948 | 1585707168 | 1 | 1 | 238 |
| 949 | 1585707168 | 1 | 1 | 239 |
| 950 | 1585707168 | 1 | 1 | 240 |
| 951 | 1585707168 | 1 | 1 | 241 |
| 952 | 1585707168 | 1 | 1 | 242 |
| 953 | 1585707168 | 1 | 1 | 243 |
| 954 | 1585707168 | 1 | 1 | 244 |
| 955 | 1585707168 | 1 | 1 | 245 |
| 956 | 1585707168 | 1 | 1 | 246 |
| 957 | 1585707168 | 1 | 1 | 247 |
| 958 | 1585707168 | 1 | 1 | 248 |
+------+------------+--------+--------+---------+
20 rows in set (0.00 sec)
phpcms相关配置和部分文件修改(todo)phpcms(版本:phpcmsv9 9.6.3)集成了sphinx的接口,也有相关的文档,但对应的sphinx版本较老,因此要正常使用,需要做一定的修改后台配置
模块->全站搜索->模块配置
基本配置:“是否启用全站搜索”选择“是”
sphinx全文索引配置:选择启用,服务器主机地址:192.168.91.130 端口号:9312相关代码修改
phpcms>modules>search>index.php......
//如果开启sphinx
if ($setting['sphinxenable']) {
$sphinx = pc_base::load_app_class('search_interface', '', 0);
$sphinx = new search_interface();
$offset = $pagesize * ($page - 1);
//因所使用的sphinx版本不支持“id”作为排序的名字,所以用news_id替代,并非必须新闻模型
$res = $sphinx->search($q, array($siteid), array($typeid), array($search_time, SYS_TIME), $offset, $pagesize, '@weight desc, news_id desc');
$totalnums = $res['total'];
//如果结果不为空
if (!empty($res['matches'])) {
$result = $res['matches'];
}
}
//如果结果不为空
if (!empty($result) || !empty($commend['id'])) {
//开启sphinx后文章id取法不同
if ($setting['sphinxenable']) {
foreach ($result as $_k => $_v) {
//根据sphinx版本不同,$result数组中格式稍有不同,此处稍作修改
// $sids[] = $_v['attrs']['id'];
$sids[] = $_v['attrs']['news_id'];
}
$sort_str = implode(",", $sids);
}
/**
* 如果表名为空,则为黄页模型
*/
if (empty($this->content_db->model_tablename)) {
$this->content_db = pc_base::load_model('yp_content_model');
$this->content_db->set_model($modelid);
}
if ($setting['sphinxenable']) {
//页面展示的搜索结果没有按照sphinx给出的权重排序,此处进行调整
// $data = $this->content_db->listinfo($where, "id desc", 1, $pagesize);
$data = $this->content_db->listinfo($where, "field(id," . $sort_str . ")", 1, $pagesize);
$pages = pages($totalnums, $page, $pagesize);
} else {
$data = $this->content_db->select($where, '*');
$pages = $this->db->pages;
$totalnums = $this->db->number;
}
引入sphinx api从下载的安装包api目录中找到sphinxapi.php,复制到phpcms>modules>search>classes目录中,并改名为sphinxapi.class.php定时索引(todo)配置完毕,如有疑问请留言。
本文标签:
很赞哦! ()
上一篇:PHPCMS标签使用方法示例
下一篇:phpcms手机站搭建方法
相关教程
- JavaScript Map对象的get()方法:不止是取值,更是高效数据检索的基石
- discuz的sphinx全文检索搜索引擎方案
- Discuz! X3数据字典检索查询
- 易优cms标签likearticle检索tag和关键词的用法示例
- ecshop订单列表增加商品检索的方法
- dedecms系统按字母检索搜索功能的实现方法
- 让dedecms自带搜索实现全文检索支持标题与内容的方法
- 织梦Dede织梦5.7全文检索使用说明sphinx示例
- dedecms5.7版本全文检索功能使用方法
- dedecms自带搜索实现全文检索的实例代码
- dedecms5.7全文检索sphinx安装使用详细教程示例
- 织梦cms自带搜索实现全文检索的方法
图文教程
Nginx常用伪静态规则(rewrite)-Discuz X3.2-WordPress-PHPCMS-EC
当我们从apache服务器转向Nginx服务器的时候,它们的伪静态规则就不一样了,所以你熟悉Nginx服务器的伪静态规则,自己写当然也好。不了解Nginx服务器的伪静态规则的
phpcms是什么,phpcms是做什么的
PHPCMS(PHP Content Manage System)是一款由文章、下载、图片、分类信息、影视、商城、采集、财务等20多个功能模块组成的强大、易用、可扩展的网站管理软件。
PHPCMS万能字段使用方法示例
phpcms在添加内容时,有时添加的数据是其他表中数据,比如我现在遇到的一个问题,A栏目是一个用来发布所有公司介绍的栏目,当前台的会员注册被后台管理员批准可以进入后台发布找到A栏目发布的新闻资讯
phpcms列表页中怎么调用其下的所有子栏目
{pc:content action="category" catid="$catid" num="99" order="listorder ASC"}如果你的子栏目ID是8,9,10的话,条件哪里就写成in(8,9,10)
相关源码
-
pbootcms模板(PC+WAP)APP应用软件下载类官网源码为APP应用软件官网打造的响应式解决方案,PC端与移动端(WAP)数据实时同步,一次更新全网生效,满足多终端用户无缝体验需求。查看源码 -
(PC+WAP)货物运输快递物流汽车贸易pbootcms模板下载为货运代理、汽车贸易及快递企业设计的全终端适配网站系统,整合运单追踪与车辆展示核心功能模块原生开发的DIV+CSS架构,支持WebP图像压缩技术。查看源码 -
(自适应手机端)英文外贸电子产品通用pbootcms模板源码下载为电子产品外贸企业设计的响应式网站模板,采用PbootCMS开发内核,支持多语言展示。模板默认集成产品展示系统、询价表单模块和企业资质展示区,满足跨境贸易基础需求。整站采用模块化设计,便于扩展业务场景。查看源码 -
(PC+WAP)玻璃钢不锈钢钢材环保设备pbootcms网站模板采用PbootCMS内核开发的响应式网站模板,为玻璃钢环保设备制造、不锈钢钢材贸易企业设计,适配产品展示及企业服务场景。通过自适应技术实现PC与WAP端数据实时同步查看源码 -
(PC+WAP)生活资讯百科新闻门户类pbootcms网站模板为生活资讯、百科门户类企业打造的高性能网站模板,基于PbootCMS开源内核开发,采用HTML5响应式架构,PC与手机端实时数据同步,覆盖全终端用户浏览场景。查看源码 -
(PC+WAP)铝合金门窗定制pbootcms网站模板源码为铝合金门窗、定制门窗企业打造的高性能网站模板,基于PbootCMS开源内核开发,采用HTML5自适应架构,PC与手机端数据实时同步,覆盖全终端用户交互场景。查看源码
| 分享笔记 (共有 篇笔记) |
