每周一个算法(1)---倒排索引


倒排索引 inverted index,第一次接触是在elasticsearch里面,里面的索引就是用的这个,其实es也是使用的Lucene作底层,inverted index是Lucene的核心算法。

网上说,“倒排索引”是实现单词到文档映射关系的最佳实现方式。

为什么叫做倒排索引呢?其实我认为中文翻译的这个名字并不好,(其实感觉编程上面的术语十有八九都没翻好,这也是阻碍程序员理解学习的重要原因之一,但是大家都这么叫了,你也得跟着这么叫,有的时候真正明白这个概念的时候,你确实觉得中文名字起的太差劲,所以经验就是:看到一个术语,立即去查英文,和英文文档),这个“排”字很有误导性,其实我觉得翻译成“反向索引”更好。

因为,inverted index的意思是,“使用内容来索引位置”,而不是通常的“使用位置索引内容”。

接下来,说说个人理解:

在Lucene中,对于一篇文档的处理,首先要Analyze,(对于英文来说)就是把“停用词”去掉,把大小写统一,把词性变化去掉(都还原成最原始的单词),ES里面也强调这个analyze的过程,并且支持用户指定analyzer(特定语言使用特定的analyzer)。

然后呢,就是建立索引的过程:

详细的过程就是这篇博客里写到的,灰常明白。

http://www.cnblogs.com/fly1988happy/archive/2012/04/01/2429000.html

基本意思就是对于一个词(关键词(也即上面analyze步骤生成的结果)),要统计出它所在的文章,出现的次数,以及在各个文章中的位置。

这样就对应生成了词典文件(Term Dictionary)、频率文件(frequencies)、位置文件 (positions)

其中词典文件还记录了一些附加信息:该关键字指向频率文件和位置文件的指针,及field信息(关键字属于的字段)

优质内容筛选与推荐>>
1、javascript高级程序设计---Event对象
2、LPC43xx SGPIO Slice 示意图
3、分享2011年至现在收集的45套高品质的免费网页模板
4、oracle基本语法
5、N的N次方


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号