fts全局搜索方案

解决问题,全拼检索,分词检索。

 

1 分析需求:

   全局搜索分为2种数据类型:1消息记录,2联系人,群, 聊天文件类型) ,但目前除聊天文件消息记录暂时不需要做fts全局搜索,聊天文件属于消息记录)。

   分析需求属性:联系人,好友,群, 群成员,聊天文件类型共同属性:数量有限(不一定),内容,分词方式相同,属于某一业务,需要查询快捷。

 

2 选数据库:考虑功能实现与数据库读写分离。

    fts 单独分库 用wcdb微信数据库 基于fts4/fts3;  (也可以用sqlite数据库,但综合扩展性不如wcdb)

    wcdb支持MMICU 分词,数据迁移支持良好。(MMICU分词器与官方ICU分词器类似,但对中文(象形文字)分词以及ICU库加载做了特殊处理,数据迁移搜索引擎暂时可以不做或延后)。

3 方案实现:

独立DB、读写分离:司派全文搜索在整体架构上独立于主业务,搜索DB也是独立于主业务DB。

3.1**

方案

更新数据:分即时数据与定时更新数据。

 

定时更新:当主业务数据发生更新时,主业务搜索业务模块更新数据存储到SPTempUpdateOperaterd 表(或者单独第三方数据库)。

 引擎搜索模块定时同步SPTempUpdateOperaterd 数据到搜索引擎数据库SPFTSIndex, SPBusMetaDataType表中(主从表放入同一个事物里面)。

 

即时更新数据:比如本地添加好友,需要即时更新到到搜索引擎里面。。

主业务业务搜索模块更新数据存储到SPTempUpdateOperaterd 表。

即时通知搜索引擎业务模块即时同步SPTempUpdateOperaterd的数据到搜索引擎数据库。

 

删除数据:

  主业务收到删除数据通知删除主业务数据,同时发通知给搜索引擎业务,删除对应数据。

 

查询数据:

  根据关键字分词通过业务模块去fts数据库搜索对应数据。

 

 

 

其中搜索模块需要负责数据处理并存储比如联系人罗亮,存储方式ll,luoliang luo liang 拼装成一条消息,罗亮 需要存1条数据到SPFTSIndex,SPBusMetaDataType中。

 

3.2**

当主业务需要查询,搜索业务模块接口传递给引擎业务模块, 传递type、subType,content 到搜索业务模块,搜索业务模块查询SPBusMetaData,SPFTSIndex表,级联查询方式查询出数据模型。 并回调给搜索业务模块。

 

3.3**

搜索引擎主要提供接口 插入接口,查询接口,删除接口,更新接口。

fts查询返回给业务层数据模型(返回数据库模型

 indexId      | long           | 主键,自增    |

| docid        | long long      | 外键,reference SPFTSIndex(docid)    (数据模块返回索引表实体)

| type         | long           | 业务主类型     |

| subType      | long           | 业务子类型     |

| busItemId    | string         | 业务ItemId    |

| timestamp    | long long      | 时间戳        |

| status       | long           | 数据状态     |  

4 fts数据库表

**索引表-SPFTSIndex**

 

| ColumnName   | ColumnType     |  Comment  |

| ------------ | :------------- | :--------:|

| docid        | long long      | 索引表自动生成,RowId的别名    |

| content      | string         | 索引字段(每插入一条content, FTS会分词,插入索引 |

| tokenize     | int            | 分词类型(全拼,简拼…)    |

 

**业务元数据表-SPBusMetaData **

| ColumnName   | ColumnType     |  Comment    |

| ------------ | :------------- | :---------: |

| indexId      | long           | 主键,自增    |

| docid        | long long      | 外键,reference SPFTSIndex(docid)    |

| type         | long           | 业务主类型     |

| subType      | long           | 业务子类型     |

| busItemId    | string         | 业务ItemId    |

| timestamp    | long long      | 时间戳        |

| status       | long           | 数据状态 ,正常数据与脏数据    |

| tokenize     | int            | 分词类型(全拼,简拼…)    |

 

**司派把业务属性数字化,具体如下表**

 

**业务主类型-SPBusMetaDataType**

 

| SPBusMetaDataType         |  DataType  |  Comment    |

| ------------------------- | :--------: | :---------: |

| SPBusMetaDataTypeUnkown   | -1         | 未知业务类型  |

| SPBusMetaDataTypeMsg      | 1          | 消息业务     |

| SPBusMetaDataTypeMail     | 2          | 邮件业务     |

| SPBusMetaDataTypeSchedule | 3          | 日程业务     |

| SPBusMetaDataTypeContact  | 4          | 联系人业务   |

 

**业务子类型-SPBusMetaDataType**

 

| SPBusMetaDataSubType             |  DataType |  Comment     |

| -------------------------------- | :-------: | :----------: |

| SPBusMetaDataSubTypeUnkown       | -1        | 未知子业务类型 |

| SPBusMetaDataSubTypeMsgSender    | 100       | 发送者        |

| SPBusMetaDataSubTypeMsgReceiver  | 101       | 接收者        |

| SPBusMetaDataSubTypeMsgContent   | 102       | 消息正文      |

| SPBusMetaDataSubTypeMsgFile      | 103       | 文件名        |

| SPBusMetaDataSubTypeMail         | 200       | 邮件业务      |

| SPBusMetaDataSubTypeSchedule     | 300       | 日程业务      |

| SPBusMetaDataSubTypeContUser     | 400       | 非好友        |

| SPBusMetaDataSubTypeContFriend   | 401       | 好友         |

| SPBusMetaDataSubTypeContGroup    | 402       | 群组         |

 

5 司派主业务数据库临时操作表:   ReadOnly数据库方案2实现需要,不建议再建readOnly数据库暂存在司派主业务数据库。

** -SPTempUpdateOperater**

 

ColumnName   | ColumnType     |  Comment      |

| ------------ | :------------- | :---------: |

| indexId      | long           | 主键,自增    |

| type         | long           | 业务主类型    |

| subType      | long           | 业务子类型    |

| busItemId    | string         | 业务ItemId   |

| operaterType | long           | 任务类型     |

| timestamp    | long long      | 时间戳       |

| status       | long           | 任务状态      |

| content      | string         | 内容          |

 

备注:微信建了3个数据库 主业务数据库,ReadOnly数据库,fts数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值