Java 类org.apache.lucene.index.MultiTermsEnum.TermsEnumWithSlice 实例源码

项目:NYBC    文件:MultiDocValues.java   
/** 
 * Creates an ordinal map that allows mapping ords to/from a merged
 * space from <code>subs</code>.
 * @param owner a cache key
 * @param subs TermsEnums that support {@link TermsEnum#ord()}. They need
 *             not be dense (e.g. can be FilteredTermsEnums}.
 * @throws IOException if an I/O error occurred.
 */
public OrdinalMap(Object owner, TermsEnum subs[]) throws IOException {
  // create the ordinal mappings by pulling a termsenum over each sub's 
  // unique terms, and walking a multitermsenum over those
  this.owner = owner;
  globalOrdDeltas = new MonotonicAppendingLongBuffer();
  subIndexes = new AppendingLongBuffer();
  ordDeltas = new MonotonicAppendingLongBuffer[subs.length];
  for (int i = 0; i < ordDeltas.length; i++) {
    ordDeltas[i] = new MonotonicAppendingLongBuffer();
  }
  long segmentOrds[] = new long[subs.length];
  ReaderSlice slices[] = new ReaderSlice[subs.length];
  TermsEnumIndex indexes[] = new TermsEnumIndex[slices.length];
  for (int i = 0; i < slices.length; i++) {
    slices[i] = new ReaderSlice(0, 0, i);
    indexes[i] = new TermsEnumIndex(subs[i], i);
  }
  MultiTermsEnum mte = new MultiTermsEnum(slices);
  mte.reset(indexes);
  long globalOrd = 0;
  while (mte.next() != null) {        
    TermsEnumWithSlice matches[] = mte.getMatchArray();
    for (int i = 0; i < mte.getMatchCount(); i++) {
      int subIndex = matches[i].index;
      long segmentOrd = matches[i].terms.ord();
      long delta = globalOrd - segmentOrd;
      // for each unique term, just mark the first subindex/delta where it occurs
      if (i == 0) {
        subIndexes.add(subIndex);
        globalOrdDeltas.add(delta);
      }
      // for each per-segment ord, map it back to the global term.
      while (segmentOrds[subIndex] <= segmentOrd) {
        ordDeltas[subIndex].add(delta);
        segmentOrds[subIndex]++;
      }
    }
    globalOrd++;
  }
}
项目:read-open-source-code    文件:MultiDocValues.java   
/** 
 * Creates an ordinal map that allows mapping ords to/from a merged
 * space from <code>subs</code>.
 * @param owner a cache key
 * @param subs TermsEnums that support {@link TermsEnum#ord()}. They need
 *             not be dense (e.g. can be FilteredTermsEnums}.
 * @throws IOException if an I/O error occurred.
 */
public OrdinalMap(Object owner, TermsEnum subs[]) throws IOException {
  // create the ordinal mappings by pulling a termsenum over each sub's 
  // unique terms, and walking a multitermsenum over those
  this.owner = owner;
  globalOrdDeltas = new MonotonicAppendingLongBuffer(PackedInts.COMPACT);
  firstSegments = new AppendingPackedLongBuffer(PackedInts.COMPACT);
  ordDeltas = new MonotonicAppendingLongBuffer[subs.length];
  for (int i = 0; i < ordDeltas.length; i++) {
    ordDeltas[i] = new MonotonicAppendingLongBuffer();
  }
  long segmentOrds[] = new long[subs.length];
  ReaderSlice slices[] = new ReaderSlice[subs.length];
  TermsEnumIndex indexes[] = new TermsEnumIndex[slices.length];
  for (int i = 0; i < slices.length; i++) {
    slices[i] = new ReaderSlice(0, 0, i);
    indexes[i] = new TermsEnumIndex(subs[i], i);
  }
  MultiTermsEnum mte = new MultiTermsEnum(slices);
  mte.reset(indexes);
  long globalOrd = 0;
  while (mte.next() != null) {        
    TermsEnumWithSlice matches[] = mte.getMatchArray();
    for (int i = 0; i < mte.getMatchCount(); i++) {
      int segmentIndex = matches[i].index;
      long segmentOrd = matches[i].terms.ord();
      long delta = globalOrd - segmentOrd;
      // for each unique term, just mark the first segment index/delta where it occurs
      if (i == 0) {
        firstSegments.add(segmentIndex);
        globalOrdDeltas.add(delta);
      }
      // for each per-segment ord, map it back to the global term.
      while (segmentOrds[segmentIndex] <= segmentOrd) {
        ordDeltas[segmentIndex].add(delta);
        segmentOrds[segmentIndex]++;
      }
    }
    globalOrd++;
  }
  firstSegments.freeze();
  globalOrdDeltas.freeze();
  for (int i = 0; i < ordDeltas.length; ++i) {
    ordDeltas[i].freeze();
  }
}
项目:read-open-source-code    文件:MultiDocValues.java   
/** 
 * Creates an ordinal map that allows mapping ords to/from a merged
 * space from <code>subs</code>.
 * @param owner a cache key
 * @param subs TermsEnums that support {@link TermsEnum#ord()}. They need
 *             not be dense (e.g. can be FilteredTermsEnums}.
 * @throws IOException if an I/O error occurred.
 */
public OrdinalMap(Object owner, TermsEnum subs[]) throws IOException {
  // create the ordinal mappings by pulling a termsenum over each sub's 
  // unique terms, and walking a multitermsenum over those
  this.owner = owner;
  globalOrdDeltas = new MonotonicAppendingLongBuffer(PackedInts.COMPACT);
  firstSegments = new AppendingPackedLongBuffer(PackedInts.COMPACT);
  ordDeltas = new MonotonicAppendingLongBuffer[subs.length];
  for (int i = 0; i < ordDeltas.length; i++) {
    ordDeltas[i] = new MonotonicAppendingLongBuffer();
  }
  long segmentOrds[] = new long[subs.length];
  ReaderSlice slices[] = new ReaderSlice[subs.length];
  TermsEnumIndex indexes[] = new TermsEnumIndex[slices.length];
  for (int i = 0; i < slices.length; i++) {
    slices[i] = new ReaderSlice(0, 0, i);
    indexes[i] = new TermsEnumIndex(subs[i], i);
  }
  MultiTermsEnum mte = new MultiTermsEnum(slices);
  mte.reset(indexes);
  long globalOrd = 0;
  while (mte.next() != null) {        
    TermsEnumWithSlice matches[] = mte.getMatchArray();
    for (int i = 0; i < mte.getMatchCount(); i++) {
      int segmentIndex = matches[i].index;
      long segmentOrd = matches[i].terms.ord();
      long delta = globalOrd - segmentOrd;
      // for each unique term, just mark the first segment index/delta where it occurs
      if (i == 0) {
        firstSegments.add(segmentIndex);
        globalOrdDeltas.add(delta);
      }
      // for each per-segment ord, map it back to the global term.
      while (segmentOrds[segmentIndex] <= segmentOrd) {
        ordDeltas[segmentIndex].add(delta);
        segmentOrds[segmentIndex]++;
      }
    }
    globalOrd++;
  }
  firstSegments.freeze();
  globalOrdDeltas.freeze();
  for (int i = 0; i < ordDeltas.length; ++i) {
    ordDeltas[i].freeze();
  }
}
项目:Maskana-Gestor-de-Conocimiento    文件:MultiDocValues.java   
/** 
 * Creates an ordinal map that allows mapping ords to/from a merged
 * space from <code>subs</code>.
 * @param owner a cache key
 * @param subs TermsEnums that support {@link TermsEnum#ord()}. They need
 *             not be dense (e.g. can be FilteredTermsEnums}.
 * @throws IOException if an I/O error occurred.
 */
public OrdinalMap(Object owner, TermsEnum subs[]) throws IOException {
  // create the ordinal mappings by pulling a termsenum over each sub's 
  // unique terms, and walking a multitermsenum over those
  this.owner = owner;
  globalOrdDeltas = new MonotonicAppendingLongBuffer(PackedInts.COMPACT);
  firstSegments = new AppendingPackedLongBuffer(PackedInts.COMPACT);
  ordDeltas = new MonotonicAppendingLongBuffer[subs.length];
  for (int i = 0; i < ordDeltas.length; i++) {
    ordDeltas[i] = new MonotonicAppendingLongBuffer();
  }
  long segmentOrds[] = new long[subs.length];
  ReaderSlice slices[] = new ReaderSlice[subs.length];
  TermsEnumIndex indexes[] = new TermsEnumIndex[slices.length];
  for (int i = 0; i < slices.length; i++) {
    slices[i] = new ReaderSlice(0, 0, i);
    indexes[i] = new TermsEnumIndex(subs[i], i);
  }
  MultiTermsEnum mte = new MultiTermsEnum(slices);
  mte.reset(indexes);
  long globalOrd = 0;
  while (mte.next() != null) {        
    TermsEnumWithSlice matches[] = mte.getMatchArray();
    for (int i = 0; i < mte.getMatchCount(); i++) {
      int segmentIndex = matches[i].index;
      long segmentOrd = matches[i].terms.ord();
      long delta = globalOrd - segmentOrd;
      // for each unique term, just mark the first segment index/delta where it occurs
      if (i == 0) {
        firstSegments.add(segmentIndex);
        globalOrdDeltas.add(delta);
      }
      // for each per-segment ord, map it back to the global term.
      while (segmentOrds[segmentIndex] <= segmentOrd) {
        ordDeltas[segmentIndex].add(delta);
        segmentOrds[segmentIndex]++;
      }
    }
    globalOrd++;
  }
  firstSegments.freeze();
  globalOrdDeltas.freeze();
  for (int i = 0; i < ordDeltas.length; ++i) {
    ordDeltas[i].freeze();
  }
}