lucene3.0.3中的SpanFirstQuery

SpanFirstQuery是一个很简单的SpanQuery,在根据spans进行召回doc的时候,他会判断当前出现的位置是否满足一定的条件——出现的是不是在指定的end之前,如果是的话说明当前的位置是符合要求的,否则会继续读取下一个位置。我们看一下他的getSpans方法

@Override
public Spans getSpans(final IndexReader reader) throws IOException {
	return new Spans() {
		
		private Spans spans = match.getSpans(reader);//获得封装的SpanQuery的span,返回的spans是这个spans的代理。
		/** 这个spanquery唯一最重要的地方就是这里,只有某个term出现的位置不能超过指定的end的值才算是当前的doc合格。 */
		@Override
		public boolean next() throws IOException {
			while (spans.next()) { // scan to next match
			      if (end() <= end)//只要当前的位置不是小于end则继续循环位置,直到所有的位置都循环完或者某个位置小于end
				     return true;
			}
			return false;
		}
		
		@Override //移动到不小于指定的docid得位置
		public boolean skipTo(int target) throws IOException {
			if (!spans.skipTo(target))
				return false;
			return spans.end() <= end || next();
		}
                //其他的方法都是直接调用的spans的方法。
		@Override
		public int doc() {
			return spans.doc();
		}
		@Override
		public int start() {
			return spans.start();
		}
		@Override
		public int end() {
			return spans.end();
		}
		// TODO: Remove warning after API has been finalized
		@Override
		public Collection<byte[]> getPayload() throws IOException {
			ArrayList<byte[]> result = null;
			if (spans.isPayloadAvailable()) {
				result = new ArrayList<byte[]>(spans.getPayload());
			}
			return result;// TODO: any way to avoid the new construction?
		}
		
		// TODO: Remove warning after API has been finalized
		@Override
		public boolean isPayloadAvailable() {
			return spans.isPayloadAvailable();
		}
		
		@Override
		public String toString() {
			return "spans(" + SpanFirstQuery.this.toString() + ")";
		}
	};
}

 

我也不知道这个spanquery有啥用。。。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值