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

📄 memoryindex.java

📁 Lucene a java open-source SearchEngine Framework
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
    public ArrayIntList() {      this(10);    }    public ArrayIntList(int initialCapacity) {      elements = new int[initialCapacity];    }    public void add(int elem) {      if (size == elements.length) ensureCapacity(size + 1);      elements[size++] = elem;    }    public void add(int pos, int start, int end) {      if (size + 3 > elements.length) ensureCapacity(size + 3);      elements[size] = pos;      elements[size+1] = start;      elements[size+2] = end;      size += 3;    }    public int get(int index) {      if (index >= size) throwIndex(index);      return elements[index];    }        public int size() {      return size;    }        public int[] toArray(int stride) {      int[] arr = new int[size() / stride];      if (stride == 1) {        System.arraycopy(elements, 0, arr, 0, size); // fast path      } else {         for (int i=0, j=0; j < size; i++, j += stride) arr[i] = elements[j];      }      return arr;    }        private void ensureCapacity(int minCapacity) {      int newCapacity = Math.max(minCapacity, (elements.length * 3) / 2 + 1);      int[] newElements = new int[newCapacity];      System.arraycopy(elements, 0, newElements, 0, size);      elements = newElements;    }    private void throwIndex(int index) {      throw new IndexOutOfBoundsException("index: " + index            + ", size: " + size);    }        /** returns the first few positions (without offsets); debug only */    public String toString(int stride) {      int s = size() / stride;      int len = Math.min(10, s); // avoid printing huge lists      StringBuffer buf = new StringBuffer(4*len);      buf.append("[");      for (int i = 0; i < len; i++) {        buf.append(get(i*stride));        if (i < len-1) buf.append(", ");      }      if (len != s) buf.append(", ..."); // and some more...      buf.append("]");      return buf.toString();    }     }      ///////////////////////////////////////////////////////////////////////////////  // Nested classes:  ///////////////////////////////////////////////////////////////////////////////  private static final Term MATCH_ALL_TERM = new Term("", "");      /**   * Search support for Lucene framework integration; implements all methods   * required by the Lucene IndexReader contracts.   */  private final class MemoryIndexReader extends IndexReader {        private Searcher searcher; // needed to find searcher.getSimilarity()         private MemoryIndexReader() {      super(null); // avoid as much superclass baggage as possible    }        // lucene >= 1.9 or lucene-1.4.3 with patch removing "final" in superclass    protected void finalize() {}        private Info getInfo(String fieldName) {      return (Info) fields.get(fieldName);    }        private Info getInfo(int pos) {      return (Info) sortedFields[pos].getValue();    }        public int docFreq(Term term) {      Info info = getInfo(term.field());      int freq = 0;      if (info != null) freq = info.getPositions(term.text()) != null ? 1 : 0;      if (DEBUG) System.err.println("MemoryIndexReader.docFreq: " + term + ", freq:" + freq);      return freq;    }      public TermEnum terms() {      if (DEBUG) System.err.println("MemoryIndexReader.terms()");      return terms(MATCH_ALL_TERM);    }        public TermEnum terms(Term term) {      if (DEBUG) System.err.println("MemoryIndexReader.terms: " + term);        int i; // index into info.sortedTerms      int j; // index into sortedFields            sortFields();      if (sortedFields.length == 1 && sortedFields[0].getKey() == term.field()) {        j = 0; // fast path      } else {        j = Arrays.binarySearch(sortedFields, term.field(), termComparator);      }            if (j < 0) { // not found; choose successor        j = -j -1;         i = 0;        if (j < sortedFields.length) getInfo(j).sortTerms();      } else { // found        Info info = getInfo(j);        info.sortTerms();        i = Arrays.binarySearch(info.sortedTerms, term.text(), termComparator);        if (i < 0) { // not found; choose successor          i = -i -1;          if (i >= info.sortedTerms.length) { // move to next successor            j++;            i = 0;            if (j < sortedFields.length) getInfo(j).sortTerms();          }        }      }      final int ix = i;      final int jx = j;        return new TermEnum() {          private int i = ix; // index into info.sortedTerms        private int j = jx; // index into sortedFields                  public boolean next() {          if (DEBUG) System.err.println("TermEnum.next");          if (j >= sortedFields.length) return false;          Info info = getInfo(j);          if (++i < info.sortedTerms.length) return true;            // move to successor          j++;          i = 0;          if (j >= sortedFields.length) return false;          getInfo(j).sortTerms();          return true;        }          public Term term() {          if (DEBUG) System.err.println("TermEnum.term: " + i);          if (j >= sortedFields.length) return null;          Info info = getInfo(j);          if (i >= info.sortedTerms.length) return null;//          if (DEBUG) System.err.println("TermEnum.term: " + i + ", " + info.sortedTerms[i].getKey());          return createTerm(info, j, (String) info.sortedTerms[i].getKey());        }                public int docFreq() {          if (DEBUG) System.err.println("TermEnum.docFreq");          if (j >= sortedFields.length) return 0;          Info info = getInfo(j);          if (i >= info.sortedTerms.length) return 0;          return numPositions(info.getPositions(i));        }          public void close() {          if (DEBUG) System.err.println("TermEnum.close");        }                /** Returns a new Term object, minimizing String.intern() overheads. */        private Term createTerm(Info info, int pos, String text) {           // Assertion: sortFields has already been called before          Term template = info.template;          if (template == null) { // not yet cached?            String fieldName = (String) sortedFields[pos].getKey();            template = new Term(fieldName, "");            info.template = template;          }                    return template.createTerm(text);        }              };    }      public TermPositions termPositions() {      if (DEBUG) System.err.println("MemoryIndexReader.termPositions");            return new TermPositions() {          private boolean hasNext;        private int cursor = 0;        private ArrayIntList current;                public void seek(Term term) {          if (DEBUG) System.err.println(".seek: " + term);          Info info = getInfo(term.field());          current = info == null ? null : info.getPositions(term.text());          hasNext = (current != null);          cursor = 0;        }          public void seek(TermEnum termEnum) {          if (DEBUG) System.err.println(".seekEnum");          seek(termEnum.term());        }          public int doc() {          if (DEBUG) System.err.println(".doc");          return 0;        }          public int freq() {          int freq = current != null ? numPositions(current) : 0;          if (DEBUG) System.err.println(".freq: " + freq);          return freq;        }          public boolean next() {          if (DEBUG) System.err.println(".next: " + current + ", oldHasNext=" + hasNext);          boolean next = hasNext;          hasNext = false;          return next;        }          public int read(int[] docs, int[] freqs) {          if (DEBUG) System.err.println(".read: " + docs.length);          if (!hasNext) return 0;          hasNext = false;          docs[0] = 0;          freqs[0] = freq();          return 1;        }          public boolean skipTo(int target) {          if (DEBUG) System.err.println(".skipTo: " + target);          return next();        }          public void close() {          if (DEBUG) System.err.println(".close");        }                public int nextPosition() { // implements TermPositions          int pos = current.get(cursor);          cursor += stride;          if (DEBUG) System.err.println(".nextPosition: " + pos);          return pos;        }                /**         * Not implemented.         * @throws UnsupportedOperationException         */        public int getPayloadLength() {          throw new UnsupportedOperationException();        }                 /**         * Not implemented.         * @throws UnsupportedOperationException         */        public byte[] getPayload(byte[] data, int offset) throws IOException {          throw new UnsupportedOperationException();        }        public boolean isPayloadAvailable() {          // unsuported          return false;        }      };    }      public TermDocs termDocs() {      if (DEBUG) System.err.println("MemoryIndexReader.termDocs");      return termPositions();    }      public TermFreqVector[] getTermFreqVectors(int docNumber) {      if (DEBUG) System.err.println("MemoryIndexReader.getTermFreqVectors");      TermFreqVector[] vectors = new TermFreqVector[fields.size()];//      if (vectors.length == 0) return null;      Iterator iter = fields.keySet().iterator();      for (int i=0; i < vectors.length; i++) {        String fieldName = (String) iter.next();        vectors[i] = getTermFreqVector(docNumber, fieldName);      }      return vectors;    }      public void getTermFreqVector(int docNumber, TermVectorMapper mapper) throws IOException      {          if (DEBUG) System.err.println("MemoryIndexReader.getTermFreqVectors");    //      if (vectors.length == 0) return null;          for (Iterator iterator = fields.keySet().iterator(); iterator.hasNext();)          {            String fieldName = (String) iterator.next();            getTermFreqVector(docNumber, fieldName, mapper);          }      }

⌨️ 快捷键说明

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