博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迅搜(XunSearch)+ThinkPHP5实现标题的拼音或拼音首字母缩写搜索
阅读量:6420 次
发布时间:2019-06-23

本文共 2453 字,大约阅读时间需要 8 分钟。

hot3.png

这是两年前学习Coreseek时在问答区问的一个问题:

 

当时只是想了下,但没去做,现在学迅搜,又想到这个问题,干脆还是试试把它给做了吧 ^_^

1、数据表字段

2、ThinkPHP5的model里做 py_whole 和 py_acronym 的自动完成

getAttr('title'); if (empty($title)){ return ''; } // 先对title分词 $xs = new XunSearch('recipe'); $keyword_list = $xs->getScws()->getTokens($title); // 再对title分的每一个词转换成拼音 $pinyin = []; if (count($keyword_list)>0){ foreach ($keyword_list as $keyword){ $keyword_pinyin = gbk_to_pinyin($keyword);// 这里用PHPCMS里般过来的转拼音函数转换 if (is_array($keyword_pinyin) && count($keyword_pinyin)>0){ $pinyin[] = implode ( '' , $keyword_pinyin ); } } } if (count($pinyin)>0){ return implode(' ', $pinyin);// 迅搜里的配置分割方式默认是空格,这里也就用空格了 }else{ return ''; } } // 自动设置拼音首字母缩写 protected function setPyAcronymAttr() { $title = $this->getAttr('title'); if (empty($title)){ return ''; } // 先对title分词 $xs = new XunSearch('recipe'); $keyword_list = $xs->getScws()->getTokens($title); $pinyin = []; if (count($keyword_list)>0){ foreach ($keyword_list as $keyword){ $keyword_arr = mb_str_split($keyword);// 字符进行逐字分割,这是一个自定义函数,解决PHP自带函数不能分割中文问题 // 提取拼音首字母缩写 $keyword_initial = array_map(function( $word ){ $pinyin = gbk_to_pinyin($word); return substr( $pinyin[0], 0, 1 ); }, $keyword_arr); if (is_array($keyword_initial) && count($keyword_initial)>0){ $pinyin[] = implode ( '' , $keyword_initial ); } } } if (count($pinyin)>0){ return implode(' ', $pinyin);// 迅搜里的配置分割方式默认是空格,这里也就用空格了 }else{ return ''; } }}

数据入库时就可以得到这样的结果

3、迅搜的项目配置文件里这样配置

project.name = xxx[id]type = id[title]type = title[py_whole]index = mixedtokenizer = split[py_acronym]index = mixedtokenizer = split

4、测试效果(表中只有30条测试数据,所以结果不多)

public function testxs()    {        $xs = new \search\XunSearch('recipe');        $keyword = 'mb';        dump('关键词: '.$keyword);        $list = $xs->search($keyword, '', 0, 10);        dump('查询语句: '.$xs->getQuery());        dump($list);    }

 

5、用SQL语句验证迅搜的结果与数量对不对

 

不错,比用迅搜的 getExpandedQuery() 方法转换得到的拼音准确多了

 

转载于:https://my.oschina.net/Twitter/blog/857291

你可能感兴趣的文章
《Python高性能编程》——2.2 Julia集合的介绍
查看>>
大型网站的 HTTPS 实践(二):HTTPS 对性能的影响
查看>>
《Swift 权威指南》——第6章,第6.10节嵌套函数
查看>>
《自己动手做交互系统》——1.3 本章小结
查看>>
Mobile devices bundled with malware?
查看>>
《Node应用程序构建——使用MongoDB和Backbone》一导读
查看>>
《JavaScript面向对象精要》——1.5 访问属性
查看>>
《Python数据可视化编程实战》—— 第 1 章 准备工作环境
查看>>
Android应用性能优化最佳实践.1.1 Android Studio的优势
查看>>
《设计模式解析(第2版•修订版)》—第2章 2.2节什么是UML
查看>>
【健康医疗】4步完成数据分析报表,让医疗数据转化为生产力
查看>>
【直播】APP全量混淆和瘦身技术揭秘
查看>>
10个大坑,当你产品上架AppStore会遇到
查看>>
Linux_Rsync远程同步备份服务器
查看>>
【shell 脚本】两种登录方式
查看>>
UIScrollView视差模糊效果
查看>>
大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
查看>>
字典树(Trie tree)
查看>>
2013编程之美全国挑战赛第一场-传话游戏
查看>>
测试之新生入学系统,多一份收获
查看>>