一、简述
因为要在项目中一个搜索的功能,完成后把功能抽出来写成了一个独立的|Demo。因为这个Demo比较独立,所以抽出来的过程中支持拖拽搜索结果的功能就丢掉了,重点关注搜索的功能。
1、功能亮点
(1)支持中英文搜索、全拼搜索(精确搜索)、简拼搜索;
(2)支持简单日志输出;
(3)支持对搜索结果进行翻页。
2、关键技术要点
(1)汉字转拼音,详细实现请参考 https://blog.csdn.net/shaoyiju/article/details/83832314
(2)全拼精确匹配
3、注意事项
(1)注意使用宽字符存放内容;
(2)注意所加载的txt文件需以ANSI格式保存,具体保存方式可百度;
(3)可根据需要把所有英文和拼音要转成小写进行匹配。
4、下载链接
本文项目Demo:https://download.csdn.net/download/shaoyiju/10772985
二、实现
注意:数据字典和汉字必须使用宽字符存放,因为使用一个汉字需要两个多字节的字符才能存放,使用多字节存放汉字的话,判断字符时会出现判断错误的问题。
1、UI界面:
2、设计架构:
3、源码结构:
三、全拼精确匹配
所谓精确匹配就是输入简单的几个字符就能匹配到自己想要的结果。该匹配是针对全拼来说的,其他的英文不存在精确匹配的说法。
1、普通匹配
比如目前有以下数据源:
操马滴汉子你威武雄壮
去不去登山
夜上海是个不夜城
转换成匹配字段队列为
caomadihanziniweiwuxiongzhuang
cmdhznwwxz
操马滴汉子你威武雄壮
qubuqudengshan
qbqds
去不去登山
yeshanghaishigebuyecheng
yshsgbyc
夜上海是个不夜城
当输入“han”,会匹配到
操马滴汉子你威武雄壮
去不去登山
夜上海是个不夜城
因为这三个数据源的匹配字段都含有“han” 。
2、精确匹配
还是之前的数据源,通过在每个汉字拼音前加星号*,匹配时判断所匹配到的字段里的匹配起始位置的第一个字符是否为星号*,如果是,则匹配正确,否则忽略。
转换成加星号*的匹配字段队列为
*cao*ma*di*han*zi*ni*wei*wu*xiong*zhuang
cmdhznwwxz
操马滴汉子你威武雄壮
*qu*bu*qu*deng*shan
qbqds
去不去登山
*ye*shang*hai*shi*ge*bu*ye*cheng
yshsgbyc
夜上海是个不夜城
当输入“han”,会匹配到
操马滴汉子你威武雄壮
即匹配到“汉”字,而不会匹配到“山”和“上”。
当输入“shan”,会匹配到
去不去登山
夜上海是个不夜城
即匹配到“山”和“上”字,而不会匹配到“汉”。
以上就是本文的全部内容,欢迎指正,转载请说明出处。