php智能搜索,WordPress中文分词与智能搜索
问题
WordPress的搜索功能非常简陋,如果用户搜索“日语综合教程+第六册”,WordPress会机械地构造一个wp_posts.post_title LIKE '%日语综合教程+第六册%'的SQL查询送到数据库里,结果十有八九找不到任何文章。因为我的文章里并没有直接出现这种句子,我一般给“日语综合教程”加了书名号,并且“第六册”前面一般有空格。
解决思路
解决思路是对用户的查询字串进行分词,然后用空格隔开,最后送到数据库里查询。
中文分词
调用方法
/**
* 分词
* @param $s 原始句子
* @return string 用空格隔开的分词结果
* @author hankcs
*/
function sae_seg($s)
{
$seg = new SaeSegment();
$ret = $seg->segment($s);//$s是原始查询串
if ($ret)
{
$phrase = '';
foreach ($ret as $word)
{
$phrase .= $word['word'] . ' ';
}
$phrase = substr($phrase, 0, strlen($phrase) - 1);
}
return $phrase;
}
这样就可以将“日语综合教程+第六册”拆分为“日语 综合 教程 第六册”。
整合WordPress
目前有多种整合方式:
通过filter实现
function rebuild_search_query($request_vars)
{
if (!empty($request_vars['s']))
{
$request_vars['s'] = sae_seg($request_vars['s']);
}
return $request_vars;
}
add_filter('request', 'rebuild_search_query');
这种方式在最大限度上优化了用户体验,但是每个页面都会触发rebuild_search_query,在效率上稍微有点浪费。毕竟不是每个页面都是搜索,也不是每个人都要搜索,更何况大部分搜索都有结果。
通过主题search.php实现
由此,我的想法是,当没有搜索结果的时候,就将搜索语句分词,通过js重定向,发起一次新的搜索:
if(!isset($_GET['seg']))
{
$ret = sae_seg($request_vars['s']);
if ($ret)
{
?>
}
}
这样最大限度保证了效率,用户会看到屏幕闪烁了一下才出结果。
效果
就算你用再奇怪的句子,也能搜索到结果:
php智能搜索,WordPress中文分词与智能搜索相关推荐
- wordpress php 中文分词 开源,WordPress中文分词与智能搜索
问题 WordPress的搜索功能非常简陋,如果用户搜索"日语综合教程+第六册",WordPress会机械地构造一个wp_posts.post_title LIKE '%日语综合教 ...
- 基于php的Sphinx以及coreseek的全文搜索,中文分词的使用(一)
基于php的Sphinx以及coreseek的全文搜索,中文分词的使用(一) ##1.sphinx简介 1.什么是sphinx Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检 ...
- 面向搜索的中文分词设计
我开发的中文分词程序,开源发布 ,其实哪个中文分词的整体架构是比较糟糕的.架构是否优秀决定了很多构思无法实现,思考了比较久,最近准备开发第二版,抛弃以前的架构,重新实现.下面是一些设计和构思.计划是两 ...
- lucene的建立索引,搜索,中文分词
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包. 现在最新的lucene已经更新到6.0版本了.但是这个最新版,需要适配jdk1.80以 ...
- 怎么配置linux中es搜索的主机名,分布式搜索elasticsearch中文分词集成
elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介 ...
- Lucene全文检索_分词_复杂搜索_中文分词器
1 Lucene简介 Lucene是apache下的一个开源的全文检索引擎工具包. 1.1 全文检索(Full-text Search) 1.1.1 定义 全文检索就是先分词创建索引,再执行搜索的过 ...
- mysql 中文分词搜索_php中文分词搜索
本篇文章主要介绍php中文分词搜索,感兴趣的朋友参考下,希望对大家有所帮助. 1.4个文件(本站下载地址.)解压后,放到一个地方 eg:E:/wamp/scws 2.php.ini 中配置 exten ...
- 分布式搜索elasticsearch中文分词集成
elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介 ...
- php es 短语精确搜索,ES中文分词器之精确短语匹配(解决了match_phrase匹配不全的问题)...
分词器选择 调研了几种分词器,例如IK分词器,ansj分词器,mmseg分词器,发现IK的分词效果最好.举个例子: 词:<>哈撒多撒ئۇيغۇر تىلى王者荣耀sdsd@4342啊啊啊 ...
最新文章
- C++——智能指针——auto_ptr、shared_ptr、unique_ptr
- Powershell script for config_Win10
- Call和Apply的区别
- 计算机英语 动态,计算机英语高级词汇精选
- maven——pom.xml
- JSTL 与 JSP 代码段 相互调用变量
- ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl
- day2-安装python以及基本使用
- 谈谈以前那位研发总监错在哪里
- 三步完美完成wordpress外链跳转
- Java 垃圾回收机制原理
- HTML5 新特性(2)--Canvas
- 3500 vocabulary
- Ubuntu16环境安装和使用NFS
- 气相色谱仪排除问题S级详情讲解【Chro】
- java计算机毕业设计html5健身房信息管理系统源码+数据库+系统+lw文档
- Marvell推出Andromeda Box IoT平台,加速物联网装置开发
- 小米微信无法连接到服务器1-10087,微信无法连接到服务器【搞定方向】
- JAVA设计模式之——抽象工厂模式
- 将三维模型(obj)导出js格式供threeJS中调用
热门文章
- NSIS 运行bat的方法汇总
- 基于Springboot的个人健康监控管理系统(源码+MySQL数据库+论文)
- 如何在centos中完全彻底卸载mysql
- 【机密】数字IC后端笔试面试题库(附知识星球活动)
- 计算机一级平均分函数,WPS2007中求特定比例成绩的平均分
- Freemind中文汉化版0.8.0b4
- 【Python】从入门到入土2
- Autocad2013中文破解版(64位)安装图文教程
- 用devc++表白_想谈一场甜甜的姐弟恋了 | 肇院表白墙716期
- 标准USB/Mini-USB接口,及OTG 苹果lightning接口和ipod认证过程