lucene Collector 文档收集器

    xiaoxiao2026-03-04  5

    编写自定义的Colletor,可以对搜索返回的文档实现更精确的控制。

    1.接口

    1.1 Collector

    org.apache.lucene.search.Collector 接口。用于聚合原始的搜索结果,实现排序及定制化的过滤。 LeafCollector org.apache.lucene.search.Collector.getLeafCollector(LeafReaderContext context) 接口内的方法。创建一个新的collector 来完成给定上下文的收集。 boolean org.apache.lucene.search.Collector.needsScores() 接口内的方法。标识是否需要计算文档得分。

    1.2 LeafCollector

    org.apache.lucene.search. LeafCollector 接口。它有collect()与setScorer()两个方法声明。见下面两行。 void org.apache.lucene.search.LeafCollector. collect(int doc)  重要方法。这个docid是段内的docid,全局的docid=LeafReaderContext.docBase+doc。 void org.apache.lucene.search.LeafCollector. setScorer(Scorer scorer) 设置打分器。

    2.抽象类

    2.1 TopDocsCollector

    org.apache.lucene.search.TopDocsCollector

    抽象类,声明见下。 public abstract class TopDocsCollector<T extends ScoreDoc> implements Collector {...}PriorityQueue<T> org.apache.lucene.search.TopDocsCollector. pq 字段。这个优先队列盛放top n 的文档。

    2.2 TopScoreDocCollector

    org.apache.lucene.search. TopScoreDocCollector 抽象类,声明见下。内含三个静态类。

    public abstract class TopScoreDocCollector extends TopDocsCollector<ScoreDoc> { private static class PagingTopScoreDocCollector extends TopScoreDocCollector{...} abstract static class ScorerLeafCollector implements LeafCollector {...} private static class SimpleTopScoreDocCollector extends TopScoreDocCollector {...} }

    3.设置搜索的超时时间

    org.apache.lucene.search.TimeLimitingCollector 这个类用于及时停止耗时的搜索。如果慢于设定阀值,当前搜索线程就会因抛出 TimeExceededException异常而停止。 org.apache.lucene.search.TimeLimitingCollector.TimeLimitingCollector(Collector collector, Counter clock, long ticksAllowed) 构造函数。用于对已有的Collector进行包装

    相关资源:lucene collector的使用
    最新回复(0)