From e676d0f3d44d2c9adae11278e973c41dc87bb452 Mon Sep 17 00:00:00 2001 From: Erik Hatcher Date: Sat, 13 Sep 2003 23:40:29 +0000 Subject: [PATCH] Elements of Java Style #1: Adhere to the style of the original. I wholeheartedly agree. Reverting my previous infraction of this rule git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@150023 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/lucene/search/DateFilter.java | 206 ++++++++-------- src/java/org/apache/lucene/search/Hits.java | 224 +++++++++--------- .../org/apache/lucene/search/QueryFilter.java | 53 +++-- 3 files changed, 243 insertions(+), 240 deletions(-) diff --git a/src/java/org/apache/lucene/search/DateFilter.java b/src/java/org/apache/lucene/search/DateFilter.java index 1e40fb9ea96..a8cc8e9b1ce 100644 --- a/src/java/org/apache/lucene/search/DateFilter.java +++ b/src/java/org/apache/lucene/search/DateFilter.java @@ -71,116 +71,116 @@ import org.apache.lucene.index.IndexReader; * {@link DateField}. */ public class DateFilter extends Filter { - String field; + String field; - String start = DateField.MIN_DATE_STRING(); - String end = DateField.MAX_DATE_STRING(); + String start = DateField.MIN_DATE_STRING(); + String end = DateField.MAX_DATE_STRING(); - private DateFilter(String f) { - field = f; + private DateFilter(String f) { + field = f; + } + + /** + * Constructs a filter for field f matching dates + * between from and to inclusively. + */ + public DateFilter(String f, Date from, Date to) { + field = f; + start = DateField.dateToString(from); + end = DateField.dateToString(to); + } + + /** + * Constructs a filter for field f matching times + * between from and to inclusively. + */ + public DateFilter(String f, long from, long to) { + field = f; + start = DateField.timeToString(from); + end = DateField.timeToString(to); + } + + /** + * Constructs a filter for field f matching + * dates on or before before date. + */ + public static DateFilter Before(String field, Date date) { + DateFilter result = new DateFilter(field); + result.end = DateField.dateToString(date); + return result; + } + + /** + * Constructs a filter for field f matching times + * on or before time. + */ + public static DateFilter Before(String field, long time) { + DateFilter result = new DateFilter(field); + result.end = DateField.timeToString(time); + return result; + } + + /** + * Constructs a filter for field f matching + * dates on or after date. + */ + public static DateFilter After(String field, Date date) { + DateFilter result = new DateFilter(field); + result.start = DateField.dateToString(date); + return result; + } + + /** + * Constructs a filter for field f matching + * times on or after time. + */ + public static DateFilter After(String field, long time) { + DateFilter result = new DateFilter(field); + result.start = DateField.timeToString(time); + return result; + } + + /** + * Returns a BitSet with true for documents which should be + * permitted in search results, and false for those that should + * not. + */ + public BitSet bits(IndexReader reader) throws IOException { + BitSet bits = new BitSet(reader.maxDoc()); + TermEnum enumerator = reader.terms(new Term(field, start)); + TermDocs termDocs = reader.termDocs(); + if (enumerator.term() == null) { + return bits; } - /** - * Constructs a filter for field f matching dates - * between from and to inclusively. - */ - public DateFilter(String f, Date from, Date to) { - field = f; - start = DateField.dateToString(from); - end = DateField.dateToString(to); - } - - /** - * Constructs a filter for field f matching times - * between from and to inclusively. - */ - public DateFilter(String f, long from, long to) { - field = f; - start = DateField.timeToString(from); - end = DateField.timeToString(to); - } - - /** - * Constructs a filter for field f matching - * dates on or before before date. - */ - public static DateFilter Before(String field, Date date) { - DateFilter result = new DateFilter(field); - result.end = DateField.dateToString(date); - return result; - } - - /** - * Constructs a filter for field f matching times - * on or before time. - */ - public static DateFilter Before(String field, long time) { - DateFilter result = new DateFilter(field); - result.end = DateField.timeToString(time); - return result; - } - - /** - * Constructs a filter for field f matching - * dates on or after date. - */ - public static DateFilter After(String field, Date date) { - DateFilter result = new DateFilter(field); - result.start = DateField.dateToString(date); - return result; - } - - /** - * Constructs a filter for field f matching - * times on or after time. - */ - public static DateFilter After(String field, long time) { - DateFilter result = new DateFilter(field); - result.start = DateField.timeToString(time); - return result; - } - - /** - * Returns a BitSet with true for documents which should be - * permitted in search results, and false for those that should - * not. - */ - public BitSet bits(IndexReader reader) throws IOException { - BitSet bits = new BitSet(reader.maxDoc()); - TermEnum enumerator = reader.terms(new Term(field, start)); - TermDocs termDocs = reader.termDocs(); - if (enumerator.term() == null) { - return bits; - } - + try { + Term stop = new Term(field, end); + while (enumerator.term().compareTo(stop) <= 0) { + termDocs.seek(enumerator.term()); try { - Term stop = new Term(field, end); - while (enumerator.term().compareTo(stop) <= 0) { - termDocs.seek(enumerator.term()); - try { - while (termDocs.next()) { - bits.set(termDocs.doc()); - } - } finally { - termDocs.close(); - } - if (!enumerator.next()) { - break; - } - } + while (termDocs.next()) { + bits.set(termDocs.doc()); + } } finally { - enumerator.close(); + termDocs.close(); } - return bits; + if (!enumerator.next()) { + break; + } + } + } finally { + enumerator.close(); } + return bits; + } - public String toString() { - StringBuffer buffer = new StringBuffer(); - buffer.append(field); - buffer.append(":"); - buffer.append(DateField.stringToDate(start).toString()); - buffer.append("-"); - buffer.append(DateField.stringToDate(end).toString()); - return buffer.toString(); - } + public String toString() { + StringBuffer buffer = new StringBuffer(); + buffer.append(field); + buffer.append(":"); + buffer.append(DateField.stringToDate(start).toString()); + buffer.append("-"); + buffer.append(DateField.stringToDate(end).toString()); + return buffer.toString(); + } } diff --git a/src/java/org/apache/lucene/search/Hits.java b/src/java/org/apache/lucene/search/Hits.java index 05227723924..5c24b7a2e42 100644 --- a/src/java/org/apache/lucene/search/Hits.java +++ b/src/java/org/apache/lucene/search/Hits.java @@ -61,144 +61,146 @@ import org.apache.lucene.document.Document; /** A ranked list of documents, used to hold search results. */ public final class Hits { - private Query query; - private Searcher searcher; - private Filter filter = null; + private Query query; + private Searcher searcher; + private Filter filter = null; - private int length; // the total number of hits - private Vector hitDocs = new Vector(); // cache of hits retrieved + private int length; // the total number of hits + private Vector hitDocs = new Vector(); // cache of hits retrieved - private HitDoc first; // head of LRU cache - private HitDoc last; // tail of LRU cache - private int numDocs = 0; // number cached - private int maxDocs = 200; // max to cache + private HitDoc first; // head of LRU cache + private HitDoc last; // tail of LRU cache + private int numDocs = 0; // number cached + private int maxDocs = 200; // max to cache - Hits(Searcher s, Query q, Filter f) throws IOException { - query = q; - searcher = s; - filter = f; - getMoreDocs(50); // retrieve 100 initially + Hits(Searcher s, Query q, Filter f) throws IOException { + query = q; + searcher = s; + filter = f; + getMoreDocs(50); // retrieve 100 initially + } + + /** + * Tries to add new documents to hitDocs. + * Ensures that the hit numbered min has been retrieved. + */ + private final void getMoreDocs(int min) throws IOException { + if (hitDocs.size() > min) { + min = hitDocs.size(); } - // Tries to add new documents to hitDocs. - // Ensures that the hit numbered min has been retrieved. - private final void getMoreDocs(int min) throws IOException { - if (hitDocs.size() > min) { - min = hitDocs.size(); - } + int n = min * 2; // double # retrieved + TopDocs topDocs = searcher.search(query, filter, n); + length = topDocs.totalHits; + ScoreDoc[] scoreDocs = topDocs.scoreDocs; - int n = min * 2; // double # retrieved - TopDocs topDocs = searcher.search(query, filter, n); - length = topDocs.totalHits; - ScoreDoc[] scoreDocs = topDocs.scoreDocs; - - float scoreNorm = 1.0f; - if (length > 0 && scoreDocs[0].score > 1.0f) { - scoreNorm = 1.0f / scoreDocs[0].score; - } - - int end = scoreDocs.length < length ? scoreDocs.length : length; - for (int i = hitDocs.size(); i < end; i++) { - hitDocs.addElement(new HitDoc(scoreDocs[i].score * scoreNorm, - scoreDocs[i].doc)); - } + float scoreNorm = 1.0f; + if (length > 0 && scoreDocs[0].score > 1.0f) { + scoreNorm = 1.0f / scoreDocs[0].score; } - /** Returns the total number of hits available in this set. */ - public final int length() { - return length; + int end = scoreDocs.length < length ? scoreDocs.length : length; + for (int i = hitDocs.size(); i < end; i++) { + hitDocs.addElement(new HitDoc(scoreDocs[i].score * scoreNorm, + scoreDocs[i].doc)); + } + } + + /** Returns the total number of hits available in this set. */ + public final int length() { + return length; + } + + /** Returns the nth document in this set. +

Documents are cached, so that repeated requests for the same element may + return the same Document object. */ + public final Document doc(int n) throws IOException { + HitDoc hitDoc = hitDoc(n); + + // Update LRU cache of documents + remove(hitDoc); // remove from list, if there + addToFront(hitDoc); // add to front of list + if (numDocs > maxDocs) { // if cache is full + HitDoc oldLast = last; + remove(last); // flush last + oldLast.doc = null; // let doc get gc'd } - /** Returns the nth document in this set. -

Documents are cached, so that repeated requests for the same element may - return the same Document object. */ - public final Document doc(int n) throws IOException { - HitDoc hitDoc = hitDoc(n); - - // Update LRU cache of documents - remove(hitDoc); // remove from list, if there - addToFront(hitDoc); // add to front of list - if (numDocs > maxDocs) { // if cache is full - HitDoc oldLast = last; - remove(last); // flush last - oldLast.doc = null; // let doc get gc'd - } - - if (hitDoc.doc == null) { - hitDoc.doc = searcher.doc(hitDoc.id); // cache miss: read document - } - - return hitDoc.doc; + if (hitDoc.doc == null) { + hitDoc.doc = searcher.doc(hitDoc.id); // cache miss: read document } - /** Returns the score for the nth document in this set. */ - public final float score(int n) throws IOException { - return hitDoc(n).score; + return hitDoc.doc; + } + + /** Returns the score for the nth document in this set. */ + public final float score(int n) throws IOException { + return hitDoc(n).score; + } + + /** Returns the id for the nth document in this set. */ + public final int id(int n) throws IOException { + return hitDoc(n).id; + } + + + private final HitDoc hitDoc(int n) throws IOException { + if (n >= length) { + throw new IndexOutOfBoundsException("Not a valid hit number: " + n); } - /** Returns the id for the nth document in this set. */ - public final int id(int n) throws IOException { - return hitDoc(n).id; + if (n >= hitDocs.size()) { + getMoreDocs(n); } + return (HitDoc) hitDocs.elementAt(n); + } - private final HitDoc hitDoc(int n) throws IOException { - if (n >= length) { - throw new IndexOutOfBoundsException("Not a valid hit number: " + n); - } - - if (n >= hitDocs.size()) { - getMoreDocs(n); - } - - return (HitDoc) hitDocs.elementAt(n); + private final void addToFront(HitDoc hitDoc) { // insert at front of cache + if (first == null) { + last = hitDoc; + } else { + first.prev = hitDoc; } - private final void addToFront(HitDoc hitDoc) { // insert at front of cache - if (first == null) { - last = hitDoc; - } else { - first.prev = hitDoc; - } + hitDoc.next = first; + first = hitDoc; + hitDoc.prev = null; - hitDoc.next = first; - first = hitDoc; - hitDoc.prev = null; + numDocs++; + } - numDocs++; + private final void remove(HitDoc hitDoc) { // remove from cache + if (hitDoc.doc == null) { // it's not in the list + return; // abort } - private final void remove(HitDoc hitDoc) { // remove from cache - if (hitDoc.doc == null) { // it's not in the list - return; // abort - } - - if (hitDoc.next == null) { - last = hitDoc.prev; - } else { - hitDoc.next.prev = hitDoc.prev; - } - - if (hitDoc.prev == null) { - first = hitDoc.next; - } else { - hitDoc.prev.next = hitDoc.next; - } - - numDocs--; + if (hitDoc.next == null) { + last = hitDoc.prev; + } else { + hitDoc.next.prev = hitDoc.prev; } + + if (hitDoc.prev == null) { + first = hitDoc.next; + } else { + hitDoc.prev.next = hitDoc.next; + } + + numDocs--; + } } final class HitDoc { - float score; - int id; - Document doc = null; + float score; + int id; + Document doc = null; - HitDoc next; // in doubly-linked cache - HitDoc prev; // in doubly-linked cache + HitDoc next; // in doubly-linked cache + HitDoc prev; // in doubly-linked cache - HitDoc(float s, int i) { - score = s; - id = i; - } + HitDoc(float s, int i) { + score = s; + id = i; + } } diff --git a/src/java/org/apache/lucene/search/QueryFilter.java b/src/java/org/apache/lucene/search/QueryFilter.java index f87b1158470..dc3b466c6c0 100644 --- a/src/java/org/apache/lucene/search/QueryFilter.java +++ b/src/java/org/apache/lucene/search/QueryFilter.java @@ -70,37 +70,38 @@ import org.apache.lucene.index.IndexReader; * once per day. */ public class QueryFilter extends Filter { - private Query query; - private transient WeakHashMap cache = new WeakHashMap(); + private Query query; + private transient WeakHashMap cache = new WeakHashMap(); - /** Constructs a filter which only matches documents matching - * query. - */ - public QueryFilter(Query query) { - this.query = query; + /** Constructs a filter which only matches documents matching + * query. + */ + public QueryFilter(Query query) { + this.query = query; + } + + public BitSet bits(IndexReader reader) throws IOException { + + synchronized (cache) { // check cache + BitSet cached = (BitSet) cache.get(reader); + if (cached != null) { + return cached; + } } - public BitSet bits(IndexReader reader) throws IOException { + final BitSet bits = new BitSet(reader.maxDoc()); - synchronized (cache) { // check cache - BitSet cached = (BitSet) cache.get(reader); - if (cached != null) - return cached; - } - - final BitSet bits = new BitSet(reader.maxDoc()); - - new IndexSearcher(reader).search(query, new HitCollector() { - public final void collect(int doc, float score) { - bits.set(doc); // set bit for hit - } - }); + new IndexSearcher(reader).search(query, new HitCollector() { + public final void collect(int doc, float score) { + bits.set(doc); // set bit for hit + } + }); - synchronized (cache) { // update cache - cache.put(reader, bits); - } - - return bits; + synchronized (cache) { // update cache + cache.put(reader, bits); } + + return bits; + } }