迅搜(XunSearch)+ThinkPHP5实现标题的拼音或拼音首字母缩写搜索
2019独角兽企业重金招聘Python工程师标准>>>
这是两年前学习Coreseek时在问答区问的一个问题:
https://www.oschina.net/question/252582_173810
当时只是想了下,但没去做,现在学迅搜,又想到这个问题,干脆还是试试把它给做了吧 ^_^
1、数据表字段
2、ThinkPHP5的model里做 py_whole 和 py_acronym 的自动完成
<?php
namespace app\xxx\model;
use think\Model;
use search\XunSearch;// 参照迅搜官方给 Yii 1 写的类弄的一个TP扩展类class Xxx extends Model
{protected $auto = ['py_whole', 'py_acronym'];// 自动设置拼音全拼protected function setPyWholeAttr(){// 获取title$title = $this->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 = mixed
tokenizer = split[py_acronym]
index = mixed
tokenizer = 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
迅搜(XunSearch)+ThinkPHP5实现标题的拼音或拼音首字母缩写搜索相关推荐
- php汉字首字母缩写,迅搜(XunSearch)+ThinkPHP5实现标题的拼音或拼音首字母缩写搜索...
这是两年前学习Coreseek时在问答区问的一个问题: 当时只是想了下,但没去做,现在学迅搜,又想到这个问题,干脆还是试试把它给做了吧 ^_^ 1.数据表字段 2.ThinkPHP5的model里做 ...
- Java获取中文拼音、中文首字母缩写和中文首字母
我们有时候会遇到这样的情况,需要获取某些中文的拼音.中文首字母缩写和中文首字母,下面我将为大家介绍一下如何获取中文拼音的缩写. 1.项目建立和配置 首先,我们建立一个java项目,新建libs文件夹并 ...
- PinYin4j的基本使用 Java获取中文转拼音、获取中文拼音的首字母缩写
前言 在实际开发中,可能会遇到根据用户输入的中文拼音首字母缩写,来查询对应数据的功能需求,本文将提供一个操作中文转拼音.获取拼音首字母的工具类CV即用. 一.PinYin4j 简介 : pinyin4 ...
- 迅搜(xunsearch)的安装使用以及操作类分享
搜索到这篇文章的人大多都应该已经知道 迅搜(xunsearch) 是什么. 迅搜(xunsearch)是采用 C/C++ 基于 xapian 和 scws 开发的全文搜索引擎解决方案,适用于php全文 ...
- 迅搜xunsearch全文搜索引擎在负载均衡集群中的配置方法
迅搜xunsearch全文搜索引擎在负载均衡集群中的配置方法 近来在一个电商项目中需要对商品检索实现中文分词和全文搜索功能,,于是使用了国内做得比较好并且是开源的迅搜全文搜索引擎,对PHP支持良好并且 ...
- C#汉字转拼音(npinyin)将中文转换成拼音全文或首字母
汉字转拼音貌似一直是C#开发的一个难题,无论什么方案都有一定的bug,之前使用了两种方案. 1.Chinese2Spell.cs 一些不能识别的汉字全部转为Z 2.Microsoft Visual S ...
- 混合索引java代码,Elasticsearch 实现拼音,中文,首字母混合搜索
在实际搜索需求中,常常需要对中文做拼音搜索,首字母搜索或者中文拼音首字母混合搜索. 比如要对 "广发聚财信用" 这几个中文进行拼音搜索,我们可能的搜索关键字是:"广发&q ...
- 中英文混合拼音排序(从首字母开始,相同则往下比较)
中英文混合拼音排序(从首字母开始,相同则往下比较) 中文/英文混合数据 进行转拼音(中文),按照26个字母顺序排序,从首字母开始比较,相同则比较第二个字母,如此类推,直到结束排序为止. pom.xml ...
- 姓名拼音首字母缩写_公司首字母缩写
姓名拼音首字母缩写 首字母缩略词可以很容易地提醒您扩展主题的引用,并且显然可以以某种方式对其进行概括,这尤其有用,尤其是当您可以将它们用作新词来快速表达关系并直截了当地时(例如提及SLA,KPI,SO ...
最新文章
- python的init有什么用_Python中 __init__.py的作用
- 机器学习在高德起点抓路中的应用实践
- python实现文字转语音的合成
- uniapp 开发h5 优化加载速度
- 各操作系统各文件系统支持的最大文件的大小
- matlab 线性方程组 最小二乘解,超定方程组的最小二乘解
- day 5 名片管理系统-文件版
- c# 获取路径的盘符_C# IO操作之 如何玩转路径
- 图像下方出现几像素的空白间隙
- 计算机编辑文档教程,word文档怎么编辑pdf的教程
- Java实现多张图片转pdf
- CSS 实现元素固定宽高比
- nginx学习十 ngx_cycle_t 、ngx_connection_t 和ngx_listening_t
- 开源表单推荐:Tduck 填鸭 —— 表单收集器
- 离散数学 代数系统思维导图
- Pomelo Gate
- 2023USNews美国加州系大学排名
- 如何写好需求分析:需求规格说明书(ISO标准版)
- HTML基础--CSS样式表(二)
- oracle升级版本矩阵图
热门文章
- 自学实践前后端项目4 MMall商城 4
- 吃一堑长一智!最全面试考点与面试技巧,社招面试心得
- 鸿蒙2.0内测版手机版,抖音鸿蒙os2.0测试首发体验版下载-抖音华为鸿蒙os2.0最新内测版v12.7.0 最新版-007游戏网...
- python获取本月天数_如何获得本月的所有天数?
- implicit declaration of function解决
- 美程序员走低龄化路线 12岁少年开发98款游戏
- 【CV系列】脑部肿瘤图像分割
- jsp电影视频分享影评网站
- 即时消息:一个完整的IM系统是怎样的
- 基于mqtt的IM系统设计