public override BinaryDocValues GetBinary(FieldInfo field) { lock (this) { BinaryDocValues instance; if (!BinaryInstances.TryGetValue(field.Number, out instance)) { var type = LegacyDocValuesType.ValueOf(field.GetAttribute(LegacyKey)); if (type == LegacyDocValuesType.BYTES_FIXED_STRAIGHT) { instance = LoadBytesFixedStraight(field); } else if (type == LegacyDocValuesType.BYTES_VAR_STRAIGHT) { instance = LoadBytesVarStraight(field); } else if (type == LegacyDocValuesType.BYTES_FIXED_DEREF) { instance = LoadBytesFixedDeref(field); } else if (type == LegacyDocValuesType.BYTES_VAR_DEREF) { instance = LoadBytesVarDeref(field); } else { throw new InvalidOperationException(); } BinaryInstances[field.Number] = instance; } return(instance); } }
public override SortedDocValues GetSorted(FieldInfo field) { lock (this) { SortedDocValues instance; if (!SortedInstances.TryGetValue(field.Number, out instance)) { string dataName = IndexFileNames.SegmentFileName(State.SegmentInfo.Name + "_" + Convert.ToString(field.Number), SegmentSuffix, "dat"); string indexName = IndexFileNames.SegmentFileName(State.SegmentInfo.Name + "_" + Convert.ToString(field.Number), SegmentSuffix, "idx"); IndexInput data = null; IndexInput index = null; bool success = false; try { data = Dir.OpenInput(dataName, State.Context); index = Dir.OpenInput(indexName, State.Context); var type = LegacyDocValuesType.ValueOf(field.GetAttribute(LegacyKey)); if (type == LegacyDocValuesType.BYTES_FIXED_SORTED) { instance = LoadBytesFixedSorted(field, data, index); } else if (type == LegacyDocValuesType.BYTES_VAR_SORTED) { instance = LoadBytesVarSorted(field, data, index); } else { throw new InvalidOperationException(); } CodecUtil.CheckEOF(data); CodecUtil.CheckEOF(index); success = true; } finally { if (success) { IOUtils.Close(data, index); } else { IOUtils.CloseWhileHandlingException(data, index); } } SortedInstances[field.Number] = instance; } return(instance); } }
public override NumericDocValues GetNumeric(FieldInfo field) { lock (this) { NumericDocValues instance; if (!NumericInstances.TryGetValue(field.Number, out instance)) { string fileName = IndexFileNames.SegmentFileName(State.SegmentInfo.Name + "_" + Convert.ToString(field.Number), SegmentSuffix, "dat"); IndexInput input = Dir.OpenInput(fileName, State.Context); bool success = false; try { var type = LegacyDocValuesType.ValueOf(field.GetAttribute(LegacyKey)); //switch (Enum.Parse(typeof(LegacyDocValuesType), field.GetAttribute(LegacyKey))) //{ if (type == LegacyDocValuesType.VAR_INTS) { instance = LoadVarIntsField(field, input); } else if (type == LegacyDocValuesType.FIXED_INTS_8) { instance = LoadByteField(field, input); } else if (type == LegacyDocValuesType.FIXED_INTS_16) { instance = LoadShortField(field, input); } else if (type == LegacyDocValuesType.FIXED_INTS_32) { instance = LoadIntField(field, input); } else if (type == LegacyDocValuesType.FIXED_INTS_64) { instance = LoadLongField(field, input); } else if (type == LegacyDocValuesType.FLOAT_32) { instance = LoadFloatField(field, input); } else if (type == LegacyDocValuesType.FLOAT_64) { instance = LoadDoubleField(field, input); } else { throw new InvalidOperationException(); } CodecUtil.CheckEOF(input); success = true; } finally { if (success) { IOUtils.Close(input); } else { IOUtils.CloseWhileHandlingException(input); } } NumericInstances[field.Number] = instance; } return(instance); } }
public override FieldInfos Read(Directory directory, string segmentName, string segmentSuffix, IOContext iocontext) { string fileName = IndexFileNames.SegmentFileName(segmentName, "", Lucene40FieldInfosFormat.FIELD_INFOS_EXTENSION); IndexInput input = directory.OpenInput(fileName, iocontext); bool success = false; try { CodecUtil.CheckHeader(input, Lucene40FieldInfosFormat.CODEC_NAME, Lucene40FieldInfosFormat.FORMAT_START, Lucene40FieldInfosFormat.FORMAT_CURRENT); int size = input.ReadVInt(); //read in the size FieldInfo[] infos = new FieldInfo[size]; for (int i = 0; i < size; i++) { string name = input.ReadString(); int fieldNumber = input.ReadVInt(); byte bits = input.ReadByte(); bool isIndexed = (bits & Lucene40FieldInfosFormat.IS_INDEXED) != 0; bool storeTermVector = (bits & Lucene40FieldInfosFormat.STORE_TERMVECTOR) != 0; bool omitNorms = (bits & Lucene40FieldInfosFormat.OMIT_NORMS) != 0; bool storePayloads = (bits & Lucene40FieldInfosFormat.STORE_PAYLOADS) != 0; FieldInfo.IndexOptions indexOptions; if (!isIndexed) { indexOptions = default(FieldInfo.IndexOptions); } else if ((bits & Lucene40FieldInfosFormat.OMIT_TERM_FREQ_AND_POSITIONS) != 0) { indexOptions = FieldInfo.IndexOptions.DOCS_ONLY; } else if ((bits & Lucene40FieldInfosFormat.OMIT_POSITIONS) != 0) { indexOptions = FieldInfo.IndexOptions.DOCS_AND_FREQS; } else if ((bits & Lucene40FieldInfosFormat.STORE_OFFSETS_IN_POSTINGS) != 0) { indexOptions = FieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS; } else { indexOptions = FieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS; } // LUCENE-3027: past indices were able to write // storePayloads=true when omitTFAP is also true, // which is invalid. We correct that, here: if (isIndexed && indexOptions.CompareTo(FieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) < 0) { storePayloads = false; } // DV Types are packed in one byte byte val = input.ReadByte(); LegacyDocValuesType oldValuesType = GetDocValuesType((sbyte)(val & 0x0F)); LegacyDocValuesType oldNormsType = GetDocValuesType((sbyte)(((int)((uint)val >> 4)) & 0x0F)); IDictionary <string, string> attributes = input.ReadStringStringMap(); if (oldValuesType.Mapping != null) { attributes[LEGACY_DV_TYPE_KEY] = oldValuesType.Name; } if (oldNormsType.Mapping != null) { if (oldNormsType.Mapping != FieldInfo.DocValuesType_e.NUMERIC) { throw new CorruptIndexException("invalid norm type: " + oldNormsType + " (resource=" + input + ")"); } attributes[LEGACY_NORM_TYPE_KEY] = oldNormsType.Name; } infos[i] = new FieldInfo(name, isIndexed, fieldNumber, storeTermVector, omitNorms, storePayloads, indexOptions, oldValuesType.Mapping, oldNormsType.Mapping, attributes); } CodecUtil.CheckEOF(input); FieldInfos fieldInfos = new FieldInfos(infos); success = true; return(fieldInfos); } finally { if (success) { input.Dispose(); } else { IOUtils.CloseWhileHandlingException(input); } } }
public static DocValuesType GetMapping(this LegacyDocValuesType legacyDocValuesType) { return(mapping[legacyDocValuesType]); }