织梦的搜索功能默认是支持模糊匹配的,但很多时候效果不佳,或者因为性能问题被管理员关闭了,配置模糊搜索主要涉及两个方面:
- 后台配置:开启和调整模糊搜索的基本开关和参数。
- 核心文件修改:通过修改PHP代码来优化或强制模糊搜索的逻辑,使其更强大、更灵活。
后台基础配置
这是最直接、最简单的配置方法,主要针对织梦默认的模糊搜索功能。
操作路径:登录织梦后台 -> 系统 -> 系统基本参数 -> 核心设置
在“核心设置”页面中,找到以下几个关键选项:
-
是否开启全站搜索
- 选项:
是/否 - 说明:这是全局的总开关,如果这里设置为“否”,那么搜索功能将完全失效,请确保此处为 “是”。
- 选项:
-
(关键) 搜索模式
- 选项:
精准/模糊 - 说明:这是控制搜索行为的核心选项。
- 精准:只有当搜索词与标题或内容完全一致时才能找到结果,搜索“织梦”,标题为“织梦CMS”可以找到,但标题为“我爱织梦”就找不到。
- 模糊或内容中包含搜索词,就能找到结果,搜索“织梦”,标题为“我爱织梦”也能找到。
- 配置建议:如果你想实现模糊搜索,请务必将此选项设置为 “模糊”。
- 选项:
-
(关键) 高级搜索开关
- 选项:
开启/关闭 - 说明:开启后,用户可以在搜索页面选择按“关键字”、“标题”、“作者”、“tag”等不同维度进行搜索,这本身就是一种更精细的“模糊”或“精准”控制。
- 配置建议:建议 “开启”,以提供更好的用户体验。
- 选项:
-
搜索间隔时间 (秒)
- 说明:用于防止恶意频繁搜索,对普通用户影响不大。
-
(重要) 全文搜索功能
- 选项:
不开启/开启 - 说明:这个选项与模糊搜索的性能密切相关。
- 不开启:搜索只在文章的标题和简介中进行,速度快,但结果不全面。
- 开启:搜索会在文章的标题、简介和内容全文中进行,结果最全面,但非常消耗服务器资源,如果网站数据量很大(比如超过10万篇文章),可能会导致网站卡顿甚至崩溃。
- 配置建议:
- 小型网站(数据量小):可以 “开启”,以获得最全面的搜索结果。
- 中大型网站(数据量大):建议 “不开启”,或者只在特定时间段(如访客少时)开启,然后重建全文索引。
- 选项:
仅通过后台配置,你可以将 “搜索模式” 设置为 “模糊”,并酌情开启 “全文搜索功能”,即可实现基础的模糊搜索。
核心文件修改(进阶配置)
如果你发现后台的“模糊”模式还不够用,或者想实现更复杂的逻辑(比如让搜索不区分大小写、支持拼音搜索等),就需要修改织梦的核心文件。
⚠️ 重要提醒:修改核心文件前,务必备份原文件!以防修改出错导致网站无法正常运行。
场景1:强制模糊搜索,忽略后台“精准/模糊”设置
你可能希望无论后台怎么设置,搜索都必须是模糊的。
操作步骤:
-
找到织梦的搜索处理文件:
/plus/search.php -
打开
search.php,找到以下代码(通常在第35行左右):// 引入搜索类 require_once(DEDEINC.'/arc.search.class.php');
-
在这行代码之前,添加一行代码,强制将搜索模式设置为模糊:
// 在 require_once(DEDEINC.'/arc.search.class.php'); 之前添加 $cfg_soft_search = '模糊'; // 强制设置为模糊搜索
修改后,即使后台核心设置里是“精准”模式,搜索行为也会变成“模糊”。
场景2:优化模糊搜索,使其不区分大小写
默认的模糊搜索是区分大小写的,搜索“织梦”和“织梦”可能得到不同结果,我们可以修改让它不区分。
操作步骤:
-
找到织梦的搜索核心类文件:
/include/arc.search.class.php -
打开该文件,找到生成SQL查询语句的地方,通常在
function GetKeywordSql()这个方法里。 -
找到类似这样的代码片段(可能因版本不同而略有差异):
// ... 其他代码 ... if($this->advtype == '0') { $ksq1 = " arc.title like '%$k%' "; $ksq2 = " arc.title like '%$k%' "; // ... 可能还有对body的查询 ... } // ... 其他代码 ... -
将
like '%$k%'修改为like '%$k%' COLLATE utf8_general_ci。COLLATE utf8_general_ci是不区分大小写的排序规则。修改后,代码可能看起来像这样:
// ... 其他代码 ... if($this->advtype == '0') { // 修改前 // $ksq1 = " arc.title like '%$k%' "; // $ksq2 = " arc.title like '%$k%' "; // 修改后 (不区分大小写) $ksq1 = " arc.title like '%$k%' COLLATE utf8_general_ci "; $ksq2 = " arc.title like '%$k%' COLLATE utf8_general_ci "; // ... 对body的查询也做同样修改 ... } // ... 其他代码 ...
场景3:修改搜索关键词的分隔符
默认情况下,织梦用空格来分隔多个关键词,进行“与”搜索(即要同时包含所有关键词),如果你想改成用逗号 或者其他符号,可以修改。
操作步骤:
-
同样是修改
/include/arc.search.class.php文件。 -
找到处理关键词的代码,通常在函数开头部分,类似这样:
// ... $this->Keywords = trim($keyword); $this->KeywordArray = explode(' ',$this->Keywords); // ... -
将
explode(' ', ...)中的空格 修改为你想要的分隔符,比如中文逗号 :// ... $this->Keywords = trim($keyword); // 修改前 // $this->KeywordArray = explode(' ',$this->Keywords); // 修改后 (使用中文逗号作为分隔符) $this->KeywordArray = explode(',',$this->Keywords); // ...
性能优化建议
模糊搜索,特别是全文搜索,是网站性能的“杀手”,如果你的网站数据量大,请务必注意以下几点:
- 关闭全文搜索:在后台核心设置中,将“全文搜索功能”设置为“不开启”,这是最有效的优化方法。
- 使用索引:如果必须开启全文搜索,请确保你的MySQL数据库为
dede_archives表的title和body字段建立了全文索引,这能极大提升查询速度。- 操作:登录你的phpMyAdmin,找到
dede_archives表,在“结构”页面,为title和body字段设置“索引”类型为“FULLTEXT”。
- 操作:登录你的phpMyAdmin,找到
- 定期重建索引:开启全文搜索后,后台会有一个“重建全文索引”的选项,定期执行它以保持索引的效率。
- 使用第三方搜索插件:对于大型网站,自带的搜索功能可能力不从心,可以考虑集成更专业的搜索引擎,如 Elasticsearch 或 Sphinx,甚至使用 百度/谷歌站内搜索,这些方案性能更好,功能也更强大(如拼音搜索、错别字纠正等)。
| 配置层级 | 实现方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 后台配置 | 后台系统参数 -> 核心设置 | 简单、安全、无需代码 | 功能有限,性能可能不佳 | 所有网站,特别是中小型网站 |
| 核心文件修改 | 修改 search.php 和 arc.search.class.php |
灵活、功能强大、可定制化 | 有风险(可能导致问题)、需要技术能力 | 对搜索有特殊需求,且懂技术的网站 |
| 性能优化 | 关闭全文、使用索引、第三方插件 | 保证网站稳定和速度 | 可能需要额外成本或技术投入 | 数据量大的中大型网站 |
建议操作流程:
- 首先,通过后台配置开启“模糊”模式,看看效果是否满足需求。
- 如果效果不佳或功能不够,再考虑修改核心文件进行增强。
- 如果网站开始卡顿,立刻关闭全文搜索,并考虑性能优化方案。
