zoukankan      html  css  js  c++  java
  • 倒排索引

    inverted index,也称反向索引,通常称之为倒排索引。用来存储在全文检索下某个Term在文档中存储的映射,这种数据结构在文档搜索中经常用到。

    有两种不同的反向索引方式

    1 一条记录的水平反向索引,包含每个引用单词的文档列表。

    2 一个单词的水平反向索引,又包含每个单词在一个文档中的位置。计算比较复杂。

    与反向索引相对的是正向索引。

    正向索引结构如下

    文档1:关键词1,关键词2,关键词3,...

    文档2:关键词1,关键词222,关键词444,...

    ......

    正向索引结构下,如果用户搜索语句为:xxx关键词1,那么就需要对全文进行检索,找到含有关键词1的所有文档,然后根据打分模型打分,排好序后返回给用户。当文档数目很多的时候,这种索引结构无法满足实时搜索。

    因此,提出了反向索引的概念。

    反向索引结构如下

    关键词1:文档1,文档2,文档3,...

    关键词2:文档1,文档22,文档33,...

    这样,当用户搜索:xxx关键词1,可以找到关键词1对应的所有文档,然后根据打分模型打分后返回给用户。这样的效率提高很多。

    总结

    一个倒排索引,是由文档中所有不重复词的列表组成,每个词对应一个包含该词的所有文档列表。但是,倒排索引存储了比包含一个term的文档列表多地多的信息,它可能包含每一个term的文档数量,一个term出现在指定文档中的频次,每个文档中term的顺序,每个文档的长度,所有文档的平均长度等等。这些统计信息使Elasticsearch知道哪些term更重要,哪些文档更重要,也就是相关性。

    在全文搜索的早些时候,会为整个文档集合建立一个大索引,并且写入磁盘。只要新索引准备好了它就会替代旧的索引,最近的修改可以被检索。

    倒排索引目前有一些问题

    1 Quick 和 quick以独立的关键词出现,但是用户认为它们是相同的。

    2 fox和foxes非常相似,就像dog和dogs,它们有相同的词根。

    3 jumped和leap,尽管它们没有相同的词根,但是意思相近。

    我们需要将词条规范为标准模式,这样,我们可以搜索到一些同用户搜索词不完全一致,但是有一定相关性的文档。

    另外,如果我们只是将文档的content进行了规范化,而用户搜索词没有标准化时,仍然无法搜索到结果,因此,也需要对用户搜索词做相同的规范化处理。

  • 相关阅读:
    charles使用教程指南
    根域名服务器 根服务器一般指根域名服务器 (DNS)
    DNS原理及其解析过程【精彩剖析】
    代理工具Charles使用
    cisco 为每个单独的人员设置不同的用户名和密码
    大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
    KAFKA分布式消息系统
    Android 监听屏幕锁屏,用户解锁
    如何判断微信内置浏览器
    Android,iOS,浏览器打开手机QQ与指定用户聊天界面
  • 原文地址:https://www.cnblogs.com/mydesky2012/p/11107141.html
Copyright © 2011-2022 走看看