move field data type to simply be type and settings
This commit is contained in:
parent
50ac477d92
commit
613b746299
|
@ -360,6 +360,10 @@ public class ImmutableSettings implements Settings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Builder builder() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a builder to be used in order to build settings.
|
* Returns a builder to be used in order to build settings.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -19,42 +19,54 @@
|
||||||
|
|
||||||
package org.elasticsearch.index.fielddata;
|
package org.elasticsearch.index.fielddata;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.common.Nullable;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public class FieldDataType {
|
public class FieldDataType {
|
||||||
|
|
||||||
private final String type;
|
private final String type;
|
||||||
@Nullable
|
private final Settings settings;
|
||||||
private final String format;
|
|
||||||
private final ImmutableMap<String, String> options;
|
|
||||||
|
|
||||||
public FieldDataType(String type) {
|
public FieldDataType(String type) {
|
||||||
this(type, null, ImmutableMap.<String, String>of());
|
this(type, ImmutableSettings.Builder.EMPTY_SETTINGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FieldDataType(String type, String format) {
|
public FieldDataType(String type, Settings.Builder builder) {
|
||||||
this(type, format, ImmutableMap.<String, String>of());
|
this(type, builder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
public FieldDataType(String type, @Nullable String format, ImmutableMap<String, String> options) {
|
public FieldDataType(String type, Settings settings) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.format = format;
|
this.settings = settings;
|
||||||
this.options = options;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return this.type;
|
return this.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
public Settings getSettings() {
|
||||||
public String getFormat() {
|
return this.settings;
|
||||||
return this.format;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImmutableMap<String, String> getOptions() {
|
@Override
|
||||||
return this.options;
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
FieldDataType that = (FieldDataType) o;
|
||||||
|
|
||||||
|
if (!settings.equals(that.settings)) return false;
|
||||||
|
if (!type.equals(that.type)) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = type.hashCode();
|
||||||
|
result = 31 * result + settings.hashCode();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,17 +119,11 @@ public class IndexFieldDataService extends AbstractIndexComponent {
|
||||||
fieldData = loadedFieldData.get(fieldNames.indexName());
|
fieldData = loadedFieldData.get(fieldNames.indexName());
|
||||||
if (fieldData == null) {
|
if (fieldData == null) {
|
||||||
IndexFieldData.Builder builder = null;
|
IndexFieldData.Builder builder = null;
|
||||||
if (type.getFormat() != null) {
|
String format = type.getSettings().get("format", indexSettings.get("index.fielddata.type." + type.getType() + ".format", null));
|
||||||
builder = buildersByTypeAndFormat.get(Tuple.tuple(type.getType(), type.getFormat()));
|
|
||||||
if (builder == null) {
|
|
||||||
logger.warn("failed to find format [" + type.getFormat() + "] for field [" + fieldNames.fullName() + "], will use default");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
String format = indexSettings.get("index.fielddata.type." + type.getType() + ".format", null);
|
|
||||||
if (format != null) {
|
if (format != null) {
|
||||||
builder = buildersByTypeAndFormat.get(Tuple.tuple(type.getType(), type.getFormat()));
|
builder = buildersByTypeAndFormat.get(Tuple.tuple(type.getType(), format));
|
||||||
if (builder == null) {
|
if (builder == null) {
|
||||||
logger.warn("failed to find index level type format [" + format + "] for field [" + fieldNames.fullName() + "], will use default");
|
logger.warn("failed to find format [" + format + "] for field [" + fieldNames.fullName() + "], will use default");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (builder == null) {
|
if (builder == null) {
|
||||||
|
@ -140,17 +134,13 @@ public class IndexFieldDataService extends AbstractIndexComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
IndexFieldDataCache cache;
|
IndexFieldDataCache cache;
|
||||||
if (type.getOptions().containsKey("cache")) {
|
String cacheType = type.getSettings().get("cache", indexSettings.get("index.fielddata.cache", "resident"));
|
||||||
String cacheType = type.getOptions().get("cache");
|
if ("resident".equals(cacheType)) {
|
||||||
if ("resident".equals(cacheType)) {
|
|
||||||
cache = new IndexFieldDataCache.Resident();
|
|
||||||
} else if ("soft".equals(cacheType)) {
|
|
||||||
cache = new IndexFieldDataCache.Soft();
|
|
||||||
} else {
|
|
||||||
throw new ElasticSearchIllegalArgumentException("cache type not supported [" + cacheType + "] for field [" + fieldNames.fullName() + "]");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cache = new IndexFieldDataCache.Resident();
|
cache = new IndexFieldDataCache.Resident();
|
||||||
|
} else if ("soft".equals(cacheType)) {
|
||||||
|
cache = new IndexFieldDataCache.Soft();
|
||||||
|
} else {
|
||||||
|
throw new ElasticSearchIllegalArgumentException("cache type not supported [" + cacheType + "] for field [" + fieldNames.fullName() + "]");
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldData = builder.build(index, indexSettings, fieldNames, type, cache);
|
fieldData = builder.build(index, indexSettings, fieldNames, type, cache);
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
|
|
||||||
package org.elasticsearch.index.fielddata.ordinals;
|
package org.elasticsearch.index.fielddata.ordinals;
|
||||||
|
|
||||||
|
import org.elasticsearch.ElasticSearchIllegalArgumentException;
|
||||||
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.index.fielddata.util.IntArrayRef;
|
import org.elasticsearch.index.fielddata.util.IntArrayRef;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A thread safe ordinals abstraction. Ordinals can only be positive integers.
|
* A thread safe ordinals abstraction. Ordinals can only be positive integers.
|
||||||
*/
|
*/
|
||||||
|
@ -30,18 +30,16 @@ public interface Ordinals {
|
||||||
|
|
||||||
static class Factories {
|
static class Factories {
|
||||||
|
|
||||||
public static Ordinals createFromFlatOrdinals(int[][] ordinals, int numOrds, Map<String, String> options) {
|
public static Ordinals createFromFlatOrdinals(int[][] ordinals, int numOrds, Settings settings) {
|
||||||
String multiOrdinals = options.get("multi_ordinals");
|
String multiOrdinals = settings.get("multi_ordinals", "sparse");
|
||||||
if ("flat".equals(multiOrdinals)) {
|
if ("flat".equals(multiOrdinals)) {
|
||||||
return new MultiFlatArrayOrdinals(ordinals, numOrds);
|
return new MultiFlatArrayOrdinals(ordinals, numOrds);
|
||||||
|
} else if ("sparse".equals(multiOrdinals)) {
|
||||||
|
int multiOrdinalsMaxDocs = settings.getAsInt("multi_ordinals_max_docs", 16777216 /*Equal to 64MB per storage array*/);
|
||||||
|
return new SparseMultiArrayOrdinals(ordinals, numOrds, multiOrdinalsMaxDocs);
|
||||||
|
} else {
|
||||||
|
throw new ElasticSearchIllegalArgumentException("no applicable fielddata multi_ordinals value, got [" + multiOrdinals + "]");
|
||||||
}
|
}
|
||||||
int multiOrdinalsMaxDocs = 16777216; // Equal to 64MB per storage array
|
|
||||||
String multiOrdinalsMaxDocsVal = options.get("multi_ordinals_max_docs");
|
|
||||||
if (multiOrdinalsMaxDocsVal != null) {
|
|
||||||
multiOrdinalsMaxDocs = Integer.valueOf(multiOrdinalsMaxDocsVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new SparseMultiArrayOrdinals(ordinals, numOrds, multiOrdinalsMaxDocs);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,7 @@ public class ByteArrayIndexFieldData extends AbstractIndexFieldData<ByteArrayAto
|
||||||
return new ByteArrayAtomicFieldData.WithOrdinals(
|
return new ByteArrayAtomicFieldData.WithOrdinals(
|
||||||
values.toArray(new byte[values.size()]),
|
values.toArray(new byte[values.size()]),
|
||||||
reader.maxDoc(),
|
reader.maxDoc(),
|
||||||
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
|
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,7 @@ public class ConcreteBytesRefIndexFieldData extends AbstractIndexFieldData<Concr
|
||||||
}
|
}
|
||||||
return new ConcreteBytesRefAtomicFieldData(
|
return new ConcreteBytesRefAtomicFieldData(
|
||||||
values.toArray(new BytesRef[values.size()]),
|
values.toArray(new BytesRef[values.size()]),
|
||||||
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
|
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,7 +149,7 @@ public class DoubleArrayIndexFieldData extends AbstractIndexFieldData<DoubleArra
|
||||||
return new DoubleArrayAtomicFieldData.WithOrdinals(
|
return new DoubleArrayAtomicFieldData.WithOrdinals(
|
||||||
values.toArray(new double[values.size()]),
|
values.toArray(new double[values.size()]),
|
||||||
reader.maxDoc(),
|
reader.maxDoc(),
|
||||||
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
|
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,7 +149,7 @@ public class FloatArrayIndexFieldData extends AbstractIndexFieldData<FloatArrayA
|
||||||
return new FloatArrayAtomicFieldData.WithOrdinals(
|
return new FloatArrayAtomicFieldData.WithOrdinals(
|
||||||
values.toArray(new float[values.size()]),
|
values.toArray(new float[values.size()]),
|
||||||
reader.maxDoc(),
|
reader.maxDoc(),
|
||||||
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
|
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,7 +153,7 @@ public class GeoPointDoubleArrayIndexFieldData extends AbstractIndexFieldData<Ge
|
||||||
lon.toArray(new double[lon.size()]),
|
lon.toArray(new double[lon.size()]),
|
||||||
lat.toArray(new double[lat.size()]),
|
lat.toArray(new double[lat.size()]),
|
||||||
reader.maxDoc(),
|
reader.maxDoc(),
|
||||||
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
|
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,7 +149,7 @@ public class IntArrayIndexFieldData extends AbstractIndexFieldData<IntArrayAtomi
|
||||||
return new IntArrayAtomicFieldData.WithOrdinals(
|
return new IntArrayAtomicFieldData.WithOrdinals(
|
||||||
values.toArray(new int[values.size()]),
|
values.toArray(new int[values.size()]),
|
||||||
reader.maxDoc(),
|
reader.maxDoc(),
|
||||||
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
|
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,7 +149,7 @@ public class LongArrayIndexFieldData extends AbstractIndexFieldData<LongArrayAto
|
||||||
return new LongArrayAtomicFieldData.WithOrdinals(
|
return new LongArrayAtomicFieldData.WithOrdinals(
|
||||||
values.toArray(new long[values.size()]),
|
values.toArray(new long[values.size()]),
|
||||||
reader.maxDoc(),
|
reader.maxDoc(),
|
||||||
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
|
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,7 +178,7 @@ public class PagedBytesIndexFieldData extends AbstractIndexFieldData<PagedBytesA
|
||||||
return new PagedBytesAtomicFieldData(
|
return new PagedBytesAtomicFieldData(
|
||||||
bytesReader,
|
bytesReader,
|
||||||
termOrdToBytesOffsetReader,
|
termOrdToBytesOffsetReader,
|
||||||
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
|
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,7 @@ public class ShortArrayIndexFieldData extends AbstractIndexFieldData<ShortArrayA
|
||||||
return new ShortArrayAtomicFieldData.WithOrdinals(
|
return new ShortArrayAtomicFieldData.WithOrdinals(
|
||||||
values.toArray(new short[values.size()]),
|
values.toArray(new short[values.size()]),
|
||||||
reader.maxDoc(),
|
reader.maxDoc(),
|
||||||
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
|
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ import org.apache.lucene.index.Term;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
import org.elasticsearch.common.lucene.Lucene;
|
import org.elasticsearch.common.lucene.Lucene;
|
||||||
import org.elasticsearch.common.lucene.uid.UidField;
|
import org.elasticsearch.common.lucene.uid.UidField;
|
||||||
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.index.codec.postingsformat.PostingsFormatProvider;
|
import org.elasticsearch.index.codec.postingsformat.PostingsFormatProvider;
|
||||||
import org.elasticsearch.index.fielddata.FieldDataType;
|
import org.elasticsearch.index.fielddata.FieldDataType;
|
||||||
|
@ -129,7 +130,7 @@ public class UidFieldMapper extends AbstractFieldMapper<Uid> implements Internal
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FieldDataType fieldDataType() {
|
public FieldDataType fieldDataType() {
|
||||||
return new FieldDataType("string", "paged_bytes");
|
return new FieldDataType("string", ImmutableSettings.builder().put("format", "paged_bytes"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -36,6 +36,7 @@ import org.elasticsearch.common.bytes.BytesReference;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.logging.ESLogger;
|
import org.elasticsearch.common.logging.ESLogger;
|
||||||
import org.elasticsearch.common.lucene.Lucene;
|
import org.elasticsearch.common.lucene.Lucene;
|
||||||
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.util.concurrent.ConcurrentCollections;
|
import org.elasticsearch.common.util.concurrent.ConcurrentCollections;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
|
@ -386,7 +387,7 @@ public class PercolatorExecutor extends AbstractIndexComponent {
|
||||||
this.percolatorIndex = percolatorIndex;
|
this.percolatorIndex = percolatorIndex;
|
||||||
this.matches = matches;
|
this.matches = matches;
|
||||||
// TODO: when we move to a UID level mapping def on the index level, we can use that one, now, its per type, and we can't easily choose one
|
// TODO: when we move to a UID level mapping def on the index level, we can use that one, now, its per type, and we can't easily choose one
|
||||||
this.uidFieldData = percolatorIndex.fieldData().getForField(new FieldMapper.Names(UidFieldMapper.NAME), new FieldDataType("string", "paged_bytes"));
|
this.uidFieldData = percolatorIndex.fieldData().getForField(new FieldMapper.Names(UidFieldMapper.NAME), new FieldDataType("string", ImmutableSettings.builder().put("format", "paged_bytes")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
package org.elasticsearch.test.unit.index.fielddata;
|
package org.elasticsearch.test.unit.index.fielddata;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.index.fielddata.FieldDataType;
|
import org.elasticsearch.index.fielddata.FieldDataType;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
@ -30,6 +30,6 @@ public class ConcreteBytesStringFieldDataTests extends StringFieldDataTests {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected FieldDataType getFieldDataType() {
|
protected FieldDataType getFieldDataType() {
|
||||||
return new FieldDataType("string", "concrete_bytes", ImmutableMap.<String, String>of());
|
return new FieldDataType("string", ImmutableSettings.builder().put("format", "concrete_bytes"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
package org.elasticsearch.test.unit.index.fielddata;
|
package org.elasticsearch.test.unit.index.fielddata;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.index.fielddata.FieldDataType;
|
import org.elasticsearch.index.fielddata.FieldDataType;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
@ -30,6 +30,6 @@ public class PagedBytesStringFieldDataTests extends StringFieldDataTests {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected FieldDataType getFieldDataType() {
|
protected FieldDataType getFieldDataType() {
|
||||||
return new FieldDataType("string", "paged_bytes", ImmutableMap.<String, String>of());
|
return new FieldDataType("string", ImmutableSettings.builder().put("format", "paged_bytes"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue