Skip to content

Commit 613b746

Browse files
committed
move field data type to simply be type and settings
1 parent 50ac477 commit 613b746

17 files changed

+67
-61
lines changed

src/main/java/org/elasticsearch/common/settings/ImmutableSettings.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,10 @@ public static void writeSettingsToStream(Settings settings, StreamOutput out) th
360360
}
361361
}
362362

363+
public static Builder builder() {
364+
return new Builder();
365+
}
366+
363367
/**
364368
* Returns a builder to be used in order to build settings.
365369
*/

src/main/java/org/elasticsearch/index/fielddata/FieldDataType.java

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,42 +19,54 @@
1919

2020
package org.elasticsearch.index.fielddata;
2121

22-
import com.google.common.collect.ImmutableMap;
23-
import org.elasticsearch.common.Nullable;
22+
import org.elasticsearch.common.settings.ImmutableSettings;
23+
import org.elasticsearch.common.settings.Settings;
2424

2525
/**
2626
*/
2727
public class FieldDataType {
2828

2929
private final String type;
30-
@Nullable
31-
private final String format;
32-
private final ImmutableMap<String, String> options;
30+
private final Settings settings;
3331

3432
public FieldDataType(String type) {
35-
this(type, null, ImmutableMap.<String, String>of());
33+
this(type, ImmutableSettings.Builder.EMPTY_SETTINGS);
3634
}
3735

38-
public FieldDataType(String type, String format) {
39-
this(type, format, ImmutableMap.<String, String>of());
36+
public FieldDataType(String type, Settings.Builder builder) {
37+
this(type, builder.build());
4038
}
4139

42-
public FieldDataType(String type, @Nullable String format, ImmutableMap<String, String> options) {
40+
public FieldDataType(String type, Settings settings) {
4341
this.type = type;
44-
this.format = format;
45-
this.options = options;
42+
this.settings = settings;
4643
}
4744

4845
public String getType() {
4946
return this.type;
5047
}
5148

52-
@Nullable
53-
public String getFormat() {
54-
return this.format;
49+
public Settings getSettings() {
50+
return this.settings;
5551
}
5652

57-
public ImmutableMap<String, String> getOptions() {
58-
return this.options;
53+
@Override
54+
public boolean equals(Object o) {
55+
if (this == o) return true;
56+
if (o == null || getClass() != o.getClass()) return false;
57+
58+
FieldDataType that = (FieldDataType) o;
59+
60+
if (!settings.equals(that.settings)) return false;
61+
if (!type.equals(that.type)) return false;
62+
63+
return true;
64+
}
65+
66+
@Override
67+
public int hashCode() {
68+
int result = type.hashCode();
69+
result = 31 * result + settings.hashCode();
70+
return result;
5971
}
6072
}

src/main/java/org/elasticsearch/index/fielddata/IndexFieldDataService.java

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -119,17 +119,11 @@ public <IFD extends IndexFieldData> IFD getForField(FieldMapper.Names fieldNames
119119
fieldData = loadedFieldData.get(fieldNames.indexName());
120120
if (fieldData == null) {
121121
IndexFieldData.Builder builder = null;
122-
if (type.getFormat() != null) {
123-
builder = buildersByTypeAndFormat.get(Tuple.tuple(type.getType(), type.getFormat()));
124-
if (builder == null) {
125-
logger.warn("failed to find format [" + type.getFormat() + "] for field [" + fieldNames.fullName() + "], will use default");
126-
}
127-
}
128-
String format = indexSettings.get("index.fielddata.type." + type.getType() + ".format", null);
122+
String format = type.getSettings().get("format", indexSettings.get("index.fielddata.type." + type.getType() + ".format", null));
129123
if (format != null) {
130-
builder = buildersByTypeAndFormat.get(Tuple.tuple(type.getType(), type.getFormat()));
124+
builder = buildersByTypeAndFormat.get(Tuple.tuple(type.getType(), format));
131125
if (builder == null) {
132-
logger.warn("failed to find index level type format [" + format + "] for field [" + fieldNames.fullName() + "], will use default");
126+
logger.warn("failed to find format [" + format + "] for field [" + fieldNames.fullName() + "], will use default");
133127
}
134128
}
135129
if (builder == null) {
@@ -140,17 +134,13 @@ public <IFD extends IndexFieldData> IFD getForField(FieldMapper.Names fieldNames
140134
}
141135

142136
IndexFieldDataCache cache;
143-
if (type.getOptions().containsKey("cache")) {
144-
String cacheType = type.getOptions().get("cache");
145-
if ("resident".equals(cacheType)) {
146-
cache = new IndexFieldDataCache.Resident();
147-
} else if ("soft".equals(cacheType)) {
148-
cache = new IndexFieldDataCache.Soft();
149-
} else {
150-
throw new ElasticSearchIllegalArgumentException("cache type not supported [" + cacheType + "] for field [" + fieldNames.fullName() + "]");
151-
}
152-
} else {
137+
String cacheType = type.getSettings().get("cache", indexSettings.get("index.fielddata.cache", "resident"));
138+
if ("resident".equals(cacheType)) {
153139
cache = new IndexFieldDataCache.Resident();
140+
} else if ("soft".equals(cacheType)) {
141+
cache = new IndexFieldDataCache.Soft();
142+
} else {
143+
throw new ElasticSearchIllegalArgumentException("cache type not supported [" + cacheType + "] for field [" + fieldNames.fullName() + "]");
154144
}
155145

156146
fieldData = builder.build(index, indexSettings, fieldNames, type, cache);

src/main/java/org/elasticsearch/index/fielddata/ordinals/Ordinals.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,27 @@
1919

2020
package org.elasticsearch.index.fielddata.ordinals;
2121

22+
import org.elasticsearch.ElasticSearchIllegalArgumentException;
23+
import org.elasticsearch.common.settings.Settings;
2224
import org.elasticsearch.index.fielddata.util.IntArrayRef;
2325

24-
import java.util.Map;
25-
2626
/**
2727
* A thread safe ordinals abstraction. Ordinals can only be positive integers.
2828
*/
2929
public interface Ordinals {
3030

3131
static class Factories {
3232

33-
public static Ordinals createFromFlatOrdinals(int[][] ordinals, int numOrds, Map<String, String> options) {
34-
String multiOrdinals = options.get("multi_ordinals");
33+
public static Ordinals createFromFlatOrdinals(int[][] ordinals, int numOrds, Settings settings) {
34+
String multiOrdinals = settings.get("multi_ordinals", "sparse");
3535
if ("flat".equals(multiOrdinals)) {
3636
return new MultiFlatArrayOrdinals(ordinals, numOrds);
37+
} else if ("sparse".equals(multiOrdinals)) {
38+
int multiOrdinalsMaxDocs = settings.getAsInt("multi_ordinals_max_docs", 16777216 /*Equal to 64MB per storage array*/);
39+
return new SparseMultiArrayOrdinals(ordinals, numOrds, multiOrdinalsMaxDocs);
40+
} else {
41+
throw new ElasticSearchIllegalArgumentException("no applicable fielddata multi_ordinals value, got [" + multiOrdinals + "]");
3742
}
38-
int multiOrdinalsMaxDocs = 16777216; // Equal to 64MB per storage array
39-
String multiOrdinalsMaxDocsVal = options.get("multi_ordinals_max_docs");
40-
if (multiOrdinalsMaxDocsVal != null) {
41-
multiOrdinalsMaxDocs = Integer.valueOf(multiOrdinalsMaxDocsVal);
42-
}
43-
44-
return new SparseMultiArrayOrdinals(ordinals, numOrds, multiOrdinalsMaxDocs);
4543
}
4644
}
4745

src/main/java/org/elasticsearch/index/fielddata/plain/ByteArrayIndexFieldData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public ByteArrayAtomicFieldData loadDirect(AtomicReaderContext context) throws E
149149
return new ByteArrayAtomicFieldData.WithOrdinals(
150150
values.toArray(new byte[values.size()]),
151151
reader.maxDoc(),
152-
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
152+
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
153153
);
154154
}
155155
}

src/main/java/org/elasticsearch/index/fielddata/plain/ConcreteBytesRefIndexFieldData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public ConcreteBytesRefAtomicFieldData loadDirect(AtomicReaderContext context) t
145145
}
146146
return new ConcreteBytesRefAtomicFieldData(
147147
values.toArray(new BytesRef[values.size()]),
148-
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
148+
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
149149
);
150150
}
151151
}

src/main/java/org/elasticsearch/index/fielddata/plain/DoubleArrayIndexFieldData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public DoubleArrayAtomicFieldData loadDirect(AtomicReaderContext context) throws
149149
return new DoubleArrayAtomicFieldData.WithOrdinals(
150150
values.toArray(new double[values.size()]),
151151
reader.maxDoc(),
152-
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
152+
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
153153
);
154154
}
155155
}

src/main/java/org/elasticsearch/index/fielddata/plain/FloatArrayIndexFieldData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public FloatArrayAtomicFieldData loadDirect(AtomicReaderContext context) throws
149149
return new FloatArrayAtomicFieldData.WithOrdinals(
150150
values.toArray(new float[values.size()]),
151151
reader.maxDoc(),
152-
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
152+
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
153153
);
154154
}
155155
}

src/main/java/org/elasticsearch/index/fielddata/plain/GeoPointDoubleArrayIndexFieldData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public GeoPointDoubleArrayAtomicFieldData loadDirect(AtomicReaderContext context
153153
lon.toArray(new double[lon.size()]),
154154
lat.toArray(new double[lat.size()]),
155155
reader.maxDoc(),
156-
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
156+
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
157157
);
158158
}
159159
}

src/main/java/org/elasticsearch/index/fielddata/plain/IntArrayIndexFieldData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public IntArrayAtomicFieldData loadDirect(AtomicReaderContext context) throws Ex
149149
return new IntArrayAtomicFieldData.WithOrdinals(
150150
values.toArray(new int[values.size()]),
151151
reader.maxDoc(),
152-
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
152+
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
153153
);
154154
}
155155
}

src/main/java/org/elasticsearch/index/fielddata/plain/LongArrayIndexFieldData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public LongArrayAtomicFieldData loadDirect(AtomicReaderContext context) throws E
149149
return new LongArrayAtomicFieldData.WithOrdinals(
150150
values.toArray(new long[values.size()]),
151151
reader.maxDoc(),
152-
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
152+
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
153153
);
154154
}
155155
}

src/main/java/org/elasticsearch/index/fielddata/plain/PagedBytesIndexFieldData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public PagedBytesAtomicFieldData loadDirect(AtomicReaderContext context) throws
178178
return new PagedBytesAtomicFieldData(
179179
bytesReader,
180180
termOrdToBytesOffsetReader,
181-
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
181+
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
182182
);
183183
}
184184

src/main/java/org/elasticsearch/index/fielddata/plain/ShortArrayIndexFieldData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public ShortArrayAtomicFieldData loadDirect(AtomicReaderContext context) throws
149149
return new ShortArrayAtomicFieldData.WithOrdinals(
150150
values.toArray(new short[values.size()]),
151151
reader.maxDoc(),
152-
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getOptions())
152+
Ordinals.Factories.createFromFlatOrdinals(nativeOrdinals, termOrd, fieldDataType.getSettings())
153153
);
154154
}
155155
}

src/main/java/org/elasticsearch/index/mapper/internal/UidFieldMapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.elasticsearch.common.Strings;
2727
import org.elasticsearch.common.lucene.Lucene;
2828
import org.elasticsearch.common.lucene.uid.UidField;
29+
import org.elasticsearch.common.settings.ImmutableSettings;
2930
import org.elasticsearch.common.xcontent.XContentBuilder;
3031
import org.elasticsearch.index.codec.postingsformat.PostingsFormatProvider;
3132
import org.elasticsearch.index.fielddata.FieldDataType;
@@ -129,7 +130,7 @@ public FieldType defaultFieldType() {
129130

130131
@Override
131132
public FieldDataType fieldDataType() {
132-
return new FieldDataType("string", "paged_bytes");
133+
return new FieldDataType("string", ImmutableSettings.builder().put("format", "paged_bytes"));
133134
}
134135

135136
@Override

src/main/java/org/elasticsearch/index/percolator/PercolatorExecutor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.elasticsearch.common.inject.Inject;
3737
import org.elasticsearch.common.logging.ESLogger;
3838
import org.elasticsearch.common.lucene.Lucene;
39+
import org.elasticsearch.common.settings.ImmutableSettings;
3940
import org.elasticsearch.common.settings.Settings;
4041
import org.elasticsearch.common.util.concurrent.ConcurrentCollections;
4142
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -386,7 +387,7 @@ static class QueryCollector extends Collector {
386387
this.percolatorIndex = percolatorIndex;
387388
this.matches = matches;
388389
// 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
389-
this.uidFieldData = percolatorIndex.fieldData().getForField(new FieldMapper.Names(UidFieldMapper.NAME), new FieldDataType("string", "paged_bytes"));
390+
this.uidFieldData = percolatorIndex.fieldData().getForField(new FieldMapper.Names(UidFieldMapper.NAME), new FieldDataType("string", ImmutableSettings.builder().put("format", "paged_bytes")));
390391
}
391392

392393
@Override

src/test/java/org/elasticsearch/test/unit/index/fielddata/ConcreteBytesStringFieldDataTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
package org.elasticsearch.test.unit.index.fielddata;
2121

22-
import com.google.common.collect.ImmutableMap;
22+
import org.elasticsearch.common.settings.ImmutableSettings;
2323
import org.elasticsearch.index.fielddata.FieldDataType;
2424
import org.testng.annotations.Test;
2525

@@ -30,6 +30,6 @@ public class ConcreteBytesStringFieldDataTests extends StringFieldDataTests {
3030

3131
@Override
3232
protected FieldDataType getFieldDataType() {
33-
return new FieldDataType("string", "concrete_bytes", ImmutableMap.<String, String>of());
33+
return new FieldDataType("string", ImmutableSettings.builder().put("format", "concrete_bytes"));
3434
}
3535
}

src/test/java/org/elasticsearch/test/unit/index/fielddata/PagedBytesStringFieldDataTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
package org.elasticsearch.test.unit.index.fielddata;
2121

22-
import com.google.common.collect.ImmutableMap;
22+
import org.elasticsearch.common.settings.ImmutableSettings;
2323
import org.elasticsearch.index.fielddata.FieldDataType;
2424
import org.testng.annotations.Test;
2525

@@ -30,6 +30,6 @@ public class PagedBytesStringFieldDataTests extends StringFieldDataTests {
3030

3131
@Override
3232
protected FieldDataType getFieldDataType() {
33-
return new FieldDataType("string", "paged_bytes", ImmutableMap.<String, String>of());
33+
return new FieldDataType("string", ImmutableSettings.builder().put("format", "paged_bytes"));
3434
}
3535
}

0 commit comments

Comments
 (0)