织梦搜索页实现全文检索和标题的方法

摘要:织梦搜索页默认只能搜索标题(title)、关键字(keywords)、作者(writer),无法搜索到文章内容(body),本文讲解下如何使用织梦普通搜索和高级搜索,让搜索页实现全文检索。

织梦搜索页默认只能搜索标题(title)、关键字(keywords)、作者(writer),无法搜索到文章内容(body),本文讲解下如何使用织梦普通搜索和高级搜索,让搜索页实现全文检索。

普通搜索

搜索结果

织梦搜索页实现全文检索和标题的方法

实现方法

1. 在前台模板搜索框代码内加入一行代码:

<input type="hidden" name="channeltype" value="1">
  • 必须指定搜索哪个模型,value="模型 id";
  • 模型 id:1 为文章,2 为图集,具体请查看“核心”->“频道模型”->“内容模型管理”。

2. 打开 include/arc.searchview.class.php,大概在 54 行,找到:

var $Sphinx;

在它下面加入:

var $addJoin;

继续找到:

$hascode = md5($cquery);

在它上面加入:

if($this->ChannelType > 0)
{
    $this->AddSql = join(' AND ',$ksqls) . " AND ( CONCAT(addf.body,arc.title) LIKE '%{$this->Keyword}%') ";
    $row = $this->dsql->GetOne("SELECT addtable FROM `dede_channeltype` WHERE id={$this->ChannelType}");
    $addtable = trim($row['addtable']);
    $this->addJoin = " LEFT JOIN `{$addtable}` addf ON arc.id=addf.aid ";
    $cquery = "SELECT arc.*,addf.* FROM `{$this->AddTable}` arc {$this->addJoin} WHERE {$this->AddSql}";
}

注意:上面中的 addf.body 就是文章内容字段,如果你要搜索其它字段,改成你的其它字段名称。

继续找到:

WHERE {$this->AddSql} $ordersql LIMIT $limitstart,$row";

在它下面加入:

if($this->ChannelType > 0)
{
    $query = "SELECT arc.*,act.typedir,act.typename,act.isdefault,act.defaultname,act.namerule,
    act.namerule2,act.ispart,act.moresite,act.siteurl,act.sitepath,addf.*
    FROM `{$this->AddTable}` arc LEFT JOIN `dede_arctype` act ON arc.typeid=act.id {$this->addJoin}
    WHERE {$this->AddSql} $ordersql LIMIT $limitstart,$row";
}

完成。

如果想指定栏目检索全文,需要把上面两处修改后的代码:

WHERE {$this->AddSql}

替换为:

WHERE arc.typeid in (1,2) and {$this->AddSql} //仅搜索栏目 1、2 内容
WHERE arc.typeid not in (2,3) and {$this->AddSql} //不搜索栏目 2、3 内容

即可。

高级搜索

使用 advancedsearch 高级搜索

1、后台 -> 核心 -> 内容模型管理 -> 自定义搜索(普通文章后面的放大镜标志)-> 附件表可供自定义搜索的字段 -> 文章内容 -> 确定。

这里的字段是程序依据字段类型自动生成的,将“文章内容”前面那个打勾,然后点击确定,此时将修改掉搜索字段,但是还没有成功,还需要修改模板相应的代码。

2、将模板文件 head.htm 中的以下代码:

<form action="{dede:field name='phpurl'/}/search.php" name="formsearch">  
  <div class="form">
    <h4>搜索</h4>
    <input type="hidden" name="kwtype" value="0" />
    <input name="keyword" type="text" class="search-keyword" id="search-keyword" />
    <select name="searchtype" class="search-option" id="search-option">
      <option value="titlekeyword" selected='1'>智能模糊搜索</option>
      <option value="title">仅搜索标题</option>
    </select>
    <button type="submit" class="search-submit">搜索</button>
  </div>
</form>
修改为:
<form action="/plus/advancedsearch.php" method="post">
  <div class="form">
    <h4>搜索</h4>
    <input type="hidden" name="mid" value="1" />
    <input type="hidden" name="dopost" value="search" />
    关键词:<input type="text" name="q" /> <input type="submit" name="submit" value="开始全文搜索" />
  </div>
</form>

完成。

版权声明:本文为博主原创文章,未经博主允许不得转载。http://www.dedenotes.com/course/search-body.html
(1)
打赏 微信扫一扫 微信 支付宝 QQ 扫码打赏

织梦列表页使用 dede:listsql 标签实现静态分页

Dedenotes 赞(3)

将 dede:list 标签进行改造了,熟悉 dede 的朋友应该知道这个列表页专用标签的工作原理,大致是先通过栏目变量 id 获取到对应的数据源再呈现到页面上来,那么我们就可以让它不仅仅通过栏目变量 id, 还可以通过指定的sql语句来获取数据源了。

织梦Dedecms限制栏目列表生成的最大页数

Dedenotes 赞(3)

Dedecms默认并没有这个设置项,修改这个设置主要有二个目的:1)防止生成列表时消耗过多的时间。2)防止被采集,如果列表不加以限制,全站的文章都可以被索引到。

DedeCMS织梦后台管理搜索文章正文内容

Dedenotes 赞(3)

DedeCMS的后台管理,在文章列表下面可以进行搜索,输入关键字即可。但是这个搜索,只能搜索标题和作者,却不能找到正文包含该关键字的文章。以下修改,可以在后台输入关键字搜索时,找到正文里包含该关键字的普通文章。