lucene查询索引的6个步骤
2017-12-04 18:31
351 查看
先准备数据源,以两个文件名字符串做为值,保存两个document,如下图:
然后以"path:txt"为查询条件,来查询索引文件。我调试发现会有6个步骤。数据主要来源于3个文件,tim、doc、fdt。
1.先根据查询字段与词找出该字段所有的term(.tim文件中的terms)
2.加载tim文件(seekExact方法中currentFrame.loadBlock)
从terms查到匹配的term,匹配term下标记录在SegmentTermsEnumFrame.nextEnt(SegmentTermsEnumFrame.scanToTermLeaf(BytesRef, boolean) line: 567)
3.从.tim的stats里取出词频,metadata里取出位置信息
4.如果命中多个doc,定位到它们在doc文件的开始下标
5.1 单个doc,直接取出tim metadata里的singletonDocID
5.2 多个doc,读出所有docId
6.根据docId,从fdt文件中取出原字符串。
最后总结下查询过程如下图,虽然这个过程比较简单,但它是基于一个强大的索引文件结构。这个索引结构很复杂,主要数据结构有:分词信息在tim文件、倒排doc列表在doc文件、原数据在fdt文件。
然后以"path:txt"为查询条件,来查询索引文件。我调试发现会有6个步骤。数据主要来源于3个文件,tim、doc、fdt。
1.先根据查询字段与词找出该字段所有的term(.tim文件中的terms)
2.加载tim文件(seekExact方法中currentFrame.loadBlock)
从terms查到匹配的term,匹配term下标记录在SegmentTermsEnumFrame.nextEnt(SegmentTermsEnumFrame.scanToTermLeaf(BytesRef, boolean) line: 567)
3.从.tim的stats里取出词频,metadata里取出位置信息
4.如果命中多个doc,定位到它们在doc文件的开始下标
5.1 单个doc,直接取出tim metadata里的singletonDocID
5.2 多个doc,读出所有docId
6.根据docId,从fdt文件中取出原字符串。
最后总结下查询过程如下图,虽然这个过程比较简单,但它是基于一个强大的索引文件结构。这个索引结构很复杂,主要数据结构有:分词信息在tim文件、倒排doc列表在doc文件、原数据在fdt文件。
相关文章推荐
- lucene功能二:查询索引步骤;及代码示例
- Lucene查询索引
- 如何使用lucene.net,建立索引,索引目录,查询返回结果
- Lucene学习一:入门级Demo,创建索引和查询高亮显示
- Lucene4.10使用教程(二):简单的索引建立和读取步骤(HelloLucene)(转载)
- lucene.net 2.9.2 实现索引生成,修改,查询,删除功能
- 用Lucene建立索引及查询示例
- Lucene查询索引
- lucene--4.查询索引
- lucene 基于索引的查询
- java鬼混笔记:lucene 1、简单的创建索引和查询
- Lucene学习之一:使用lucene为数据库表创建索引,并按关键字查询
- lucene.net 2.9.2 实现索引生成,修改,查询,删除功能
- lucene4.8.0 + IKAnalyzer5.0.1 创建索引与查询demo
- lucene学习笔记2-查询索引
- lucene第四部 查询索引
- lucene 索引创建查询
- lucene 查询索引
- (一)Lucene创建索引步骤
- Lucene 实现txt文件的构建索引与查询