一个简单的内存倒排索引

有任务需要对用户的词,检索到相应的广告词。(个性化的广告词),概括为:通过简短(a,b,c,d)  检索出 广告词(A, B ,C, D)

1、如果内存一个比较简单的是在内存中做索引。

      内存建索引的节省内存的方法:

      1)广告词索引:id1-> A; id2 ->B; id3->C; id4 ->D;

      2) 细粒度词到广告词的倒排索引:

      建立切词后的细粒度的词;假设A切出来有a,c; B切出来的也有: a, b

     那么a -> id1, id2

             b -> id2

  2、进一步加入权重:

        在1)中加入对应的权重:

       1)广告词索引:id1-> A,wegihtA; id2 ->B,weightB; id3->C,weightC; id4 ->D,weightD;

       (A,weightA)是一个结构体,作为一个结构存储。

       2)倒排: 如果在建立倒排时,拉链太长,我们可以在建立的时候,按wegiht排序好, 按wegiht进行截断。这样在拉链的从前往后weight是降序排列。

 

 3、检索服务:

       在检索的时候,比如输入为(a,c)两个细粒度词租组成的查找源,则直接从倒排里找到对应的下标值。

       可以先求交(这就看实际需要了),如果求交没有的话,在取并集。

       a,c也相对应带有权重(比如tf, 或者wordrank分值)f, 和weightA,wegihtB 加权,得到最终的各个query下标对应的分值,然后排序。

       最终可以选取top,但为了多样性一般是选了topN,然后在从中random选取n个(n为最终需要的)

 4、最终分数:

       最终分数可以是f 和weight的加权值。 根据需要,也可以是产出(a,c)对应的权重直接付给 最终的结果。

         


扩展延升:

       小型的应用可以内存搞定,但是字典可能会越来越大,不同的业务需求也来越多,这种服务越来越多,纯粹内存形式搞不定。 现在各种分布式的搜索架构的ElasticSearch

运用比较广泛,在Lucene基础上再包了一层。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值