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

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

SQLite的全文搜索(Full-Text Search,简称FTS)是一种高效的全文搜索技术,基于倒排索引(Inverted Index)实现,用于在大量文本数据中快速找到包含特定词汇的记录。...FTS在SQLite中作为一个虚拟表(Virtual Table)模块实现,支持多种版本,如FTS3、FTS4和FTS5。...在创建FTS虚拟表时,SQLite会为每个词汇生成一个倒排索引,记录该词汇在哪些文档(即数据库记录)中出现。倒排索引使得全文搜索能够快速找到包含特定词汇的文档,而无需遍历整个数据库。...FTS虚拟表的结构主要包括以下几个部分: 词汇表:词汇表是一个包含所有不重复词汇的列表,用于映射词汇到其对应的倒排列表。...具体来说,FTS虚拟表将词汇表、倒排列表和文档元数据存储在一个或多个B树中,通过B树的键(Key)和值(Value)关联各个部分的数据。

73610

深度学习在视觉搜索和匹配中的应用

例如,来自挪威计算中心的Øivind Due Trier展示了一项工作,在一个为计算机视觉应用开发的标准的物体检测网络应用于过滤海拔地图上,为了定位挪威考古遗址。...在这篇文章的其余部分,我将展示一些我们在实验室中所做的工作,这些工作是将一个在一个领域(ImageNet自然图像)训练过的网络用于在另一个领域(航拍图像)进行基于图像的搜索。...视觉搜索以及所需的训练数据 深度学习或其他机器学习技术可用于开发识别图像中物体的鲁棒方法。对于来自飞机的航拍图像或高分辨率卫星照片,这将使不同物体类型的匹配、计数或分割成为可能。...然而,在实际中,更确切地说,是前M个片段包含船只,之后在片段M和片段N之间有一个间隔,其中一些包含船只,而不是所有都包含船只。在M之后的片段被假设不包含船,以避免误报。...然而,在我们的例子中,我们选择测试一种更简单的启发式来匹配船:我们在排序中从M之前选择了100个随机的片段(正样本),在N之后选择了100个随机的片段(负样本)。

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

    iOS微信全文搜索技术优化

    这些搜索功能从2014年上线至今,已经多年没有更新底层搜索技术,聊天记录使用的全文搜索引擎还是SQLite FTS3,而现在已经有SQLite FTS5,收藏首页的搜索还是使用简单的Like语句去匹配文本...,联系人搜索甚至用的是内存搜索(在内存中遍历所有联系人的所有属性进行匹配)。...SQLite的FTS3和FTS4组件则是属于SQLite的旧版本引擎,官方维护不多了,而且这两个版本都是将一个词的索引存到一条记录中,极端情况下有超出SQLite单条记录最大长度限制的风险。...在SQLite几个版本的引擎中,FTS5的搜索语法更加完备严谨,提供了很多接口给用户自定义搜索函数,所以搜索能力也相对强一点。...SQLite FTS3和FTS5的大部分性能很接近,FTS5索引的生成耗时比FTS3高一截,这个有优化方法。 综合考虑这些因素,我们选择SQLite FTS5作为iOS微信全文搜索的搜索引擎。

    2.5K60

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

    这些搜索功能多年没有更新底层搜索技术,聊天记录使用的全文搜索引擎还是 SQLite FTS3,而现在已经有 SQLite FTS5;收藏首页的搜索还是使用简单的 Like 语句来匹配文本;联系人搜索甚至用的是内存搜索...SQLite 的 FTS3 和 FTS4 组件则是属于 SQLite 的旧版本引擎,官方维护不多,而且这两个版本都是将一个词的索引存到一条记录中,极端情况下有超出 SQLite 单条记录最大长度限制的风险...因为微信搜索结果要么是按照时间排序,要么是按照一些简单的自定义规则排序。在 SQLite 几个版本的引擎中,FTS5 的搜索语法更加完备严谨。...SQLite FTS3 和 FTS5 的大部分性能很接近,FTS5 索引的生成耗时比 FTS3 高一截,但这个有优化方法。...搜索结果中还要支持获取匹配结果的层级、位置以及该段内容的原文和匹配词。 这个能力 FTS5 还没有,而 FTS5 的自定义辅助函数支持在搜索时获取到所有命中结果中的每个命中 Token 位置。

    3.6K62

    如何使用EvilTree在文件中搜索正则或关键字匹配的内容

    但EvilTree还增加了在文件中搜索用户提供的关键字或正则表达式的额外功能,而且还支持突出高亮显示包含匹配项的关键字/内容。  ...工具特性  1、当在嵌套目录结构的文件中搜索敏感信息时,能够可视化哪些文件包含用户提供的关键字/正则表达式模式以及这些文件在文件夹层次结构中的位置,这是EvilTree的一个非常显著的优势; 2、“tree...”命令本身就是分析目录结构的一个神奇工具,而提供一个单独的替代命令用于后渗透测试是非常方便的,因为它并不是每一个Linux发行版都会预安装的,而且在Windows操作系统上功能还会有部分受限制。  ...,在/var/www中寻找匹配“password = something”的字符串: 样例二-使用逗号分隔的关键字搜索敏感信息: 样例三-使用“-i”参数只显示匹配的关键字/正则式内容(减少输出内容长度...):  有用的关键字/正则表达式模式  搜索密码可用的正则表达式 -x ".{0,3}passw.{0,3}[=]{1}.{0,18}" 搜索敏感信息可用的关键字 -k passw,db_

    4K10

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

    一、思路 1、顺序扫描法 比如要找内容包含某一个字符串的聊天记录,就是一条聊天记录一条聊天记录的看,对于每一条聊天记录,从头看到尾,如果聊天记录包含此字符串,则聊天记录为要找的条目,接着看下一跳记录,直到扫描完所有的聊天记录...2、全文检索 对非结构化数据顺序扫描很慢,但对结构化数据的搜索却相对较快。...将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。...参看《Lucene 3.0 原理与代码分析完整版》 三、具体怎么做 目前大量的移动端(android,ios)都使用sqlite作为数据库,sqlite中支持fts表(full-text search的简称...,有fts3、fts4、fts5三个版本),根据需要选择相应的版本即可实现全文检索功能。

    2.3K40

    微信全文搜索优化之路

    FTS3:基础版本,具有完整的FTS特性,支持自定义分词器,库函数包括Offsets,Snippet。 FTS4:在FTS3的基础上,性能有较大优化,增加相关性函数计算MatchInfo。...这个分词规则的原因主要是在微信对全文搜索的结果排序需求主要是其他的属性排序,并非依据文档的相关性排序。即,全文搜索部分只需要找到存在关键词的文档,并不关心文档中存在几个关键词。...如图所示: 图中的红色圈内的数字表示,此会话中,包含关键字“我”的聊天记录的个数,而会话的排序规则就是会话的活跃时间。...同时使用是,OrderBy中必须包含GroupBy的字段才可以命中索引,原因是使用GroupBy会生成中间子表。...后续还有很多值得优化的地方,例如,在计算高亮时,如果在DocList的数据结构中,直接加入字节偏移,那么还可以节省一部分时间。 最后希望我的分享能够对大家有些价值,欢迎留言交流。

    9.3K42

    微信全文搜索优化之路

    FTS3:基础版本,具有完整的FTS特性,支持自定义分词器,库函数包括Offsets,Snippet。 FTS4:在FTS3的基础上,性能有较大优化,增加相关性函数计算MatchInfo。...这个分词规则的原因主要是在微信对全文搜索的结果排序需求主要是其他的属性排序,并非依据文档的相关性排序。即,全文搜索部分只需要找到存在关键词的文档,并不关心文档中存在几个关键词。...如图所示: 图中的红色圈内的数字表示,此会话中,包含关键字“我”的聊天记录的个数,而会话的排序规则就是会话的活跃时间。...同时使用是,OrderBy中必须包含GroupBy的字段才可以命中索引,原因是使用GroupBy会生成中间子表。...后续还有很多值得优化的地方,例如,在计算高亮时,如果在DocList的数据结构中,直接加入字节偏移,那么还可以节省一部分时间。 最后希望我的分享能够对大家有些价值,欢迎留言交流。

    1.8K20

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

    为全文搜索开发的一个插件,它是内嵌在标准的SQLite分布版本当中。...FTS5发布于2015年中。 3、存储架构 微信全文搜索在2014 年底上线,最初主要服务于联系人和聊天记录的业务搜索。...这个分词规则的原因主要是在微信对全文搜索的结果排序需求主要是其他的属性排序,并非依据文档的相关性排序。即,全文搜索部分只需要找到存在关键词的文档,并不关心文档中存在几个关键词。...图中的红色圈内的数字表示,此会话中,包含关键字“我”的聊天记录的个数,而会话的排序规则就是会话的活跃时间。...后续还有很多值得优化的地方,例如,在计算高亮时,如果在DocList的数据结构中,直接加入字节偏移,那么还可以节省一部分时间。

    2.7K20

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

    SQLCipher Android 封装层中很多设置需要手写 PRAGMA 语句实现,比如设置 KDF 迭代次数(兼容老版本 SQLCipher DB)、设置 Page Size 等操作。...WCDB 对这个部分做了改进,封装了 SQLiteCipherSpec 用于设置加密参数,设置好了传给 SQLiteDatabase 工厂方法就好了,不需要考虑 PRAGMA 语法和调用顺序。...全文搜索分词器与动态 ICU 加载 WCDB Android 自带了一个 FTS3/4 分词器,名为 mmicu,用于实现 SQLite 全文搜索。...优化 Cursor 实现 在 WCDB 发布时,我们的一篇文章上提到 Cursor 实现优化。...遍历 Cursor 过程中同一线程不做其他 DB 操作,遍历完关闭,配合 WAL 使用,是最佳实践。 本文来源于:WeMobileDev 微信公众号

    4.7K00

    SQLite大漏洞!所有Chromium浏览器中招,安卓iOS应用也受殃及

    允中 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一个SQLite大bug,影响之大、范围之广,不容小觑。...SQLite,全球最受欢迎的数据库之一。 在2017年发布的调查中,排名第三。...SQLite一方面可以被用于嵌入式的开发中,在一些内存很小的设备上面,它天生骄傲, 比MySQL、SQL Server之类的数据库管理软件不知高到哪里去。...SQLite占用内存小,但满足关系数据库的大部分特征,同时执行SQL语句的效率都是非常高。 另一方面,还能在后端使用来提高性能,在相同的情况下,一样的查询,它比MySQL什么的数据库快得多。...另外,如暂时没有条件采用官方提供的修补方案,也有一些应急建议方案: 1)关闭SQLite中的fts3功能; 2)禁用WebSQL:编译时不编译third-party的sqlite组件。

    89140

    Jetpack组件之Room

    也意识到了这个问题,在Jetpack组件中推出了Room,Room在SQLite上提供了一层封装,可以流畅的访问数据库。...在注释中添加与数据库关联的实体列表。 包含具有0个参数且返回使用@Dao注释的类的抽象方法。 Entity:表示数据库中的表。 DAO:包含用于访问数据库的方法。...Room支持全文搜索,通过使用@Fts3(仅在应用程序具有严格的磁盘空间要求或需要与较旧的SQLite版本兼容时使用)或@Fts4添加到Entity来实现。Room版本须高于2.1.0。...如果应用不支持使用全文搜索,可以将数据库的某些列编入索引,加快查询速度,通过@Entity注解添加indices,列出要在索引或符合索引中包含的列名称。...//在Database中添加获取DAO的抽象实例 public abstract CacheDao getCache(); //返回 long,这是插入项的新 rowId。

    1.9K20

    SQLite 语法

    SQLite 语法 SQLite 是遵循一套独特的称为语法的规则和准则。本教程列出了所有基本的 SQLite语法,向您提供了一个SQLite快速入门。...大小写敏感性 有个重要的点值得注意,SQLite是不区分大小写的,但也有一些命令是大小写敏感的,比如GLOB和glob在SQLite的语句中有不同的含义。...注释 SQLite 注释是附加的注释,可以在 SQLite 代码中添加注释以增加其可读性,他们可以出现在任何空白处,包括在表达式内和其他SQL语句的中间,但它们不能嵌套。...sqlite> .help -- 这是一个简单的注释 SQLite 语句 所有的SQLite语句可以以任何关键字开始,如SELECT、INSERT、UPDATE、DELETE、ALTER、DROP等,所有的语句以分号...database_name.table_name USING weblog( access.log ); or CREATE VIRTUAL TABLE database_name.table_name USING fts3

    1.2K50

    【开源公告】微信自研APM利器Matrix正式开源

    ) 搜索不含 alpha 通道的 png 文件 搜索未经压缩的文件类型 检查是否包含多 ABI 版本的动态库 统计 APK 中包含的 R 类以及 R 类中的 field count 搜索冗余的文件 检查是否有多个动态库静态链接了...STL 搜索 APK 中包含的无用资源 搜索 APK 中包含的无用 assets 文件 搜索 APK 中未经裁剪的动态库 02 SQLite Lint SQLite Lint是一个 SQLite 使用质量的自动化检测工具...,犹如一个 SQLite 优化高手在开发或者测试过程中不厌其烦地、仔细地 review 你的 SQL 语句,是团队高质量 SQLite 实践中的一个有用工具。...其中检测采集部分部署在客户端,分析部分部署在服务端,通过分离检测和分析两部分逻辑使该工具的流程对持续集成更友好。...:除具备 APKAnalyzer 的功能外,还支持统计 APK 中包含的 R 类、检查是否有多个动态库静态链接了 STL 、搜索 APK 中包含的无用资源,以及支持自定义检查规则等 输出的检查结果更加详实

    1.2K40

    微信自研 APM 利器,Matrix 正式开源了

    ) 搜索不含 alpha 通道的 png 文件 搜索未经压缩的文件类型 检查是否包含多 ABI 版本的动态库 统计 APK 中包含的 R 类以及 R 类中的 field count 搜索冗余的文件 检查是否有多个动态库静态链接了...STL 搜索 APK 中包含的无用资源 搜索 APK 中包含的无用 assets 文件 搜索 APK 中未经裁剪的动态库 SQLite Lint SQLite Lint是一个 SQLite 使用质量的自动化检测工具...,犹如一个 SQLite 优化高手在开发或者测试过程中不厌其烦地、仔细地 review 你的 SQL 语句,是团队高质量 SQLite 实践中的一个有用工具。...其中检测采集部分部署在客户端,分析部分部署在服务端,通过分离检测和分析两部分逻辑使该工具的流程对持续集成更友好。...:除具备 APKAnalyzer 的功能外,还支持统计 APK 中包含的 R 类、检查是否有多个动态库静态链接了 STL 、搜索 APK 中包含的无用资源,以及支持自定义检查规则等 输出的检查结果更加详实

    14.7K91

    如何使用CentOS 7上的Bottle Micro Framework部署Python Web应用程序

    如果我们想要搜索与Bottle有关的Python包,我们可以运行: pip search bottle 我们将从安装Bottle包开始: pip install bottle 在该过程完成后,我们应该能够在我们的应用程序中使用...这是我们程序中处理数据存储的部分。通过使用插件,Bottle可以轻松实现各种数据后端。 我们将为我们的数据库使用SQLite数据库文件。这是一个非常简单的数据库,专为轻量级任务而设。...SQLite包含在CentOS 7默认映像中,但如果您需要重新安装它,一个命令就可以轻松安装它: sudo yum install sqlite 它应该已经安装好了。...应用程序将搜索与模板函数中给出的名称匹配的模板,以.tpl结尾。它可以位于项目的主目录中,也可以位于名为view的目录中。...Bottle的插件系统也是一项重要的资产。插件在社区中被主动共享,并且通过插件系统很容易实现更复杂的行为。

    2K40

    Sqlite3详细解读

    结构化查询语言包含6个部分:(需掌握一、二、五) 一:数据查询语言(DQL):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。...当心,在你创建好一个表之后,你不能向表中添加 BIT型字段。如果你打算在一个表中包含BIT型字段,你必须在创建表时完成。 5....< 范围运算符(表达式值是否在指定的范围):BETWEEN…AND… NOT BETWEEN…AND… 列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) NOT IN (项1,项2...方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。...不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。

    3.7K10

    # 如何在Ubuntu 14.04上使用Bottle Micro Framework部署Python Web应用程序 ##

    如果我们想要搜索与Bottle有关的Python包,我们可以运行: pip search bottle 我们将从安装Bottle包开始: pip install bottle 在该过程完成后,我们应该能够在我们的应用程序中使用...这是我们程序中处理数据存储的部分。通过使用插件,Bottle可以轻松实现各种数据后端。 我们将为我们的数据库使用SQLite数据库文件。...另外,我们需要导入SQLite功能: import sqlite3 from bottle import route, run, template 接下来,我们将定义与URL路径匹配的路由/picnic...应用程序将搜索与模板函数中给出的名称匹配的模板,以.tpl。结尾。它可以位于项目的主目录中,也可以位于名为的目录中view。...Bottle的插件系统也是一项重要的资产。插件在社区中被主动共享,并且通过插件系统很容易实现更复杂的行为。

    1.5K10
    领券