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

背景

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

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

Simple 分词器

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

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

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

    1. php 字符串截取,支持中文和其他编码

      function.php //使用方法 $content= mb_substr($content,0,25,'utf-8'); /** * 字符串截取,支持中文和其他编码 * @static * @a ...

    2. Sqlite-net 修改版 支持中文和CodeFirst技术

      最近, 做的一个windows 桌面WPF程序, 需要数据库支持.尝试了 sql server 的开发版,使用EF , 效率太低.后来采用sqlite数据库,中间踩坑无数.但最终完美的解决了这些问题. ...

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

      开发中常常遇到MD5加密,最近做小程序也用到了,简单总结了一下: 这要有两个加密文件,一个不支持中文,一个支持,所以你选择支持的来用就行了: 也随便说说小程序的get和post网络请求. 来看看效果图 ...

    4. 仿照微信的效果,实现了一个支持多选、选原图和视频的图片选择器,适配了iOS6-9系统,3行代码即可集成.

      提示:如果你发现了Bug,请尝试更新到最新版.目前最新版是1.6.4,此前的版本或多或少存在一些bug的~如果你已经是最新版了,请留一条评论,我看到了会尽快处理和修复哈~ 关于升级iOS10和Xcdo ...

    5. SQLite中使用全文搜索FTS

      SQLite中使用全文搜索FTS   SQLite支持全文搜索.通过全文搜索功能,可以方便用户快速进行查找.在iOS中,GRDB.FMDB等SQLite框架均支持FTS技术,如FTS3.FTS4等.各 ...

    6. 【Solr】 solr对拼音搜索和拼音首字母搜索的支持

      问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的.  用lucene实现 1.建索引, 多建一个索引字段 ...

    7. js对页面中的内容进行拼音搜索,只对后台已经传过来的页面数据进行索引

      实现输入拼音(可以使用拼音首字母来查),来查询出已经存在于页面的数据 注意:这种写法只能适用于页面中已经存在的数据进行检索,大体意思是将本页内的数据拼接成一个字符串,然后通过该字符串去检索匹配的字符串 ...

    8. 小米2S 中文和英文支持TWRP,真实双系统支持

      经过我几天的努力小米2S的TWRP 的功能已经完美了. 支持功能 : 中文和英文显示能相互切换 真实双系统功能已经完成95%. 刷入手机方法.由于时间原因我只制作了img文件.没有制作成卡刷包格式. ...

    9. 一个支持种子、磁力、迅雷下载和磁力搜索的APP源代码

      磁力搜索网站2020/01/12更新 https://www.cnblogs.com/cilisousuo/p/12099547.html 一个支持种子.磁力.迅雷下载和磁力搜索的APP源代码 Lic ...

    随机推荐

    1. vue中v-on支持的事件总结

      资源事件 事件名称 何时触发 error 资源加载失败时. abort 正在加载资源已经被中止时. load 资源及其相关资源已完成加载. beforeunload window,document 及 ...

    2. 02-信贷路由项目rose框架拆分dubbo

      项目架构和 rose 框架搭建见  https://www.cnblogs.com/yuanpeng-java/p/9835984.html 1.dubbo 框架架构及组成 2.注册中心安装及配置 h ...

    3. [LC] 53. Maximum Subarray

      Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...

    4. go proxy转发工作中碰到的问题

      A-B 需求是一个中转 A-Proxy-B 读取来源请求A,在proxy读取body作些处理,再转给B,再把返回内容转给A 问题出在proxy这里 如果先把请求给B,再读body res, err : ...

    5. text-align和vertical-align

      1.text-align(水平对齐)text-align样式使元素在其定界区域内水平对齐,其取值可以是left.right.center或justify.justify使元素两端对齐.2.vertic ...

    6. VSAN磁盘扩容与收缩(二)

    7. IT技术团队的管理幅度

      一.先科普下 管理幅度,又称管理宽度,是指在一个组织结构中,管理人员所能直接管理或控制的员工数目.这个数目是有限的,当超这个限度时,管理的效率就会随之下降. 二.经历现状 20左右的中小型团队,不算大 ...

    8. hibernate主键(generator)生成方式

      1) assigned 主键由外部程序负责生成,无需Hibernate参与. 2) hilo 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态. 3) seqhilo 与 ...

    9. 图的DFS。。类似树的DFS

      Depth-First Search (DFS) Depth-first search (DFS) is an algorithm for traversing or searching tree o ...

    10. CF_Edu.#51_Div.2_1051F_The Shortest Statement

      F. The Shortest Statement time limit per test:4 seconds memory limit per test:256 megabytes input:st ...