- 1.2 环境搭建&安装
- 1.3 项目说明
- 1.4 路由说明
- 1.5 目录结构
- 2.1 模板
- 2.1.1 前台模板
- 2.1.2 后台模板
- 2.1.3 模板标签
- 2.1.3.1 content内容标签
- 2.1.3.2 spf内容标签
- 2.1.3.3 tags内容标签
- 2.1.3.4 comment评论标签
- 2.1.3.5 position推荐位标签
- 2.1.3.6 get数据获取标签
- 2.1.3.7 template模板引入标签
- 2.1.3.8 navigate导航标签
- 2.1.3.9 pre上一篇标签
- 2.1.3.10 next下一篇标签
- 2.1.3.11 blockcache区块缓存标签
- 2.2 行为管理
- 2.2.1 行为规则
- 2.2.2 使用方法
- 2.2.3 测试Behaivor
- 2.3 模块开发
- 2.4.1 权限
- 2.4.2 框架页
- 2.4.3 消息中心
- 2.4.4 登录页安全
- 2.5 请求缓存
- 3.1 Auth
- 3.1.1 通用授权
- 3.1.2 自动登录授权
- 3.1.3 开放平台授权
- 3.2 Wechat
- 3.2.2 v2.x
- 3.3 Area
- 3.3.1 中国区域
- 3.3.2 中国高校
- 3.4 Sms
- 3.4.1 v3
- 3.4.2 v2
- 3.5 Cron
- 3.6 Transport
- 3.6.1 使用
- 3.6.2 最佳实践
- 3.7 Message
- 3.8 Record
- 3.8.1 数据结构
- 3.8.2 使用指南
- 3.9 Wxapp
- 3.10 Log
- 3.11 Alipay
- 3.12 Unionpay
- 3.13 Oss
- 3.14 Chart
- 3.15 Queue
- 3.16 Mirror
- 3.17 Wap
- 3.18 Shop
- 3.19 Search
- 3.20 Addons
- 3.21 Collection
- 3.22 Comment
- 3.23 Domain
- 3.24 Form
- 3.25 Link
- 3.26 Vote
- 3.27 Member
- 4.1 规范和约定
- 4.2 部署指南
- 4.3 常见错误
- 4.4 开发Tips汇总
- 4.4.1 模块
- 4.4.2 自定义后台iconfont
- 4.4.3 自定义成功(失败)页面
- 4.4.4 自定义栏目列表搜索条件
- 4.4.5 根据管理员的权限显示
- 4.5 数据库的存储引擎
- 4.6 行为管理最佳实践
- 4.7 性能优化
- 4.8 ThinkPHP
- 4.8.1 模型
- 4.9.1 发送邮件
- 5.1 系统函数
- 5.2 技术栈
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3.19 Search
搜索
环境配置
MySQL 5.6前,只有 MyISAM 引擎支持全文搜索,MySQL 5.6 InnoDB 也支持全文索引。
配置mysql.cnf
#mysql指定了最小字符长度,默认是4,必须要匹配大于4的才会有返回结果
ft_min_word_len = 2
字段是否加入全文搜索
搜索页面入口?
http://you_domain.com/index.php?g=Search
如何主动更新索引?
更新索引,更新需要检索字段的分词
$SearModel::search_api($id, $data, $modelid);
# data 为传入该行数据 ,由$modelid + $id 两条件筛选出来
如何根据输入的关键字获取索引结果?
思路:先把关键字分词,然后进行检索。
核心代码
//分词结果
if ($this->config['dzsegment']) {
//用discuz的分词接口,http调用,比较耗时
$segment_q = D('Search/Search')->discuzSegment($q);
} else {
//内置的分词方法
$segment_q = D('Search/Search')->segment($q);
}
if (!empty($segment_q[0]) && $this->config['segment']) {
$words = $segment_q;
$segment_q = implode(' ', $segment_q);
$where['_string'] = " MATCH (`data`) AGAINST ('{$segment_q}' IN BOOLEAN MODE) ";
} else {
//不推荐,性能差。若分词失败什么的,用最暴力的模糊查询
$likeList = explode(' ', $q);
if (count($likeList) > 1) {
foreach ($likeList as $k => $rs) {
$likeList[$k] = "%{$rs}%";
}
$where['data'] = array('like', $likeList, 'or');
} else {
$where['data'] = array('like', "%{$q}%");
}
$words = array($q);
}
//查询结果缓存
if ($cachetime) {
//统计
$count = M('Search')->where($where)->cache(true, $cachetime)->count();
$page = page($count, $pagesize);
$result = M('Search')->where($where)->cache(true, $cachetime)->limit($page->firstRow . ',' . $page->listRows)->order($order)->select();
} else {
$count = M('Search')->where($where)->count();
$page = page($count, $pagesize);
$result = M('Search')->where($where)->limit($page->firstRow . ',' . $page->listRows)->order($order)->select();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论