|
What this is
Other links
The source codepackage org.apache.lucene.search.spans; /** * Copyright 2004 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.io.IOException; import java.util.Collection; import java.util.ArrayList; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.index.TermPositions; /** Matches spans containing a term. */ public class SpanTermQuery extends SpanQuery { private Term term; /** Construct a SpanTermQuery matching the named term's spans. */ public SpanTermQuery(Term term) { this.term = term; } /** Return the term whose spans are matched. */ public Term getTerm() { return term; } public String getField() { return term.field(); } public Collection getTerms() { Collection terms = new ArrayList(); terms.add(term); return terms; } public String toString(String field) { if (term.field().equals(field)) return term.text(); else return term.toString(); } public Spans getSpans(final IndexReader reader) throws IOException { return new Spans() { private TermPositions positions = reader.termPositions(term); private int doc = -1; private int freq; private int count; private int position; public boolean next() throws IOException { if (count == freq) { if (!positions.next()) { doc = Integer.MAX_VALUE; return false; } doc = positions.doc(); freq = positions.freq(); count = 0; } position = positions.nextPosition(); count++; return true; } public boolean skipTo(int target) throws IOException { if (!positions.skipTo(target)) { doc = Integer.MAX_VALUE; return false; } doc = positions.doc(); freq = positions.freq(); count = 0; position = positions.nextPosition(); count++; return true; } public int doc() { return doc; } public int start() { return position; } public int end() { return position + 1; } public String toString() { return "spans(" + SpanTermQuery.this.toString() + ")@"+ (doc==-1?"START":(doc==Integer.MAX_VALUE)?"END":doc+"-"+position); } }; } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.