专栏首页普通程序员IM移动端怎么搜索本地聊天记录

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

IM软件客户端需要支持本地存储的聊天记录的搜索功能,对于这类非结构化数据(全文数据)一般有两种检索方法。

一、思路

1、顺序扫描法

比如要找内容包含某一个字符串的聊天记录,就是一条聊天记录一条聊天记录的看,对于每一条聊天记录,从头看到尾,如果聊天记录包含此字符串,则聊天记录为要找的条目,接着看下一跳记录,直到扫描完所有的聊天记录。数据量小时,这种方法直接、方便。但是对于大量的数据,这种方法效率很低。

2、全文检索

对非结构化数据顺序扫描很慢,但对结构化数据的搜索却相对较快。将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。

二、原理

假设有2条聊天记录,具体内容如下

(1)今天天气很好

(2)今天可能会下雨

分词

将两条聊天记录进行分词,得到以下词元。今天、天气、很好、可能、会、下雨。(分词是一个很复杂的问题,不在这里细讲。对于移动端的基本检索要求,也可以考虑一元分词,把聊天记录拆成一个一个的字)

索引

创建字典

合并相同词,形成倒排链表

检索

用户输入一个“天气”,立即可以通过上边的索引,检索到第1条聊天记录!

以上仅仅是最基本的原理,每个步骤都还有很多细节需要处理。参看《Lucene 3.0 原理与代码分析完整版》

三、具体怎么做

目前大量的移动端(android,ios)都使用sqlite作为数据库,sqlite中支持fts表(full-text search的简称,有fts3、fts4、fts5三个版本),根据需要选择相应的版本即可实现全文检索功能。

相关阅读

《IM系统的SESSION结构》

《IM系统如何调试TCP协议》

《NAT是怎么回事》

本文分享自微信公众号 - 普通程序员(farmerbrag),作者:封宇

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 上线过程踩到的反序列化的坑

    序列化反序列化问题网上有一大堆文章进行专题讲解,这篇文章也不打算介绍序列化反序列化的细节。这篇文章只是分享项目中在这个问题上实际遇到的问题。

    普通程序员
  • IM系统如何调试TCP协议

    20字节的header,包括headLength包头长度,clientVersion客户端版本,cmdId命令Id号,seq消息序列号,bodyLength消息...

    普通程序员
  • JWT技术解决IM系统的认证痛点

    瓜子有统一登录认证系统SSO,IM长连接通道也利用这个系统做安全认证,结构如下图。

    普通程序员
  • QQ怎么找回聊天记录?这才是你需要的

      QQ怎么找回聊天记录?在使用QQ的时候经常会收到很多的消息,不管群消息还是别人私发给你的消息都会保存在手机里面,不过也有很多群消息都没有什么关系,当我们发...

    科技第六人
  • QQ怎么恢复聊天记录?这样也能恢复聊天记录

      QQ怎么恢复聊天记录?在使用QQ的时候会碰到过将手机里面的聊天记录删除了,但是很多人都不知道怎么将删除的聊天记录进行找回,遇到这种问题的时候该如何将删除的聊...

    科技第六人
  • 微信服务号模板消息接口新增"设置行业"和"添加模板"及细节优化

      微信服务号模板消息可以向用户发送重要的服务通知,如信用卡刷卡通知,商品购买成功通知等。昨日,微信团队发布公告称模板消息新增“设置行业”和“添加模板”接口及细...

    ytkah
  • 跨境电子商务及支付业务管理体系的构建

    2011年在全球经济增长放缓背景下,我国跨境电子商务小额出口业务的总体规模超过100亿美元,虽仅占2011年全国出口总额的0.5%,但同比增速超过100%。20...

    一个会写诗的程序员
  • QQ号和QQ邮箱注册的腾讯云账号是不同的

    QQ号和QQ邮箱注册的腾讯云账号是不同的,例如493883885和493883885@qq.com在腾讯云控制台对应账号ID:493883885和账号ID:10...

    我爱你的一诺
  • 转:安装完QQ必须要删除掉的几个恐怖文件

    很多关注自己电脑硬件温度的朋友,一般都懂得去查看什么进程占用CPU较高,可能发现过有这么几个进程的CPU占用会有时莫名其妙的非常之高,它们的名字叫 QQExte...

    williamwong
  • 5.3 结构类型

    Cg 语言支持结构体(structure),实际上 Cg 中的结构体的声明、使用和 C++ 非常类似(只是类似,不是相同)。一个结构体相当于一种数据类型,可以定...

    代码咖啡

扫码关注云+社区

领取腾讯云代金券