Lucene 搜索过程记录

介绍

今天记录一下Lucene的搜索过程,基于自己的理解吧。

概要

  1. 获取词典及词典的文档号倒排表
  2. 解析Query语句,转为一棵Query查询树
  3. 根据Query构建Weight,用于计算查询权重并构建查询评分器,主要调用IndexSearcher.createWeight(),实际是由Query.createWeight()生成,在不需要评分或在缓存的时候,会添加到缓存。
  4. 构建Scorer,用于对文档集进行评分,主要调用weight.bulkScorer(ctx);
  5. 对文档进行评分 主要调用 scorer.score(leafCollector, ctx.reader().getLiveDocs());
  6. 结果集在Collector中,最终返回结果

记录

  1. 自己写的新的Query需要重写createWeight(),以便生成相应的Weight
  2. Weight中需要重写scorer()等重要的方法,用于进行评分
  3. scorer主要重写 matches()和matchCost()

总的来说Lucene以及帮我们做了大部分工作,根据自己的需要就可以自定义一些查询。比如Elasticsearch的ScriptQuery就是重写了一个createWeight(),scorer()方法返回了一个ConstantScoreWeight。

你可能感兴趣的:(Lucene 搜索过程记录)