织梦DedeCMS v5.7全文检索使用说明(sphinx)
简介
织梦DedeCMS是一款常用的CMS系统,其中的全文检索功能相当实用。为了提升全文检索的效率和准确度,我们可以使用sphinx进行优化,提高搜索速度和搜索结果的相关性。
安装sphinx
- 下载sphinx
可以在sphinx官网下载最新的sphinx安装包。
- 安装sphinx
以Linux系统为例,下载后解压缩,进入解压缩后的目录,执行以下命令安装:
bash
./configure --prefix=/usr/local/sphinx --with-mysql --with-pgsql
make && make install
安装完成后,可以启动sphinx服务:
bash
/usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf
启动成功后,可以通过命令ps aux | grep searchd
查看sphinx进程是否在运行中。
安装sphinx扩展
- 进入DedeCMS根目录,找到
include
目录下的sphinxapi.php
文件,在其中添加以下代码:
php
define('SPHINX_SEARCHD_HOST', 'localhost'); // sphinx服务端地址
define('SPHINX_SEARCHD_PORT', 9312); // sphinx服务端端口
- 在DedeCMS后台,进入插件管理,安装扩展模块“全文检索(sphinx)”并启用。
配置sphinx索引
-
在织梦DedeCMS后台,进入“系统管理”-“高级参数”-“全站基本参数”,勾选“启用Sphinx全站搜索”,并填写sphinx服务端地址和端口。
-
在sphinx服务端配置文件
sphinx.conf
中添加索引配置,比如:
```
source my_source
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = my_password
sql_db = my_database
sql_port = 3306
sql_query = SELECT id, title, content FROM my_table WHERE status = 1
sql_attr_uint = id
}
index my_index
{
source = my_source
path = /usr/local/sphinx/var/data/my_index
docinfo = extern
mlock = 0
morphology = stem_en
min_word_len = 2
charset_type = utf-8
html_strip = 1
ignore_chars = U+0080..U+00FF
min_infix_len = 3
enable_star = 1
}
```
这段配置将创建一个名为“my_index”的索引,索引内容取自MySQL中名为“my_table”的表的“id”、“title”、“content”字段(这里只搜索“status”字段值为1的记录),并对内容进行词干分析、停止词过滤等处理。
- 建立索引
在sphinx服务端执行以下命令,建立索引:
bash
/usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --all
- 重启sphinx服务端
bash
/usr/local/sphinx/bin/searchd --stop
/usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf
使用sphinx全文检索
在代码中调用以下接口即可利用sphinx进行全文检索:
$searchtype = '7'; // 全文检索类型为sphinx
$keyword = '搜索关键词';
$channelid = '1'; // 搜索的栏目ID
$orderby = 'score'; // 按相关性排序
$orderway = 'desc'; // 降序排列
$pagesize = '10'; // 每页展示的搜索结果数量
$offset = '0'; // 搜索结果的起始偏移量(从0开始)
include(DEDEINC.'/dede_search.class.php');
$so = new DedeSearch($searchtype, $channelid, $orderby, $orderway, $pagesize, $offset, $keyword);
$result = $so->Display();
在搜索结果中,可以通过以下代码获取搜索结果数量和搜索结果列表:
$num = $so->RecordCount();
$artlist = $so->GetArray();
示例
以下示例演示如何利用sphinx搜索文章标题中包含“织梦”的文章:
- 配置sphinx索引
在sphinx.conf
文件中添加以下索引配置:
```
source demo_source
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = my_password
sql_db = my_database
sql_port = 3306
sql_query = SELECT id, title, description, content FROM dede_archives WHERE title LIKE '%织梦%' AND typeid = 1
sql_attr_uint = id
}
index demo_index
{
source = demo_source
path = /usr/local/sphinx/var/data/demo_index
docinfo = extern
mlock = 0
morphology = stem_en
min_word_len = 2
charset_type = utf-8
html_strip = 1
ignore_chars = U+0080..U+00FF
min_infix_len = 3
enable_star = 1
}
```
这段配置将创建一个名为“demo_index”的索引,索引内容取自DedeCMS中文章标题中含有“织梦”的记录(且文章所属栏目为“1”),并对内容进行词干分析、停止词过滤等处理。
- 建立索引
在sphinx服务端执行以下命令,建立索引:
bash
/usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf demo_index --rotate
注意,这里因为只建立demo_index这一个索引,为了节省时间可以只创建这一个索引,而不是创建所有索引。
- 搜索
在代码中调用以下接口进行搜索:
php
$searchtype = '7'; // 全文检索类型为sphinx
$keyword = '织梦';
$channelid = '1'; // 搜索的栏目ID
$orderby = 'score'; // 按相关性排序
$orderway = 'desc'; // 降序排列
$pagesize = '10'; // 每页展示的搜索结果数量
$offset = '0'; // 搜索结果的起始偏移量(从0开始)
include(DEDEINC.'/dede_search.class.php');
$so = new DedeSearch($searchtype, $channelid, $orderby, $orderway, $pagesize, $offset, $keyword);
$num = $so->RecordCount();
$artlist = $so->GetArray();
print_r($artlist);
这段代码将返回包含“织梦”的文章列表。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:织梦DedeCMS v5.7全文检索使用说明(sphinx) - Python技术站