~slub.team/goobi-indexserver/3.x

« back to all changes in this revision

Viewing changes to lucene/src/java/org/apache/lucene/index/NormsWriterPerField.java

  • Committer: Sebastian Meyer
  • Date: 2012-08-03 09:12:40 UTC
  • Revision ID: sebastian.meyer@slub-dresden.de-20120803091240-x6861b0vabq1xror
Remove Lucene and Solr source code and add patches instead
Fix Bug #985487: Auto-suggestion for the search interface

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
package org.apache.lucene.index;
2
 
 
3
 
/**
4
 
 * Licensed to the Apache Software Foundation (ASF) under one or more
5
 
 * contributor license agreements.  See the NOTICE file distributed with
6
 
 * this work for additional information regarding copyright ownership.
7
 
 * The ASF licenses this file to You under the Apache License, Version 2.0
8
 
 * (the "License"); you may not use this file except in compliance with
9
 
 * the License.  You may obtain a copy of the License at
10
 
 *
11
 
 *     http://www.apache.org/licenses/LICENSE-2.0
12
 
 *
13
 
 * Unless required by applicable law or agreed to in writing, software
14
 
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 
 * See the License for the specific language governing permissions and
17
 
 * limitations under the License.
18
 
 */
19
 
 
20
 
import org.apache.lucene.util.ArrayUtil;
21
 
import org.apache.lucene.search.Similarity;
22
 
 
23
 
/** Taps into DocInverter, as an InvertedDocEndConsumer,
24
 
 *  which is called at the end of inverting each field.  We
25
 
 *  just look at the length for the field (docState.length)
26
 
 *  and record the norm. */
27
 
 
28
 
final class NormsWriterPerField extends InvertedDocEndConsumerPerField implements Comparable<NormsWriterPerField> {
29
 
 
30
 
  final NormsWriterPerThread perThread;
31
 
  final FieldInfo fieldInfo;
32
 
  final DocumentsWriter.DocState docState;
33
 
 
34
 
  // Holds all docID/norm pairs we've seen
35
 
  int[] docIDs = new int[1];
36
 
  byte[] norms = new byte[1];
37
 
  int upto;
38
 
 
39
 
  final FieldInvertState fieldState;
40
 
 
41
 
  public void reset() {
42
 
    // Shrink back if we are overallocated now:
43
 
    docIDs = ArrayUtil.shrink(docIDs, upto);
44
 
    norms = ArrayUtil.shrink(norms, upto);
45
 
    upto = 0;
46
 
  }
47
 
 
48
 
  public NormsWriterPerField(final DocInverterPerField docInverterPerField, final NormsWriterPerThread perThread, final FieldInfo fieldInfo) {
49
 
    this.perThread = perThread;
50
 
    this.fieldInfo = fieldInfo;
51
 
    docState = perThread.docState;
52
 
    fieldState = docInverterPerField.fieldState;
53
 
  }
54
 
 
55
 
  @Override
56
 
  void abort() {
57
 
    upto = 0;
58
 
  }
59
 
 
60
 
  public int compareTo(NormsWriterPerField other) {
61
 
    return fieldInfo.name.compareTo(other.fieldInfo.name);
62
 
  }
63
 
  
64
 
  @Override
65
 
  void finish() {
66
 
    if (fieldInfo.isIndexed && !fieldInfo.omitNorms) {
67
 
      if (docIDs.length <= upto) {
68
 
        assert docIDs.length == upto;
69
 
        docIDs = ArrayUtil.grow(docIDs, 1+upto);
70
 
      }
71
 
      if (norms.length <= upto) {
72
 
        assert norms.length == upto;
73
 
        norms = ArrayUtil.grow(norms, 1+upto);
74
 
      }
75
 
      final float norm = docState.similarity.computeNorm(fieldInfo.name, fieldState);
76
 
      norms[upto] = docState.similarity.encodeNormValue(norm);
77
 
      docIDs[upto] = docState.docID;
78
 
      upto++;
79
 
    }
80
 
  }
81
 
}