使用倒排索引实现规则匹配

什么是倒排索引?

倒排索引,也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。

笔者在最近的工作中开发了使用倒排索引去建立一个规则库实现匹配规则的功能。接下来通过一个场景来说明是如何实现的。

使用倒排索引存储规则

1.定义一些规则
规则1

性别:女

规则2

爱好:旅游

规则3

性别:女;爱好:旅游;

规则4

性别:女;爱好:旅游;职业:产品经理

规则5

性别:男;爱好:旅游;职业:产品经理

2.把完整规则的每一项拆开,统计每个规则项对应出现在哪些规则中

规则项规则id
性别-女1,3,4
爱好-旅游2,3,4,5
性别-男5
职业-产品经理4,5

3.现在需要把规则项存到HashMap中,HashMap的key是规则项,value记录了该规则项包含的规则id列表。

此时我们已经使用HashMap建立好了一个规则库。接下来看如何匹配规则。

用户匹配规则

  • 用户1

性别:女;爱好:旅游、读书;职业:产品经理

把用户1中的条件项拆散,去HashMap中查找key值下的规则列表。

  1. 性别-女: 拿到规则id列表:1,3,4

  2. 爱好-旅游: 拿到规则id列表:2,3,4,5

  3. 爱好-读书: 没有命中规则

  4. 职业-产品经理: 拿到规则id列表:4,5

     

现在可以统计每一条命中的规则的命中次数

规则id命中次数
规则11
规则21
规则32
规则43
规则52

我们再分析一下每个规则里有多少个规则项,并且命中次数是否等于规则项数,如果相等,则该条规则完全命中。

规则id规则项数命中次数是否完全命中
规则111
规则211
规则322
规则433
规则532

因此现在可以找出用户1能完全匹配到的规则为:规则1,规则2,规则3,规则4。

规则匹配还有一种范围匹配的场景,如需要匹配年龄是20-30区间的用户,后面也会介绍如何做范围匹配。

转载于:https://www.cnblogs.com/thcy1314/p/10708787.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值