之前的工作关系,需要在手机上支持中文和拼音搜索。由于手机上存储数据一般都是用 sqlite,所以是基于 sqlite3 fts5 来实现。这段时间再次入门 c++,所以想用 c++ 实现一下,一来用于练手,二来当时做的时候发现网络上这方面开源的实现不多,也造福下其他人。

背景

搜索现在几乎是每个 APP 必备的功能,用户已经习惯了搜索框搜一下,避免到处去找。搜索也是帮助用户查找旧信息,发现新功能的一个重要手段。平常我们用微信的时候经常会搜索联系人和聊天记录,发现微信这一块做的还是非常好的。关于微信的全文搜索,可以看看这两篇文章:微信全文搜索优化之路 和 微信移动端的全文检索多音字问题解决方案 。

第一篇文章主要是问题和原理的概述,第二篇文章是核心分词器的实现。我写的这个项目主要是实现了 simple 分词器,并提供一些辅助函数帮助使用。

Simple 分词器

搜索的核心是建倒排索引,建索引的核心是分词器。 跟名字一下,Simple 分词器的规则非常简单:

  1. 空白符跳过
  2. 连续的数字作为整体是一个索引
  3. 连续的英文字母作为整体并转换成小写索引
  4. 中文字单独建索引,并且把中文字转成拼音后也建搜索,这样就能同时支持中文和拼音检索。另外把拼音首字母也建索引,这样搜索 zjl 就能命中 “周杰伦”。
  5. 其他字符统一单独建索引,这样搜索

    Simple: 一个支持中文和拼音搜索的 sqlite fts5插件相关推荐

    1. Elasticsearch7.* + SpringBoot2.*根据中文和拼音分页去重搜索

      目的:根据商品名称按中文和拼音分页搜索,并且按商品名去重.这里以Elasticsearch7.4为例. 一.插件安装 1.安装ik中文分词器 下载地址:https://github.com/medcl ...

    2. elasticsearch 条件去重_Elasticsearch7.* + SpringBoot2.*根据中文和拼音分页去重搜索-Go语言中文社区...

      目的:根据商品名称按中文和拼音分页搜索,并且按商品名去重.这里以Elasticsearch7.4为例. 一.插件安装 1.安装ik中文分词器 进入es安装目录 elasticsearch/plugin ...

    3. Enc-Base64位加密程序包括源代码(支持中文和特殊符号)

      Enc-Base64位加密程序包括源代码(支持中文和特殊符号) 创建一个新类,即可调用该类的加密和解密方法 Option   Explicit 'Base64编码函数:Base64Encode 'In ...

    4. 中文和拼音的相关转换

      关于中文和拼音的相关转换, 代码如下, 对于使用Swift的coder,可以bridge一下 #define HANZI_START 19968 #define HANZI_COUNT 20902st ...

    5. 微信小程序md5加密支持中文和特殊字符

      微信小程序默认的md5加密不支持中文和特殊符号,如果需要支持,需要引入md5加密.也是npm包,可在js和nodejs引入 或者使用cdn(https://cdn.bootcss.com/blueim ...

    6. 微信小程序------MD5加密(支持中文和不支持中文)和网络请求(get和post)

      2019独角兽企业重金招聘Python工程师标准>>> 开发中常常遇到MD5加密,最近做小程序也用到了,简单总结了一下: 这要有两个加密文件,一个不支持中文,一个支持,所以你选择支持 ...

    7. 免费又好用的参考文献管理软件zotero该怎么使用?可以同时支持中文和英文吗?...

      超级有用!超级实用!超级超级好用! 如果你想从一个学渣小白,变成一个文献大神,看这篇回答就够了. 对于研究生而言,文献阅读以及学术写作几乎是生活日常.那么,一款方便.快捷.高效的文献管理软件显得至关重 ...

    8. SpringBoot 集成 ES 7.6.2 并对字段进行中文和拼音分词处理

      前言 在最近做的流媒体项目中需要集成 ES 搜索引擎,目前 ES 最新版本为 7.x 版本,在以往的项目中我都采用的是 spring 集成的 spring-data-es, 使用自定义类集成 elas ...

    9. SpringBoot集成ES 7.6.2 并对字段进行中文和拼音分词处理

      文章目录 前言 一.为什么不用spring封装的spring-data-es? 二.springboot集成es的两种方式 1.spring-data-es使用elasticsearch 2.doc对 ...

    最新文章

    1. 第一次当领导,一定要知道的5个工具
    2. 转载:Ajax及 GET、POST 区别
    3. BCH底层协议真的不能被修改吗?
    4. 软件工程实践2017 结队项目——第二次作业
    5. element表格取消全选_ElementUi 表格取消全选框,用文字表示
    6. java sqlserver 遍历_mysql和sqlserver循环插入数据
    7. 柒微自动发卡系统源码
    8. css滑动门技术的应用,CSS滑动门技术
    9. 帐号 快速看图cad_CAD快速看图
    10. 职工信息管理系统—C语言工程实践
    11. visual studio 2012 密钥记录
    12. 大一高数求极限的方法小结
    13. mysql proxy maxscale_MaxScale: 一个用于解决MySQL扩展性的新工具(译)
    14. FYI-django数据库操作-外键
    15. Python内进制转换(2进制,8进制,10进制,16进制转换)
    16. 医学图像分析的发展历史
    17. sql:mysql:函数:字符串函数
    18. 名词解释atm网络_电信技术名词解释:什么是ATM技术
    19. ThymeLeaf工具类:Objects、String、Dates、Calendars、Numbers、Booleans、Arrays、Lists、Sets、Maps工具类
    20. 智者将建立桥梁,而愚者则建立高墙。 ----《黑豹》

    热门文章

    1. java异步调用方法
    2. mathtype7中文版下载安装后如何关联word
    3. js获取摄像头中的视频流并上传到后台
    4. 京东数据挖掘工程师常用的 10多个 pandas 函数
    5. 手机看图APP,哪款好用呢?
    6. python中codecs模块_python自然语言编码转换模块codecs介绍
    7. spring boot单元测试之druid NullPointException问题解决
    8. 平安夜祝福网站html5源码,《初开在平安夜之花》:无法逃离的荒诞乐园评测
    9. 【swinUnet官方代码测试自己的数据集(已训练完毕)】
    10. 爬虫(一)爬虫原理和网页构造