move field data type to simply be type and settings

This commit is contained in:
Shay Banon 2013-01-24 09:33:08 +01:00
parent 50ac477d92
commit 613b746299
17 changed files with 67 additions and 61 deletions

View File

@ -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.
*/ */

View File

@ -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;
} }
} }

View File

@ -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);

View File

@ -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);
} }
} }

View File

@ -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())
); );
} }
} }

View File

@ -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())
); );
} }
} }

View File

@ -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())
); );
} }
} }

View File

@ -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())
); );
} }
} }

View File

@ -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())
); );
} }
} }

View File

@ -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())
); );
} }
} }

View File

@ -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())
); );
} }
} }

View File

@ -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())
); );
} }

View File

@ -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())
); );
} }
} }

View File

@ -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

View File

@ -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

View File

@ -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"));
} }
} }

View File

@ -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"));
} }
} }