• 倒排索引


    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进行了规范化,而用户搜索词没有标准化时,仍然无法搜索到结果,因此,也需要对用户搜索词做相同的规范化处理。

  • 相关阅读:
    创建数据库指定编码格式
    java开发环境配置
    Eclipse 配置工程
    声明式事务管理 的5 种方式
    web容器启动顺序
    2.1 实践篇:使用ping来检测网速
    1.1 mysql安装
    1.2 测试人员与开发人员比例
    1.0 软件测试能力
    1.4 测试各阶段(单元、集成、系统 、Alpha、Beta、验收)
  • 原文地址:https://www.cnblogs.com/mydesky2012/p/11107141.html
Copyright © 2020-2023  润新知