/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using Lucene.Net.Support;
namespace Lucene.Net.Index
{
/// Useful constants representing filenames and extensions used by lucene
public sealed class IndexFileNames
{
/// Name of the index segment file
public /*internal*/ const System.String SEGMENTS = "segments";
/// Name of the generation reference file name
public /*internal*/ const System.String SEGMENTS_GEN = "segments.gen";
/// Name of the index deletable file (only used in
/// pre-lockless indices)
///
public /*internal*/ const System.String DELETABLE = "deletable";
/// Extension of norms file
public /*internal*/ const System.String NORMS_EXTENSION = "nrm";
/// Extension of freq postings file
public /*internal*/ const System.String FREQ_EXTENSION = "frq";
/// Extension of prox postings file
public /*internal*/ const System.String PROX_EXTENSION = "prx";
/// Extension of terms file
public /*internal*/ const System.String TERMS_EXTENSION = "tis";
/// Extension of terms index file
public /*internal*/ const System.String TERMS_INDEX_EXTENSION = "tii";
/// Extension of stored fields index file
public /*internal*/ const System.String FIELDS_INDEX_EXTENSION = "fdx";
/// Extension of stored fields file
public /*internal*/ const System.String FIELDS_EXTENSION = "fdt";
/// Extension of vectors fields file
public /*internal*/ const System.String VECTORS_FIELDS_EXTENSION = "tvf";
/// Extension of vectors documents file
public /*internal*/ const System.String VECTORS_DOCUMENTS_EXTENSION = "tvd";
/// Extension of vectors index file
public /*internal*/ const System.String VECTORS_INDEX_EXTENSION = "tvx";
/// Extension of compound file
public /*internal*/ const System.String COMPOUND_FILE_EXTENSION = "cfs";
/// Extension of compound file for doc store files
public /*internal*/ const System.String COMPOUND_FILE_STORE_EXTENSION = "cfx";
/// Extension of deletes
internal const System.String DELETES_EXTENSION = "del";
/// Extension of field infos
public /*internal*/ const System.String FIELD_INFOS_EXTENSION = "fnm";
/// Extension of plain norms
public /*internal*/ const System.String PLAIN_NORMS_EXTENSION = "f";
/// Extension of separate norms
public /*internal*/ const System.String SEPARATE_NORMS_EXTENSION = "s";
/// Extension of gen file
public /*internal*/ const System.String GEN_EXTENSION = "gen";
/// This array contains all filename extensions used by
/// Lucene's index files, with two exceptions, namely the
/// extension made up from .f + a number and
/// from .s + a number. Also note that
/// Lucene's segments_N files do not have any
/// filename extension.
///
public /*internal*/ static readonly System.String[] INDEX_EXTENSIONS = new System.String[]{COMPOUND_FILE_EXTENSION, FIELD_INFOS_EXTENSION, FIELDS_INDEX_EXTENSION, FIELDS_EXTENSION, TERMS_INDEX_EXTENSION, TERMS_EXTENSION, FREQ_EXTENSION, PROX_EXTENSION, DELETES_EXTENSION, VECTORS_INDEX_EXTENSION, VECTORS_DOCUMENTS_EXTENSION, VECTORS_FIELDS_EXTENSION, GEN_EXTENSION, NORMS_EXTENSION, COMPOUND_FILE_STORE_EXTENSION};
/// File extensions that are added to a compound file
/// (same as above, minus "del", "gen", "cfs").
///
public /*internal*/ static readonly System.String[] INDEX_EXTENSIONS_IN_COMPOUND_FILE = new System.String[]{FIELD_INFOS_EXTENSION, FIELDS_INDEX_EXTENSION, FIELDS_EXTENSION, TERMS_INDEX_EXTENSION, TERMS_EXTENSION, FREQ_EXTENSION, PROX_EXTENSION, VECTORS_INDEX_EXTENSION, VECTORS_DOCUMENTS_EXTENSION, VECTORS_FIELDS_EXTENSION, NORMS_EXTENSION};
public /*internal*/ static readonly System.String[] STORE_INDEX_EXTENSIONS = new System.String[]{VECTORS_INDEX_EXTENSION, VECTORS_FIELDS_EXTENSION, VECTORS_DOCUMENTS_EXTENSION, FIELDS_INDEX_EXTENSION, FIELDS_EXTENSION};
public /*internal*/ static readonly System.String[] NON_STORE_INDEX_EXTENSIONS = new System.String[]{FIELD_INFOS_EXTENSION, FREQ_EXTENSION, PROX_EXTENSION, TERMS_EXTENSION, TERMS_INDEX_EXTENSION, NORMS_EXTENSION};
/// File extensions of old-style index files
public /*internal*/ static readonly System.String[] COMPOUND_EXTENSIONS = new System.String[]{FIELD_INFOS_EXTENSION, FREQ_EXTENSION, PROX_EXTENSION, FIELDS_INDEX_EXTENSION, FIELDS_EXTENSION, TERMS_INDEX_EXTENSION, TERMS_EXTENSION};
/// File extensions for term vector support
public /*internal*/ static readonly System.String[] VECTOR_EXTENSIONS = new System.String[]{VECTORS_INDEX_EXTENSION, VECTORS_DOCUMENTS_EXTENSION, VECTORS_FIELDS_EXTENSION};
/// Computes the full file name from base, extension and
/// generation. If the generation is -1, the file name is
/// null. If it's 0, the file name is
/// If it's > 0, the file name is
///
///
/// -- main part of the file name
///
/// -- extension of the filename (including .)
///
/// -- generation
///
public /*internal*/ static System.String FileNameFromGeneration(System.String base_Renamed, System.String extension, long gen)
{
if (gen == SegmentInfo.NO)
{
return null;
}
else if (gen == SegmentInfo.WITHOUT_GEN)
{
return base_Renamed + extension;
}
else
{
#if !PRE_LUCENE_NET_2_0_0_COMPATIBLE
return base_Renamed + "_" + Number.ToString(gen) + extension;
#else
return base_Renamed + "_" + System.Convert.ToString(gen, 16) + extension;
#endif
}
}
/// Returns true if the provided filename is one of the doc
/// store files (ends with an extension in
/// STORE_INDEX_EXTENSIONS).
///
internal static bool IsDocStoreFile(System.String fileName)
{
if (fileName.EndsWith(COMPOUND_FILE_STORE_EXTENSION))
return true;
for (int i = 0; i < STORE_INDEX_EXTENSIONS.Length; i++)
if (fileName.EndsWith(STORE_INDEX_EXTENSIONS[i]))
return true;
return false;
}
internal static System.String SegmentFileName(System.String segmentName, System.String ext)
{
return segmentName + "." + ext;
}
}
}