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

📄 fieldcacheimpl.java

📁 Lucene a java open-source SearchEngine Framework
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
      TermEnum termEnum = reader.terms (new Term (field, ""));      try {        do {          Term term = termEnum.term();          if (term==null || term.field() != field) break;          int termval = parser.parseInt(term.text());          termDocs.seek (termEnum);          while (termDocs.next()) {            retArray[termDocs.doc()] = termval;          }        } while (termEnum.next());      } finally {        termDocs.close();        termEnum.close();      }      return retArray;    }  };  // inherit javadocs  public float[] getFloats (IndexReader reader, String field)    throws IOException {    return getFloats(reader, field, FLOAT_PARSER);  }  // inherit javadocs  public float[] getFloats(IndexReader reader, String field, FloatParser parser)      throws IOException {    return (float[]) floatsCache.get(reader, new Entry(field, parser));  }  Cache floatsCache = new Cache() {    protected Object createValue(IndexReader reader, Object entryKey)        throws IOException {      Entry entry = (Entry) entryKey;      String field = entry.field;      FloatParser parser = (FloatParser) entry.custom;      final float[] retArray = new float[reader.maxDoc()];      TermDocs termDocs = reader.termDocs();      TermEnum termEnum = reader.terms (new Term (field, ""));      try {        do {          Term term = termEnum.term();          if (term==null || term.field() != field) break;          float termval = parser.parseFloat(term.text());          termDocs.seek (termEnum);          while (termDocs.next()) {            retArray[termDocs.doc()] = termval;          }        } while (termEnum.next());      } finally {        termDocs.close();        termEnum.close();      }      return retArray;    }  };  // inherit javadocs  public String[] getStrings(IndexReader reader, String field)      throws IOException {    return (String[]) stringsCache.get(reader, field);  }  Cache stringsCache = new Cache() {    protected Object createValue(IndexReader reader, Object fieldKey)        throws IOException {      String field = ((String) fieldKey).intern();      final String[] retArray = new String[reader.maxDoc()];      TermDocs termDocs = reader.termDocs();      TermEnum termEnum = reader.terms (new Term (field, ""));      try {        do {          Term term = termEnum.term();          if (term==null || term.field() != field) break;          String termval = term.text();          termDocs.seek (termEnum);          while (termDocs.next()) {            retArray[termDocs.doc()] = termval;          }        } while (termEnum.next());      } finally {        termDocs.close();        termEnum.close();      }      return retArray;    }  };  // inherit javadocs  public StringIndex getStringIndex(IndexReader reader, String field)      throws IOException {    return (StringIndex) stringsIndexCache.get(reader, field);  }  Cache stringsIndexCache = new Cache() {    protected Object createValue(IndexReader reader, Object fieldKey)        throws IOException {      String field = ((String) fieldKey).intern();      final int[] retArray = new int[reader.maxDoc()];      String[] mterms = new String[reader.maxDoc()+1];      TermDocs termDocs = reader.termDocs();      TermEnum termEnum = reader.terms (new Term (field, ""));      int t = 0;  // current term number      // an entry for documents that have no terms in this field      // should a document with no terms be at top or bottom?      // this puts them at the top - if it is changed, FieldDocSortedHitQueue      // needs to change as well.      mterms[t++] = null;      try {        do {          Term term = termEnum.term();          if (term==null || term.field() != field) break;          // store term text          // we expect that there is at most one term per document          if (t >= mterms.length) throw new RuntimeException ("there are more terms than " +                  "documents in field \"" + field + "\", but it's impossible to sort on " +                  "tokenized fields");          mterms[t] = term.text();          termDocs.seek (termEnum);          while (termDocs.next()) {            retArray[termDocs.doc()] = t;          }          t++;        } while (termEnum.next());      } finally {        termDocs.close();        termEnum.close();      }      if (t == 0) {        // if there are no terms, make the term array        // have a single null entry        mterms = new String[1];      } else if (t < mterms.length) {        // if there are less terms than documents,        // trim off the dead array space        String[] terms = new String[t];        System.arraycopy (mterms, 0, terms, 0, t);        mterms = terms;      }      StringIndex value = new StringIndex (retArray, mterms);      return value;    }  };  /** The pattern used to detect integer values in a field */  /** removed for java 1.3 compatibility   protected static final Pattern pIntegers = Pattern.compile ("[0-9\\-]+");   **/  /** The pattern used to detect float values in a field */  /**   * removed for java 1.3 compatibility   * protected static final Object pFloats = Pattern.compile ("[0-9+\\-\\.eEfFdD]+");   */	// inherit javadocs  public Object getAuto(IndexReader reader, String field) throws IOException {    return autoCache.get(reader, field);  }  Cache autoCache = new Cache() {    protected Object createValue(IndexReader reader, Object fieldKey)        throws IOException {      String field = ((String)fieldKey).intern();      TermEnum enumerator = reader.terms (new Term (field, ""));      try {        Term term = enumerator.term();        if (term == null) {          throw new RuntimeException ("no terms in field " + field + " - cannot determine sort type");        }        Object ret = null;        if (term.field() == field) {          String termtext = term.text().trim();          /**           * Java 1.4 level code:           if (pIntegers.matcher(termtext).matches())           return IntegerSortedHitQueue.comparator (reader, enumerator, field);           else if (pFloats.matcher(termtext).matches())           return FloatSortedHitQueue.comparator (reader, enumerator, field);           */          // Java 1.3 level code:          try {            Integer.parseInt (termtext);            ret = getInts (reader, field);          } catch (NumberFormatException nfe1) {            try {                Float.parseFloat (termtext);                ret = getFloats (reader, field);              } catch (NumberFormatException nfe3) {                ret = getStringIndex (reader, field);              }          }                  } else {          throw new RuntimeException ("field \"" + field + "\" does not appear to be indexed");        }        return ret;      } finally {        enumerator.close();      }    }  };  // inherit javadocs  public Comparable[] getCustom(IndexReader reader, String field,      SortComparator comparator) throws IOException {    return (Comparable[]) customCache.get(reader, new Entry(field, comparator));  }  Cache customCache = new Cache() {    protected Object createValue(IndexReader reader, Object entryKey)        throws IOException {      Entry entry = (Entry) entryKey;      String field = entry.field;      SortComparator comparator = (SortComparator) entry.custom;      final Comparable[] retArray = new Comparable[reader.maxDoc()];      TermDocs termDocs = reader.termDocs();      TermEnum termEnum = reader.terms (new Term (field, ""));      try {        do {          Term term = termEnum.term();          if (term==null || term.field() != field) break;          Comparable termval = comparator.getComparable (term.text());          termDocs.seek (termEnum);          while (termDocs.next()) {            retArray[termDocs.doc()] = termval;          }        } while (termEnum.next());      } finally {        termDocs.close();        termEnum.close();      }      return retArray;    }  };  }

⌨️ 快捷键说明

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