思想行动之Tips提示框引擎的索引结构

摘要

       对于一个轻量级的引擎来说,索引结构直接决定了其性能的好坏,最近的工作中一直接触到本地搜索,参考一些关于Lucene的思想。本文将陈述几种提示框引擎的索引结构,(下面的都用Tips来取代提示框引擎)只为抛砖引玉,未经验证。欢迎大家拍砖!鉴于Tips返回结果的特殊性:一般只需返回十个结果、因为每敲入一个字即是对引擎的一次请求、用户对引擎的请求十分频繁对性能要求十分的高。因此,文中所述的一些粗略的想法只是针对Tips来开展。

一、暂且叫词倒排索引结构

       这种结构怎么来描述呢?简单来讲就是一个词对应一系列的结果(倒排索引这个东西是讲烂了的)。不妨定义如下:

       [Word]-->[NUM] [WORDID1] [WORDID2] [WORDID3]...

       Word代表是用户输入的词条、NUM是该词条指向的结果数(最多10条)、WORDID1...WORDID2等是结果的ID编号、或者直接是WORD的偏移(这里就假设为编号吧)。eg:[有限]-->[3] [4] [6] [7]。接着找到编号为4、6、7的结果词条输出即可(这里还得2分查找)。这样的时间效率是不是可以是O(LogN)。接下来,诸如此样的索引结构,那索引文件得多大?能行吗?好,我们来分析之:我们假设总共有词条数为N,词条的平均长度为M。

       可以粗略估算一下:N个词条,平均长度为M的话,那么Word的最大个数就可以知道是 N*M,后面的索引单元是多少?我觉得也是N*M就够了。所以总的文件大小是:

       SUM <= (sizeof WORD + sizeof num ) * ( N * M ) + sizeof WORDID * N * M;

       我们令N=200w,M=5。最大的长度为16个字节。那么SUM <= 240MB。

二、树型结构

        树形结构是这样一种结构:

                  Word

       /              |            \

Word1      Word2    Word3
/    |   \         /    |   \       /    |   \

       上述,那么一个Word代表一个字。





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值