织梦模糊搜索怎么配置?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 织梦建站 正文

织梦的搜索功能默认是支持模糊匹配的,但很多时候效果不佳,或者因为性能问题被管理员关闭了,配置模糊搜索主要涉及两个方面:

  1. 后台配置:开启和调整模糊搜索的基本开关和参数。
  2. 核心文件修改:通过修改PHP代码来优化或强制模糊搜索的逻辑,使其更强大、更灵活。

后台基础配置

这是最直接、最简单的配置方法,主要针对织梦默认的模糊搜索功能。

操作路径:登录织梦后台 -> 系统 -> 系统基本参数 -> 核心设置

在“核心设置”页面中,找到以下几个关键选项:

  1. 是否开启全站搜索

    • 选项 /
    • 说明:这是全局的总开关,如果这里设置为“否”,那么搜索功能将完全失效,请确保此处为 “是”
  2. (关键) 搜索模式

    • 选项精准 / 模糊
    • 说明:这是控制搜索行为的核心选项。
      • 精准:只有当搜索词与标题或内容完全一致时才能找到结果,搜索“织梦”,标题为“织梦CMS”可以找到,但标题为“我爱织梦”就找不到。
      • 模糊或内容中包含搜索词,就能找到结果,搜索“织梦”,标题为“我爱织梦”也能找到。
    • 配置建议:如果你想实现模糊搜索,请务必将此选项设置为 “模糊”
  3. (关键) 高级搜索开关

    • 选项开启 / 关闭
    • 说明:开启后,用户可以在搜索页面选择按“关键字”、“标题”、“作者”、“tag”等不同维度进行搜索,这本身就是一种更精细的“模糊”或“精准”控制。
    • 配置建议:建议 “开启”,以提供更好的用户体验。
  4. 搜索间隔时间 (秒)

    • 说明:用于防止恶意频繁搜索,对普通用户影响不大。
  5. (重要) 全文搜索功能

    • 选项不开启 / 开启
    • 说明:这个选项与模糊搜索的性能密切相关。
      • 不开启:搜索只在文章的标题和简介中进行,速度快,但结果不全面。
      • 开启:搜索会在文章的标题、简介和内容全文中进行,结果最全面,但非常消耗服务器资源,如果网站数据量很大(比如超过10万篇文章),可能会导致网站卡顿甚至崩溃。
    • 配置建议
      • 小型网站(数据量小):可以 “开启”,以获得最全面的搜索结果。
      • 中大型网站(数据量大):建议 “不开启”,或者只在特定时间段(如访客少时)开启,然后重建全文索引。

仅通过后台配置,你可以将 “搜索模式” 设置为 “模糊”,并酌情开启 “全文搜索功能”,即可实现基础的模糊搜索。


核心文件修改(进阶配置)

如果你发现后台的“模糊”模式还不够用,或者想实现更复杂的逻辑(比如让搜索不区分大小写、支持拼音搜索等),就需要修改织梦的核心文件。

⚠️ 重要提醒:修改核心文件前,务必备份原文件!以防修改出错导致网站无法正常运行。

场景1:强制模糊搜索,忽略后台“精准/模糊”设置

你可能希望无论后台怎么设置,搜索都必须是模糊的。

操作步骤

  1. 找到织梦的搜索处理文件:/plus/search.php

  2. 打开 search.php,找到以下代码(通常在第35行左右):

    // 引入搜索类
    require_once(DEDEINC.'/arc.search.class.php');
  3. 在这行代码之前,添加一行代码,强制将搜索模式设置为模糊:

    // 在 require_once(DEDEINC.'/arc.search.class.php'); 之前添加
    $cfg_soft_search = '模糊'; // 强制设置为模糊搜索

    修改后,即使后台核心设置里是“精准”模式,搜索行为也会变成“模糊”。

场景2:优化模糊搜索,使其不区分大小写

默认的模糊搜索是区分大小写的,搜索“织梦”和“织梦”可能得到不同结果,我们可以修改让它不区分。

操作步骤

  1. 找到织梦的搜索核心类文件:/include/arc.search.class.php

  2. 打开该文件,找到生成SQL查询语句的地方,通常在 function GetKeywordSql() 这个方法里。

  3. 找到类似这样的代码片段(可能因版本不同而略有差异):

    // ... 其他代码 ...
    if($this->advtype == '0')
    {
        $ksq1 = " arc.title like '%$k%' ";
        $ksq2 = " arc.title like '%$k%' ";
        // ... 可能还有对body的查询 ...
    }
    // ... 其他代码 ...
  4. like '%$k%' 修改为 like '%$k%' COLLATE utf8_general_ciCOLLATE 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:修改搜索关键词的分隔符

默认情况下,织梦用空格来分隔多个关键词,进行“与”搜索(即要同时包含所有关键词),如果你想改成用逗号 或者其他符号,可以修改。

操作步骤

  1. 同样是修改 /include/arc.search.class.php 文件。

  2. 找到处理关键词的代码,通常在函数开头部分,类似这样:

    // ...
    $this->Keywords = trim($keyword);
    $this->KeywordArray = explode(' ',$this->Keywords);
    // ...
  3. explode(' ', ...) 中的空格 修改为你想要的分隔符,比如中文逗号 :

    // ...
    $this->Keywords = trim($keyword);
    // 修改前
    // $this->KeywordArray = explode(' ',$this->Keywords);
    // 修改后 (使用中文逗号作为分隔符)
    $this->KeywordArray = explode(',',$this->Keywords);
    // ...

性能优化建议

模糊搜索,特别是全文搜索,是网站性能的“杀手”,如果你的网站数据量大,请务必注意以下几点:

  1. 关闭全文搜索:在后台核心设置中,将“全文搜索功能”设置为“不开启”,这是最有效的优化方法。
  2. 使用索引:如果必须开启全文搜索,请确保你的MySQL数据库为 dede_archives 表的 titlebody 字段建立了全文索引,这能极大提升查询速度。
    • 操作:登录你的phpMyAdmin,找到 dede_archives 表,在“结构”页面,为 titlebody 字段设置“索引”类型为“FULLTEXT”。
  3. 定期重建索引:开启全文搜索后,后台会有一个“重建全文索引”的选项,定期执行它以保持索引的效率。
  4. 使用第三方搜索插件:对于大型网站,自带的搜索功能可能力不从心,可以考虑集成更专业的搜索引擎,如 ElasticsearchSphinx,甚至使用 百度/谷歌站内搜索,这些方案性能更好,功能也更强大(如拼音搜索、错别字纠正等)。
配置层级 实现方式 优点 缺点 适用场景
后台配置 后台系统参数 -> 核心设置 简单、安全、无需代码 功能有限,性能可能不佳 所有网站,特别是中小型网站
核心文件修改 修改 search.phparc.search.class.php 灵活、功能强大、可定制化 有风险(可能导致问题)、需要技术能力 对搜索有特殊需求,且懂技术的网站
性能优化 关闭全文、使用索引、第三方插件 保证网站稳定和速度 可能需要额外成本或技术投入 数据量大的中大型网站

建议操作流程

  1. 首先,通过后台配置开启“模糊”模式,看看效果是否满足需求。
  2. 如果效果不佳或功能不够,再考虑修改核心文件进行增强。
  3. 如果网站开始卡顿,立刻关闭全文搜索,并考虑性能优化方案。
-- 展开阅读全文 --
头像
织梦CMS文章命名规则具体如何设置?
« 上一篇 今天
织梦 首页标题 不显示
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]