首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

微信手机端的本地数据全文检索优化之路

本文以移动平台广泛采用的SQLite FTS Extension为例,介绍了移动平台FTS的基本原理,结合微信Android客户端自身实践,重点讲述微信在FTS上的一些性能优化经验。...为全文搜索开发的一个插件,它是内嵌在标准的SQLite分布版本当中。...:Android和IOS平台本身就支持SQLite,并且FTS Extension的使用就和正常使用SQLite表一样; [4] 兼容性好:受益于SQLite本身兼容性很好,SQLite FTS Extension...FTS5发布于2015年中。 3、存储架构 微信全文搜索在2014 年底上线,最初主要服务于联系人和聊天记录的业务搜索。...在方案设计之初,为了让这个功能有很好的体验,同时考虑到未来接入业务的会不断增多,我们设计目标是: 3.1 搜索速度快 微信全文搜索使用SQLite FTS4 Extension,通过倒排索引提高搜索速度

2.7K20

微信全文搜索优化之路

本文以移动平台广泛采用的SQLite FTS Extension为例,介绍了移动平台FTS的基本原理,结合微信安卓客户端自身实践,重点讲述微信在FTS上的一些性能优化经验。...SQLite FTS Extension SQLite FTS Extension是SQLite为全文搜索开发的一个插件,它是内嵌在标准的SQLite分布版本当中,它具有如下的特点: 搜索速度快:使用倒排索引加速查找过程...稳定性好:目前SQLite在移动端的稳定性比较好,FTS Extension就是SQLite的基础上搭建的 接入简单:Android和IOS平台本身就支持SQLite,并且FTS Extension的使用就和正常使用...FTS5发布于2015年中。 存储架构 微信全文搜索在2014 年底上线,最初主要服务于联系人和聊天记录的业务搜索。...文档就是全文搜索中的基本单位,可以是一个网页,一篇文章或者是一条聊天记录 目标词语偏移:在搜索阶段,通过关键词查找搜索索引可以拿到目标词语偏移 函数输出: 目标字节偏移:表示关键词在命中Doc中的字节偏移

9.3K42
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    微信全文搜索优化之路

    本文以移动平台广泛采用的SQLite FTS Extension为例,介绍了移动平台FTS的基本原理,结合微信安卓客户端自身实践,重点讲述微信在FTS上的一些性能优化经验。...SQLite FTS Extension ---- SQLite FTS Extension是SQLite为全文搜索开发的一个插件,它是内嵌在标准的SQLite分布版本当中,它具有如下的特点: 搜索速度快...:使用倒排索引加速查找过程 稳定性好:目前SQLite在移动端的稳定性比较好,FTS Extension就是SQLite的基础上搭建的 接入简单:Android和IOS平台本身就支持SQLite,并且FTS...FTS5发布于2015年中。 存储架构 ---- 微信全文搜索在2014 年底上线,最初主要服务于联系人和聊天记录的业务搜索。...文档就是全文搜索中的基本单位,可以是一个网页,一篇文章或者是一条聊天记录 目标词语偏移:在搜索阶段,通过关键词查找搜索索引可以拿到目标词语偏移 函数输出: 目标字节偏移:表示关键词在命中Doc中的字节偏移

    1.8K20

    微信团队分享:微信移动端的全文检索多音字问题解决方案

    微信客户端全文搜索在上线以后,也经常收到用户关于多音字问题的反馈。所以,微信全文搜索中的多音字搜索成了一个迫切需要解决的问题。...本文重点讲述微信安卓客户端在SQLite FTS5的基础上,多音字问题的解决方案。...建议:您也可以在微信客户端的sqlite数据库中找到本文中相关技术的真实实现,微信的SQLite样本库可在此下载《微信本地数据库破解版(含iOS、Android),仅供学习研究 [附件下载]》(特别申明...6、客户端索引方案 在确定字表方案后,需要在客户端本地使用SQLite FTS5建立索引。因为拼音搜索主要是采用前缀搜索的方式,所以建立索引的内容以及方式需要考虑FTS5前缀搜索的过程。 ?...而SQLite FTS5正是通过搜索一个词语来找到对应的DocId,通过TermOffset来定位该词语在Document中的位置。 方案优点: 实现较为简单; 可覆盖所有多音字情况。

    6.2K33

    SQLite全文搜索引擎:实现原理、应用实践和版本差异

    SQLite的全文搜索(Full-Text Search,简称FTS)是一种高效的全文搜索技术,基于倒排索引(Inverted Index)实现,用于在大量文本数据中快速找到包含特定词汇的记录。...FTS在SQLite中作为一个虚拟表(Virtual Table)模块实现,支持多种版本,如FTS3、FTS4和FTS5。...1.2 虚拟表 FTS虚拟表(Full-Text Search Virtual Table)是SQLite中实现全文搜索的一种特殊表结构。它用于存储全文索引数据,包括倒排索引的信息。...2.7 小结 通过以上实施方法,可以在工程项目中应用SQLite的FTS功能,实现高效的全文搜索。...三、FTS3、FTS4和FTS5的区别 FTS3、FTS4和FTS5都是SQLite的全文搜索(Full-Text Search)引擎,用于实现高效的全文搜索功能。

    73110

    IM移动端怎么搜索本地聊天记录

    IM软件客户端需要支持本地存储的聊天记录的搜索功能,对于这类非结构化数据(全文数据)一般有两种检索方法。...但是对于大量的数据,这种方法效率很低。 2、全文检索 对非结构化数据顺序扫描很慢,但对结构化数据的搜索却相对较快。...将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。...参看《Lucene 3.0 原理与代码分析完整版》 三、具体怎么做 目前大量的移动端(android,ios)都使用sqlite作为数据库,sqlite中支持fts表(full-text search的简称...,有fts3、fts4、fts5三个版本),根据需要选择相应的版本即可实现全文检索功能。

    2.3K40

    微信全文搜索耗时降94%?我们用了这种方案

    目录 1 IOS 微信全文搜索技术的现状 2 全文搜索引擎的选型与优化     2.1 搜索引擎选型     2.2 实现 FTS5 的 Segment 自动 Merge 机制     2.3 分词器优化...这些搜索功能多年没有更新底层搜索技术,聊天记录使用的全文搜索引擎还是 SQLite FTS3,而现在已经有 SQLite FTS5;收藏首页的搜索还是使用简单的 Like 语句来匹配文本;联系人搜索甚至用的是内存搜索...02 全文搜索引擎的选型与优化 2.1 搜索引擎选型 IOS 客户端可以使用的全文搜索引擎并不多,主要有 SQLite 三个版本的 FTS 组件、Lucene 的 C++实现版本 CLucene...SQLite 的 FTS 组件因为底层使用普通的表来实现,可以完美继承 SQLite 的事务能力。 在技术风险方面:Lucene 主要应用于服务端,在客户端没有大规模应用的案例。...因为微信搜索结果要么是按照时间排序,要么是按照一些简单的自定义规则排序。在 SQLite 几个版本的引擎中,FTS5 的搜索语法更加完备严谨。

    3.6K62

    iOS微信全文搜索技术优化

    二、全文搜索引擎的选型与优化 1、搜索引擎选型 iOS客户端可以使用的全文搜索引擎并不多,主要有SQLite三个版本的FTS组件、Lucene的C++实现版本CLucene和C语言桥接版本Lucy。...SQLite的FTS组件因为底层还是使用普通的表来实现的,可以完美继承SQLite的事务能力。...在SQLite几个版本的引擎中,FTS5的搜索语法更加完备严谨,提供了很多接口给用户自定义搜索函数,所以搜索能力也相对强一点。...SQLite FTS3和FTS5的大部分性能很接近,FTS5索引的生成耗时比FTS3高一截,这个有优化方法。 综合考虑这些因素,我们选择SQLite FTS5作为iOS微信全文搜索的搜索引擎。...2、实现FTS5的Segment自动Merge机制 SQLite FTS5会把每个事务写入的内容保存成一个独立的b树,称为一个segment,segment中保存了本次写入内容中的每个词在本次内容中行号

    2.5K60

    微信团队开源的终端数据库WCDB有什么优势?

    FTS5优化:WCDB对SQLite的FTS5组件进行了优化,重新设计了FTS5分词器,并丰富了分词器的能力,还支持了拼音搜索。...开发者可以为每个平台编写相应的数据库访问代码,而这些代码在底层都调用同一个C++实现的数据库逻辑,从而确保了代码的一致性和可维护性。...更细致的性能优化能力: 说明:新版WCDB通过优化FTS5(全文搜索)组件和引入可中断事务等特性,进一步提升了数据库的性能。...FTS5优化使得全文搜索更加高效,而可中断事务则允许在长时间运行的数据库操作中,主线程可以及时响应用户操作,避免应用卡顿。 举例:在一个电商平台中,用户搜索商品时需要快速返回搜索结果。...如何在WCDB中实现数据备份和修复方案 在WCDB 1.0中,备份和修复方案主要是针对SQLite数据库的页码进行备份,以解决数据库损坏后数据丢失的问题。

    33200

    微信移动端数据库组件 WCDB 系列:Android 特性篇(四)

    SQLCipher Android 封装层中很多设置需要手写 PRAGMA 语句实现,比如设置 KDF 迭代次数(兼容老版本 SQLCipher DB)、设置 Page Size 等操作。...全文搜索分词器与动态 ICU 加载 WCDB Android 自带了一个 FTS3/4 分词器,名为 mmicu,用于实现 SQLite 全文搜索。...最终实现效果便是在不需要自带 ICU 库的前提下使用 ICU 库的断词、归一化等功能,为最终 APK 包省下 10MB 以上空间。...微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog WCDB 还提供了性能监控接口 SQLiteTrace,实现接口并绑定到 SQLiteDatabase 可以在每次 执行 SQL 语句或连接池拥堵的时候得到回调...优化 Cursor 实现 在 WCDB 发布时,我们的一篇文章上提到 Cursor 实现优化。

    4.7K00

    移动客户端多音字搜索

    本文首次发表在《程序员》杂志 2018 年 02 月期。 前言 ---- 移动客户端全文搜索中的多音字问题一直是搜索体验的痛点之一。微信客户端全文搜索在上线以后,也经常收到用户关于多音字问题的反馈。...所以,微信全文搜索中的多音字搜索成了一个迫切需要解决的问题。本文重点讲述微信安卓客户端在SQLite FTS5的基础上,多音字问题的解决方案。...词表方案 ---- 中文全文搜索引擎如果需要支持拼音,就需要把输入的中文字符,转化为拼音字母,如果不考虑多音字的情况,我们只需要一张单个汉字的拼音表即可实现转化,但是在多音字的情况下,由于每个汉字在不同的词语当中的读音都有可能不一样...客户端索引方案 ---- 在确定字表方案后,需要在客户端本地使用SQLite FTS5建立索引。因为拼音搜索主要是采用前缀搜索的方式,所以建立索引的内容以及方式需要考虑FTS5前缀搜索的过程 ?...而SQLite FTS5正是通过搜索一个词语来找到对应的DocId,通过TermOffset来定位该词语在Document中的位置。

    3.7K210

    HarmonyOS 开发实践——基于关系型数据库的数据持久化

    如:/data/app/el2/100/database/{bundleName}/entry/rdb场景六:全文检索(FTS)使用思路方案HarmonyOS关系型数据库底层使用的是Sqlite,在Sqite...在创建FTS虚拟表时,SQLite会为每个词汇生成一个倒排索引,记录该词汇在哪些文档(即数据库记录)中出现。倒排索引使得全文搜索能够快速找到包含特定词汇的文档,而无需遍历整个数据库。...FTS虚拟表(Full-Text Search Virtual Table)是SQLite中实现全文搜索的一种特殊表结构。它用于存储全文索引数据,包括倒排索引的信息。...虽然FTS虚拟表在查询时表现得像普通的SQLite表,但其实现和存储方式与普通表有很大不同。...使用全文检索时,创建FTS表需要使用CREATE VIRTUAL TABLE语句,执行全文搜索需要使用MATCH关键字,当前HarmonyOS关系型数据库并没有直接提供相关接口,但是数据库底层是支持的,

    21620

    Android 架构组件的最新进展 (下篇)

    根据我们曾经做的调查,开发者们希望 Android 官方可以维护一些实用的组件库和架构实践,以降低中大型应用的开发门槛,这样开发团队就可以集中更多精力在实际业务的优化和改进上。...是一个在 SQLite 上提供抽象层的持久存储库,您可以回顾我们之前的介绍文章了解更多 Room 的详细信息。...getSongsWithElapsedTimeLessThan(1000) deleteSongsWithIds(songs.map { it.songId }) return songs } 复制代码 全文搜索...全文搜索功能是对 SQLite 的一个扩展,让其创建一个数据表从而更高效地检索数据。...而在 2.1 中,只需要加入一个 @Fts4 注解,就可以通过 MATCH 语句让一切都轻松很多: // Room 2.1 @Entity @Fts4 data class Song( @PrimaryKey

    83920

    《程序员》9月精彩内容:ACL 2017精选论文、深度学习中的注意力机制、声纹识别技术助力远程身份认证

    微博深度学习平台架构和实践(黄波,微博机器学习平台技术负责人;何沧平,微博深度学习平台架构师) 随着人工神经网络算法的成熟、GPU计算能力的提升,深度学习在众多领域都取得了重大突破。...图灵的战前模拟计算机:对现代计算机之父的历史回顾 定制处理器:获得便宜芯片的新途径 自主驾驶最大的问题是人 古巴地下互联网 ---- 移动 微信全文搜索优化之路(陈家敏,微信终端开发工程师) 基于本地数据的全文搜索...(Full-Text-Search,简称FTS)在移动应用上扮演着重要角色,与基于服务端提供的搜索服务不同,移动端受硬件条件限制,尤其在数据量相对较大的情况下,搜索性能问题表现得十分突出。...本文以移动平台广泛采用的SQLite FTS Extension为例,介绍了移动平台FTS的基本原理,并结合微信Android客户端自身实践,重点讲述微信在FTS上的一些性能优化经验。...---- Mesos容器引擎的架构设计和实现解析(张乾,Mesosphere中国区研发负责人) 提到容器,大家第一时间都会想到Docker,毕竟Docker是目前最为流行的容器开源项目,它实现了一个容器引擎

    59430

    迅搜xunsearch全文搜索引擎在负载均衡集群中的配置方法

    迅搜xunsearch全文搜索引擎在负载均衡集群中的配置方法   近来在一个电商项目中需要对商品检索实现中文分词和全文搜索功能,,于是使用了国内做得比较好并且是开源的迅搜全文搜索引擎,对PHP支持良好并且简单易用好上手...我需要实现的架构是这样的: ?   ...看了迅搜官方的说明文档后,以为在启动迅搜服务的时候以允许局域网访问的模式启动就可以了,以bin/xs-ctl.sh -b inet start 命令启动,即监听到所有本地地址上,但发现这样做实际上是行不通的...,经过尝试后得出实现的方法是这样的:   以0号服务器作为搜索数据服务器为例,它的IP是192.168.2.210,则以监听这个IP的模式启动,启动命令是:bin/xs-ctl.sh -b 192.168.2.210...start,然后0号的项目配置文件中,server.search配置项要修改默认值,改为:server.search = 192.168.2.210:8384;127.0.0.1:8384(最后一项后面是不需要加分号的

    74420

    筛选和分析文献的AI神器paperai

    原因是:他在CORD-19(COVID-19文献数据集) Kaggle挑战赛中斩获了6项大奖。 ?...句嵌入索引分析CORD-19 简单来说就是,该模型就是句嵌入索引和带有文章的SQLite数据库的组合。 首先,每篇文章都被解析成句子,并与文章元数据一起存储在SQLite中。...SQLite本身就具有虚拟表模块FTS5,可以进行全文搜索。 这个全文搜索引擎,允许用户在大量文档集合中高效地搜索包含一个或多个搜索词。...SQLite的FTS5默认加权方案是tf-idf,此外,它还支持BM25,这使得性能够进一步提高。 ? 之后,使用FastText+BM25创建句嵌入索引。...之后,会在对你所检索的问题进行句子提取和所在文献的排序,最终在文献中,所在句子会以高亮的形式框出。 目前,检索生成的报告支持多种格式的输出: Markdown(默认),输出Markdown报告。

    2.9K30

    Jetpack组件之Room

    首语 Android使用SQLite作为数据库存储数据,但是SQLite使用繁琐且容易出错,有许多开源的数据如GreenDAO、ORMLite等,这些都是为了方便SQLite的使用而出现的,Google...也意识到了这个问题,在Jetpack组件中推出了Room,Room在SQLite上提供了一层封装,可以流畅的访问数据库。...优势 拥有SQLite的所有操作功能。 使用简单,通过注解的方式实现相关功能,编译时自动生成实现类impl。 与LiveData、LifeCycle及Paging天然支持。...Room支持全文搜索,通过使用@Fts3(仅在应用程序具有严格的磁盘空间要求或需要与较旧的SQLite版本兼容时使用)或@Fts4添加到Entity来实现。Room版本须高于2.1.0。...如果应用不支持使用全文搜索,可以将数据库的某些列编入索引,加快查询速度,通过@Entity注解添加indices,列出要在索引或符合索引中包含的列名称。

    1.9K20

    Kaggle八项大奖斩获其6:用于筛选和分析文献的paperai

    原因是:他在CORD-19(COVID-19文献数据集) Kaggle挑战赛中斩获了6项大奖。...句嵌入索引分析CORD-19 简单来说就是,该模型就是句嵌入索引和带有文章的SQLite数据库的组合。 首先,每篇文章都被解析成句子,并与文章元数据一起存储在SQLite中。...SQLite本身就具有虚拟表模块FTS5,可以进行全文搜索。 这个全文搜索引擎,允许用户在大量文档集合中高效地搜索包含一个或多个搜索词。...SQLite的FTS5默认加权方案是tf-idf,此外,它还支持BM25,这使得性能够进一步提高。 之后,使用FastText+BM25创建句嵌入索引。...之后,会在对你所检索的问题进行句子提取和所在文献的排序,最终在文献中,所在句子会以高亮的形式框出。 目前,检索生成的报告支持多种格式的输出: Markdown(默认),输出Markdown报告。

    44720
    领券