dede5.7搜索功能如何优化提升效果?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 DEDE建站 正文

DedeCMS 5.7 的搜索功能是其内置的一个核心模块,主要用于在网站前台为访客提供内容检索服务,它主要依赖于一个核心的 PHP 文件 plus/search.php 和一个数据表 dede_search

dede5.7搜索功能
(图片来源网络,侵删)

下面我将从 工作原理、使用方法、自定义修改、常见问题 四个方面进行详细说明。


工作原理

DedeCMS 5.7 的搜索流程相对简单:

  1. 触发搜索:用户在前台搜索框(通常是一个表单)中输入关键词,然后点击“搜索”按钮。
  2. 请求发送:表单数据(通常是关键词 q)被发送到 plus/search.php 文件。
  3. 关键词处理search.php 接收关键词,并进行一些基本的处理,如去除多余空格、转义等。
  4. 数据库查询
    • 程序会根据配置,选择在哪些数据表中搜索,默认情况下,主要搜索 (title) (body)
    • 它会执行一个 SQL LIKE 查询,在 dede_archives 表(文章主表)的 titledescription (或 body) 字段中查找包含关键词的记录。
    • 注意:默认搜索 不区分大小写
  5. 结果展示:查询到的结果会被分页,然后通过一个固定的模板文件(search.htm)进行渲染,最终将包含关键词的文章列表展示给用户。
  6. 记录搜索:搜索结果会同时被记录到 dede_search 数据表中,用于统计热门搜索词等功能。

使用方法

前台调用搜索框

在你的模板文件(通常是 head.htmindex.htm)中,你需要放置一个搜索表单,最简单的代码如下:

<form name="formsearch" action="/plus/search.php">
    <div class="form-search">
        <input type="hidden" name="kwtype" value="0" />
        <input type="text" name="q" class="search-keyword" placeholder="搜索关键词..." />
        <button type="submit" class="search-submit">搜索</button>
    </div>
</form>
  • action="/plus/search.php":指定搜索程序的处理地址。
  • name="q":这是传递关键词的参数名,search.php 默认接收这个参数。
  • name="kwtype" value="0":指定搜索类型。
    • 0和内容中搜索(默认)。
    • 1中搜索。
    • 2:仅在文章标签中搜索。

后台配置搜索

进入 DedeCMS 后台,找到 “核心” -> “批量维护” -> “搜索引擎配置”

dede5.7搜索功能
(图片来源网络,侵删)

在这里你可以进行一些基本设置:

  • 开启/关闭搜索:可以暂时关闭搜索功能。
  • 默认搜索栏目:可以设置搜索默认在哪些栏目下进行。
  • 搜索结果条数:每页显示的搜索结果数量。
  • 是否全站搜索:选择是或否。

自定义与修改

很多时候,默认的搜索功能无法满足需求,比如需要高亮、需要按特定字段搜索、需要修改搜索模板等。

修改搜索结果模板

搜索结果的展示页面模板是 templets/default/search.htm,你可以直接编辑这个文件来改变搜索结果的样式。

  • 核心变量
    • {dede:global name='keyword'/}:显示用户搜索的关键词。
    • {dede:list pagesize='10'}:循环输出搜索结果,pagesize 控制每页显示数量。
    • [field:title/]
    • [field:pubdate function="MyDate('Y-m-d',@me)"/]:发布日期。
    • [field:description/]
    • [field:arcurl/]:文章链接。
    • {dede:pagelist listsize='4' listitem='index pre pageno next end '/}:分页条。

示例:修改 search.htm 以高亮显示关键词

dede5.7搜索功能
(图片来源网络,侵删)

你需要在 {dede:list} 之前和之后添加一些 PHP 代码来实现关键词高亮。

{dede:global name='keyword' function='RemoveXSS(@me)'/}
{dede:global name='keyword' function='htmlspecialchars(@me)'/}
<!-- 在 {dede:list} 循环内部 -->
{dede:list}
    <li>
        <a href="[field:arcurl/]" target="_blank">
            [field:title function='(str_replace("关键词", "<span style='color:red'>关键词</span>", @me) )'/]
        </a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        <p>[field:description/]...</p>
    </li>
{/dede:list}

注意:上面的 str_replace 只是一个简单示例,更健壮的高亮方法是使用 PHP 的 preg_replace 函数,并结合 htmlspecialchars 来防止 XSS 攻击,你可以在 search.php 中处理高亮逻辑,然后将处理后的 $title 变量传递给模板。

修改搜索逻辑(进阶)

如果你需要更复杂的搜索,比如按自定义字段搜索、改变搜索算法等,你需要直接修改 plus/search.php 文件。

示例:增加按自定义字段 myfield 搜索

  1. 修改 search.php: 在 search.php 中找到执行查询的 SQL 语句部分(通常在 if(!empty($keyword)) 条件块内)。 默认的 SQL 类似这样:

    $keyword = trim($keyword);
    $addquery = " And (arc.title like '%$keyword%' or arc.description like '%$keyword%')";
    $typeid = intval($typeid);
    if($typeid>0){
        $addquery .= " And arc.typeid='$typeid' ";
    }
    $query = "Select arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
              From `dede_archives` arc left join `dede_arctype` tp on arc.typeid=tp.id
              where arc.arcrank > -1 $addquery order by arc.sortrank desc";

    你可以修改 $addquery 来增加搜索条件:

    // 假设你的自定义字段在 dede_archives 表中,字段名为 myfield
    $addquery = " And (arc.title like '%$keyword%' or arc.description like '%$keyword%' or arc.myfield like '%$keyword%')";
  2. 重新生成栏目或内容: 修改了数据表结构或查询逻辑后,可能需要重新生成相关栏目或内容,以确保搜索能找到最新数据。


常见问题与解决方案

搜索不到内容,但内容确实存在

  • 原因1:文章未审核或未生成 搜索默认只查找 arcrank > -1 的文章,即已审核的文章,请检查文章是否已通过审核,并且已经生成静态页面(或开启了动态浏览)。
  • 原因2:关键词太短或太常见 DedeCMS 默认可能会过滤掉一些过短或无意义的词(如“的”、“是”等),可以尝试更换一个更长、更具体的关键词。
  • 原因3:编码问题 确保网站数据库、页面文件和搜索词的编码一致(通常是 UTF-8)。
  • 原因4:模板标签错误 检查 search.htm 中的 {dede:list} 标签是否正确,以及分页标签是否正确。

搜索结果不准确,想增加/减少搜索范围

  • 解决方案
    • 增加范围:修改 plus/search.php 中的 $addquery 变量,在 like 条件中增加你想要搜索的字段名,arc.keywords(文章关键字)或 arc.writer(作者)。
    • 减少范围:同样地,从 $addquery 中移除你不希望搜索的字段。

想实现更强大的搜索(如全文索引)

DedeCMS 5.7 自带的 LIKE '%关键词%' 搜索方式在数据量大时效率很低,且无法实现分词搜索(例如搜索“网站建设”,不会匹配到“网站建设公司”)。

  • 解决方案: 如果网站数据量很大,对搜索性能和准确性要求高,可以考虑以下方案:
    1. 使用第三方搜索插件:市面上有很多基于 DedeCMS 的增强搜索插件,它们可能使用了更高效的索引技术。
    2. 集成外部搜索引擎
      • MySQL 全文索引:如果你使用的是 MySQL 5.6+ 版本,可以为 titlebody 字段添加全文索引,并修改 search.php 的查询语句使用 MATCH ... AGAINST 语法,这需要一定的数据库操作能力。
      • 第三方服务:如 ElasticsearchAlgolia,这需要较深的技术投入,但能提供最专业、最快速的搜索体验,通常需要开发一个数据同步程序,将 DedeCMS 的数据实时或定时推送到搜索引擎中。

DedeCMS 5.7 的搜索功能是一个基础但可定制的模块,对于小型网站,默认功能基本够用,通过修改 search.htm 可以轻松改变展示样式,而要改变搜索逻辑,则需要深入 plus/search.php 进行代码级调整,对于有更高性能和功能需求的网站,则需要考虑升级到更专业的搜索解决方案。

-- 展开阅读全文 --
头像
织梦官方免费模板下载哪里找?
« 上一篇 前天
dede手机站首页怎么调?
下一篇 » 前天

相关文章

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

目录[+]