【Lucene】lucene的searcher.search查询机制

lucene查询的时候也是先评分排序,最后才获取文档 甚至获取文档都不是必须的?

是的,你的理解完全正确。

  1. Lucene 查询流程 = 先评分 & 排序,后可选地取回文档
  • IndexSearcher.search(...) 在内部先创建 `Weight`、`Scorer`,再交给 Collector 遍历倒排表。

  • Collector(如 TopScoreDocCollector) 一边遍历一边实时计算 score 并维护一个优先队列(PriorityQueue),因此"打分 → 排序"发生在遍历倒排表阶段。

  • TopDocs 返回的只是 "docId + score" 的堆顶列表;真正的 `Document` 对象此时并未加载。

  1. 获取 Document 不是必须的
  • 只有当你调用 `searcher.doc(docId)` 或 `IndexSearcher.doc(...)` 时,Lucene 才会根据 docId 去 stored fields 做随机读;

  • 如果你只需要 命中数、聚合、统计、自定义 Collector 计算,完全可以不取回 Document,从而节省大量 IO。

  1. 代码示例:只统计命中数,不加载文档

```java

TotalHitCountCollector c = new TotalHitCountCollector();

searcher.search(query, c);

System.out.println("命中:" + c.getTotalHits()); // 无 Document 加载

```

  1. 小结

阶段 是否发生 是否必须

倒排表遍历 + 打分 + 排序 ✅ ✅

加载 stored fields 取 Document ✅ ❌(按需)

因此,Lucene 可以在完全不取回 Document 的情况下完成一次查询,这正是它高性能的关键之一。

相关推荐
2601_961875242 天前
法考资料电子版|pdf|资料已整理
elasticsearch·搜索引擎·pdf·全文检索·solr·lucene·sphinx
2601_961845422 天前
考研公共课资料推荐|英语数学政治|电子版|资料已整理
搜索引擎·中文分词·solr·lucene·sphinx·高考
解决问题no解决代码问题2 天前
漏洞详解|CVE-2026-44825 Apache Solr 隐藏默认账号漏洞(附检测+修复全套方案)
apache·solr·lucene
2601_961845424 天前
高考真题下载|2025高考全科真题网盘分类整理
搜索引擎·中文分词·solr·lucene·sphinx·高考
2601_961194028 天前
教资科三美术考什么|初中高中美术题型考点和模板资料
leetcode·elasticsearch·职场和发展·蓝桥杯·pat考试·lucene
2601_9611940211 天前
考研模拟卷谁的比较好|27李林合工大肖四肖八数学英语408PDF
考研·elasticsearch·全文检索·代理模式·lucene·桥接模式·访问者模式
醉颜凉17 天前
Lucene底层原理:倒排索引实现原理与代码实战,彻底吃透搜索引擎核心
搜索引擎·mybatis·lucene
risc12345621 天前
DocumentsWriterFlushQueue
lucene
risc12345621 天前
DocumentsWriterDeleteQueue 的核心设计思想
java·全文检索·lucene
music score1 个月前
google 的C++自动化测试框架详解(Google Test)(2)
c++·qt·lucene