⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datefilter.java

📁 索引aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
💻 JAVA
字号:
package org.apache.lucene.search;/** * 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.util.BitSet;import java.util.Date;import java.io.IOException;import org.apache.lucene.document.DateField;import org.apache.lucene.index.Term;import org.apache.lucene.index.TermDocs;import org.apache.lucene.index.TermEnum;import org.apache.lucene.index.IndexReader;/** * A Filter that restricts search results to a range of time. * * <p>For this to work, documents must have been indexed with a * {@link DateField}. */public class DateFilter extends Filter {  String field;  String start = DateField.MIN_DATE_STRING();  String end = DateField.MAX_DATE_STRING();  private DateFilter(String f) {    field = f;  }  /**   * Constructs a filter for field <code>f</code> matching dates   * between <code>from</code> and <code>to</code> inclusively.   */  public DateFilter(String f, Date from, Date to) {    field = f;    start = DateField.dateToString(from);    end = DateField.dateToString(to);  }  /**   * Constructs a filter for field <code>f</code> matching times   * between <code>from</code> and <code>to</code> inclusively.   */  public DateFilter(String f, long from, long to) {    field = f;    start = DateField.timeToString(from);    end = DateField.timeToString(to);  }  /**   * Constructs a filter for field <code>f</code> matching   * dates on or before before <code>date</code>.   */  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 <code>f</code> matching times   * on or before <code>time</code>.   */  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 <code>f</code> matching   * dates on or after <code>date</code>.   */  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 <code>f</code> matching   * times on or after <code>time</code>.   */  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());        while (termDocs.next()) {          bits.set(termDocs.doc());        }        if (!enumerator.next()) {          break;        }      }    } finally {      enumerator.close();      termDocs.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();  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -