问题

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中文分词与智能搜索相关推荐

  1. wordpress php 中文分词 开源,WordPress中文分词与智能搜索

    问题 WordPress的搜索功能非常简陋,如果用户搜索"日语综合教程+第六册",WordPress会机械地构造一个wp_posts.post_title LIKE '%日语综合教 ...

  2. 基于php的Sphinx以及coreseek的全文搜索,中文分词的使用(一)

    基于php的Sphinx以及coreseek的全文搜索,中文分词的使用(一) ##1.sphinx简介 1.什么是sphinx Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检 ...

  3. 面向搜索的中文分词设计

    我开发的中文分词程序,开源发布 ,其实哪个中文分词的整体架构是比较糟糕的.架构是否优秀决定了很多构思无法实现,思考了比较久,最近准备开发第二版,抛弃以前的架构,重新实现.下面是一些设计和构思.计划是两 ...

  4. lucene的建立索引,搜索,中文分词

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包. 现在最新的lucene已经更新到6.0版本了.但是这个最新版,需要适配jdk1.80以 ...

  5. 怎么配置linux中es搜索的主机名,分布式搜索elasticsearch中文分词集成

    elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介 ...

  6. Lucene全文检索_分词_复杂搜索_中文分词器

    1 Lucene简介 Lucene是apache下的一个开源的全文检索引擎工具包. 1.1 全文检索(Full-text Search)  1.1.1 定义 全文检索就是先分词创建索引,再执行搜索的过 ...

  7. mysql 中文分词搜索_php中文分词搜索

    本篇文章主要介绍php中文分词搜索,感兴趣的朋友参考下,希望对大家有所帮助. 1.4个文件(本站下载地址.)解压后,放到一个地方 eg:E:/wamp/scws 2.php.ini 中配置 exten ...

  8. 分布式搜索elasticsearch中文分词集成

    elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介 ...

  9. php es 短语精确搜索,ES中文分词器之精确短语匹配(解决了match_phrase匹配不全的问题)...

    分词器选择 调研了几种分词器,例如IK分词器,ansj分词器,mmseg分词器,发现IK的分词效果最好.举个例子: 词:<>哈撒多撒ئۇيغۇر تىلى王者荣耀sdsd@4342啊啊啊 ...

最新文章

  1. C++——智能指针——auto_ptr、shared_ptr、unique_ptr
  2. Powershell script for config_Win10
  3. Call和Apply的区别
  4. 计算机英语 动态,计算机英语高级词汇精选
  5. maven——pom.xml
  6. JSTL 与 JSP 代码段 相互调用变量
  7. ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl
  8. day2-安装python以及基本使用
  9. 谈谈以前那位研发总监错在哪里
  10. 三步完美完成wordpress外链跳转
  11. Java 垃圾回收机制原理
  12. HTML5 新特性(2)--Canvas
  13. 3500 vocabulary
  14. Ubuntu16环境安装和使用NFS
  15. 气相色谱仪排除问题S级详情讲解【Chro】
  16. java计算机毕业设计html5健身房信息管理系统源码+数据库+系统+lw文档
  17. Marvell推出Andromeda Box IoT平台,加速物联网装置开发
  18. 小米微信无法连接到服务器1-10087,微信无法连接到服务器【搞定方向】
  19. JAVA设计模式之——抽象工厂模式
  20. 将三维模型(obj)导出js格式供threeJS中调用

热门文章

  1. NSIS 运行bat的方法汇总
  2. 基于Springboot的个人健康监控管理系统(源码+MySQL数据库+论文)
  3. 如何在centos中完全彻底卸载mysql
  4. 【机密】数字IC后端笔试面试题库(附知识星球活动)
  5. 计算机一级平均分函数,WPS2007中求特定比例成绩的平均分
  6. Freemind中文汉化版0.8.0b4
  7. 【Python】从入门到入土2
  8. Autocad2013中文破解版(64位)安装图文教程
  9. 用devc++表白_想谈一场甜甜的姐弟恋了 | 肇院表白墙716期
  10. 标准USB/Mini-USB接口,及OTG 苹果lightning接口和ipod认证过程