lucene Collector 文档收集器

原创 2016年05月31日 13:21:19

编写自定义的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使用例子

Lucene的Collector是一项高级功能,涉及到搜索过程的详细步骤,通过定制Collector可以改变默认搜索,也可以在此阶段收集命中的文档的信息。 下面用一个例子演示如何自定义Collecto...
  • telnetor
  • telnetor
  • 2011年04月28日 01:19
  • 6264

一步一步跟我学习lucene(12)---lucene搜索之分组处理group查询

grouping介绍 我们在做lucene搜索的时候,可能会用到对某个条件的数据进行统计,比如统计有多少个省份,在sql查询中我们可以用distinct来完成类似的功能,也可以用group by来对查...
  • wuyinggui10000
  • wuyinggui10000
  • 2015年05月24日 00:57
  • 4198

关于Lucene Collector

Lucene Collector用于收集搜索之后的文档,可以方便做filter等,主要接口有setScorer,collect,setNextReader,acceptsDocsOutOfOrder。...
  • jollyjumper
  • jollyjumper
  • 2014年04月07日 19:57
  • 2547

Java8中重要的收集器Collector

Collector介绍Java8的stream api能很方便我们对数据进行统计分类等工作,函数式编程的风格让我们方便并且直观地编写统计代码。例如:Stream stream = Stream.ite...
  • zxc123e
  • zxc123e
  • 2017年03月29日 16:30
  • 1980

jmeter压测----环境准备(PerfMon Metrics Collector and Server Agent原理和使用)

今天来讲一讲jmeter的压测环境准备。 我们知道进行压测其实就是模拟多并发请求给服务器,然后通过一些性能指标来综合评估服务器所能承受的压力。 在去jmeter官网下载客户端后,是已经自...
  • Cloud_Huan
  • Cloud_Huan
  • 2017年05月31日 18:19
  • 3028

jdk8-Collector收集器之并行流陷阱与原理

收集器Collector是jdk8中最为重要的接口之一,一个Collector可分为5个部分(第五个是我自己加上的): 1、supplier 2、accumulator 3、combiner ...
  • wzq6578702
  • wzq6578702
  • 2017年03月26日 17:42
  • 660

TopFieldCollector实现索引排序和分页

public static List searchNearCollege(double lng,double lat,double distance,String collegeName,int cu...
  • awj3584
  • awj3584
  • 2013年08月26日 15:23
  • 3382

一步一步跟我学习lucene(13)---lucene搜索之自定义排序的实现原理和编写自己的自定义排序工具

自定义排序说明 我们在做lucene搜索的时候,可能会需要排序功能,虽然lucene内置了多种类型的排序,但是如果在需要先进行某些值的运算然后在排序的时候就有点显得无能为力了; 要做自定义查询,我们就...
  • wuyinggui10000
  • wuyinggui10000
  • 2015年05月24日 23:02
  • 3001

lucene源码分析---8

lucene源码分析—查询 IndexSearch::search public TopDocs search(Query query, int n) throws IOExcepti...
  • conansonic
  • conansonic
  • 2016年08月02日 09:23
  • 1377

Lucene底层原理和优化经验分享(2)-Lucene优化经验总结

系统优化遵从木桶原理:一只木桶能盛多少水,并不取决于最高的木板,而取决于最短的那块木板。Lucene优化也一样,找到性能瓶颈,找对解决方法,才能事半功倍,本文将从三方面阐述我们的Lucene优化经验:...
  • njpjsoftdev
  • njpjsoftdev
  • 2017年01月06日 09:21
  • 4100
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lucene Collector 文档收集器
举报原因:
原因补充:

(最多只允许输入30个字)