1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /*
- * Licensed to Elasticsearch under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch 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.
- */
- package org.elasticsearch.index.codec;
- import org.apache.logging.log4j.Logger;
- import org.apache.lucene.codecs.Codec;
- import org.apache.lucene.codecs.lucene50.Lucene50PostingsFormat.FSTLoadMode;
- import org.apache.lucene.codecs.lucene50.Lucene50StoredFieldsFormat.Mode;
- import org.apache.lucene.codecs.lucene80.Lucene80Codec;
- import org.elasticsearch.common.Nullable;
- import org.elasticsearch.index.mapper.MapperService;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * Since Lucene 4.0 low level index segments are read and written through a
- * codec layer that allows to use use-case specific file formats &
- * data-structures per field. Elasticsearch exposes the full
- * {@link Codec} capabilities through this {@link CodecService}.
- */
- public class CodecService {
- private final Map<String, Codec> codecs;
- public static final String DEFAULT_CODEC = "default";
- public static final String BEST_COMPRESSION_CODEC = "best_compression";
- /** the raw unfiltered lucene default. useful for testing */
- public static final String LUCENE_DEFAULT_CODEC = "lucene_default";
- public CodecService(@Nullable MapperService mapperService, Logger logger) {
- final var codecs = new HashMap<String, Codec>();
- if (mapperService == null) {
- codecs.put(DEFAULT_CODEC, new Lucene80Codec());
- codecs.put(BEST_COMPRESSION_CODEC, new Lucene80Codec(Mode.BEST_COMPRESSION, FSTLoadMode.AUTO));
- } else {
- codecs.put(DEFAULT_CODEC,
- new PerFieldMappingPostingFormatCodec(Mode.BEST_SPEED, mapperService, logger));
- codecs.put(BEST_COMPRESSION_CODEC,
- new PerFieldMappingPostingFormatCodec(Mode.BEST_COMPRESSION, mapperService, logger));
- }
- codecs.put(LUCENE_DEFAULT_CODEC, Codec.getDefault());
- for (String codec : Codec.availableCodecs()) {
- codecs.put(codec, Codec.forName(codec));
- }
- this.codecs = Map.copyOf(codecs);
- }
- public Codec codec(String name) {
- Codec codec = codecs.get(name);
- if (codec == null) {
- throw new IllegalArgumentException("failed to find codec [" + name + "]");
- }
- return codec;
- }
- /**
- * Returns all registered available codec names
- */
- public String[] availableCodecs() {
- return codecs.keySet().toArray(new String[0]);
- }
- }
|