lucene索引结构

引擎结构

倒排索引基本概念

  • 正向索引:文件包含的信息
    Document-->Field-->Term-->Value
  • 反向索引:想要搜的信息在哪些文件里
lucene索引结构_第1张图片

搜索Lucene And Solr

  1. 取Lucene得文档链表
  2. 取solr得倒排链表
  3. 合并得到2,3
  4. 正向索引拿到全部信息

创建索引过程

lucene索引结构_第2张图片
  • tf: 词出现的频率,这篇文档里包含几个term
  • df: 文档频率,这个term出现在多少文件中。
    这两个有什么用,后面讲。
基本类型
  • Byte: 最基本类型,8位bit,有符号,-27~27-1
  • UInt32: 4个Byte (可以负数)
  • UInt64: 8个Byte (可以负数)
  • VInt :多个Byte,后7位表示数值,最高位表示是否还有Byte,0:没有 ; 1:有(不能表示负数) 例如:130 二进制表示 1000,0010 总共8位,一个Byte表示不了 1000,0010 ; 0000,0001


    lucene索引结构_第3张图片

检索过程

lucene索引结构_第4张图片
相关性排序原理

以人举例,如何判断两个人之间的关系?
人身上有很多特性:性别,身高,年龄,喜好,穿多大的鞋。。。
但是身高,年龄,性别这些因素判断占得比例会大很多。所以先找特征权重高的,再比较身高是不是差不多,年龄是不是差不多,进而判断两个人是不是差不多
所以映射到文档中:

  1. 一个文档有很多词
  2. 不同的term重要性不同

因而,需要找出哪些term对文档的重要程度,然后在判断这些term的关系。
衍生出两个概念:词的权重,词之间的关系

  • Term Weight 影响一个term在一个文档中的重要因素。
  1. tf:这个term在文档中出现了多少次,出现的越多,越重要
  2. df:多少文档出现了这个term。出现的越多,表明越不重要,可以用Log(n/df)表示。
    因此简单的实现公式是:T_weight=Tf * Log(n/Df);
  • 相关性:空间向量模型( VSM)
  1. 文档有很多次,每个词都有term_weight,看成空间上的向量 Document Vector={weight1,weight2,weight3...weightn }
  2. 查询语句看做是一个简单文档 Query Vector={weight1,weight2,weight3...weightn }
    放进N维空间,每个Term是一维


    lucene索引结构_第5张图片

夹角越小,余弦越大,打分越高,相关性越大。

lucene索引结构_第6张图片

所以D2分最高,最相似。
索引格式,压缩优化,检索优化有时间再写。

你可能感兴趣的:(lucene索引结构)