Simple: 一个支持中文和拼音搜索的 sqlite fts5插件
之前的工作关系,需要在手机上支持中文和拼音搜索。由于手机上存储数据一般都是用 sqlite,所以是基于 sqlite3 fts5 来实现。这段时间再次入门 c++,所以想用 c++ 实现一下,一来用于练手,二来当时做的时候发现网络上这方面开源的实现不多,也造福下其他人。
背景
搜索现在几乎是每个 APP 必备的功能,用户已经习惯了搜索框搜一下,避免到处去找。搜索也是帮助用户查找旧信息,发现新功能的一个重要手段。平常我们用微信的时候经常会搜索联系人和聊天记录,发现微信这一块做的还是非常好的。关于微信的全文搜索,可以看看这两篇文章:微信全文搜索优化之路 和 微信移动端的全文检索多音字问题解决方案 。
第一篇文章主要是问题和原理的概述,第二篇文章是核心分词器的实现。我写的这个项目主要是实现了 simple 分词器,并提供一些辅助函数帮助使用。
Simple 分词器
搜索的核心是建倒排索引,建索引的核心是分词器。 跟名字一下,Simple 分词器的规则非常简单:
- 空白符跳过
- 连续的数字作为整体是一个索引
- 连续的英文字母作为整体并转换成小写索引
- 中文字单独建索引,并且把中文字转成拼音后也建搜索,这样就能同时支持中文和拼音检索。另外把拼音首字母也建索引,这样搜索 zjl 就能命中 “周杰伦”。
- 其他字符统一单独建索引,这样搜索
Simple: 一个支持中文和拼音搜索的 sqlite fts5插件相关推荐
- Elasticsearch7.* + SpringBoot2.*根据中文和拼音分页去重搜索
目的:根据商品名称按中文和拼音分页搜索,并且按商品名去重.这里以Elasticsearch7.4为例. 一.插件安装 1.安装ik中文分词器 下载地址:https://github.com/medcl ...
- elasticsearch 条件去重_Elasticsearch7.* + SpringBoot2.*根据中文和拼音分页去重搜索-Go语言中文社区...
目的:根据商品名称按中文和拼音分页搜索,并且按商品名去重.这里以Elasticsearch7.4为例. 一.插件安装 1.安装ik中文分词器 进入es安装目录 elasticsearch/plugin ...
- Enc-Base64位加密程序包括源代码(支持中文和特殊符号)
Enc-Base64位加密程序包括源代码(支持中文和特殊符号) 创建一个新类,即可调用该类的加密和解密方法 Option Explicit 'Base64编码函数:Base64Encode 'In ...
- 中文和拼音的相关转换
关于中文和拼音的相关转换, 代码如下, 对于使用Swift的coder,可以bridge一下 #define HANZI_START 19968 #define HANZI_COUNT 20902st ...
- 微信小程序md5加密支持中文和特殊字符
微信小程序默认的md5加密不支持中文和特殊符号,如果需要支持,需要引入md5加密.也是npm包,可在js和nodejs引入 或者使用cdn(https://cdn.bootcss.com/blueim ...
- 微信小程序------MD5加密(支持中文和不支持中文)和网络请求(get和post)
2019独角兽企业重金招聘Python工程师标准>>> 开发中常常遇到MD5加密,最近做小程序也用到了,简单总结了一下: 这要有两个加密文件,一个不支持中文,一个支持,所以你选择支持 ...
- 免费又好用的参考文献管理软件zotero该怎么使用?可以同时支持中文和英文吗?...
超级有用!超级实用!超级超级好用! 如果你想从一个学渣小白,变成一个文献大神,看这篇回答就够了. 对于研究生而言,文献阅读以及学术写作几乎是生活日常.那么,一款方便.快捷.高效的文献管理软件显得至关重 ...
- SpringBoot 集成 ES 7.6.2 并对字段进行中文和拼音分词处理
前言 在最近做的流媒体项目中需要集成 ES 搜索引擎,目前 ES 最新版本为 7.x 版本,在以往的项目中我都采用的是 spring 集成的 spring-data-es, 使用自定义类集成 elas ...
- SpringBoot集成ES 7.6.2 并对字段进行中文和拼音分词处理
文章目录 前言 一.为什么不用spring封装的spring-data-es? 二.springboot集成es的两种方式 1.spring-data-es使用elasticsearch 2.doc对 ...
最新文章
- 第一次当领导,一定要知道的5个工具
- 转载:Ajax及 GET、POST 区别
- BCH底层协议真的不能被修改吗?
- 软件工程实践2017 结队项目——第二次作业
- element表格取消全选_ElementUi 表格取消全选框,用文字表示
- java sqlserver 遍历_mysql和sqlserver循环插入数据
- 柒微自动发卡系统源码
- css滑动门技术的应用,CSS滑动门技术
- 帐号 快速看图cad_CAD快速看图
- 职工信息管理系统—C语言工程实践
- visual studio 2012 密钥记录
- 大一高数求极限的方法小结
- mysql proxy maxscale_MaxScale: 一个用于解决MySQL扩展性的新工具(译)
- FYI-django数据库操作-外键
- Python内进制转换(2进制,8进制,10进制,16进制转换)
- 医学图像分析的发展历史
- sql:mysql:函数:字符串函数
- 名词解释atm网络_电信技术名词解释:什么是ATM技术
- ThymeLeaf工具类:Objects、String、Dates、Calendars、Numbers、Booleans、Arrays、Lists、Sets、Maps工具类
- 智者将建立桥梁,而愚者则建立高墙。 ----《黑豹》
热门文章
- Elasticsearch7.* + SpringBoot2.*根据中文和拼音分页去重搜索