|
@@ -28,6 +28,7 @@ import org.apache.lucene.index.IndexOptions;
|
|
|
import org.apache.lucene.index.IndexableField;
|
|
|
import org.apache.lucene.index.Term;
|
|
|
import org.apache.lucene.search.DocValuesFieldExistsQuery;
|
|
|
+import org.apache.lucene.search.NormsFieldExistsQuery;
|
|
|
import org.apache.lucene.search.Query;
|
|
|
import org.apache.lucene.search.TermQuery;
|
|
|
import org.apache.lucene.util.BytesRef;
|
|
@@ -166,7 +167,7 @@ public final class KeywordFieldMapper extends FieldMapper {
|
|
|
builder.ignoreAbove(XContentMapValues.nodeIntegerValue(propNode, -1));
|
|
|
iterator.remove();
|
|
|
} else if (propName.equals("norms")) {
|
|
|
- builder.omitNorms(XContentMapValues.nodeBooleanValue(propNode, "norms") == false);
|
|
|
+ TypeParsers.parseNorms(builder, name, propNode);
|
|
|
iterator.remove();
|
|
|
} else if (propName.equals("eager_global_ordinals")) {
|
|
|
builder.eagerGlobalOrdinals(XContentMapValues.nodeBooleanValue(propNode, "eager_global_ordinals"));
|
|
@@ -256,8 +257,10 @@ public final class KeywordFieldMapper extends FieldMapper {
|
|
|
public Query existsQuery(QueryShardContext context) {
|
|
|
if (hasDocValues()) {
|
|
|
return new DocValuesFieldExistsQuery(name());
|
|
|
- } else {
|
|
|
+ } else if (omitNorms()) {
|
|
|
return new TermQuery(new Term(FieldNamesFieldMapper.NAME, name()));
|
|
|
+ } else {
|
|
|
+ return new NormsFieldExistsQuery(name());
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -366,17 +369,19 @@ public final class KeywordFieldMapper extends FieldMapper {
|
|
|
|
|
|
// convert to utf8 only once before feeding postings/dv/stored fields
|
|
|
final BytesRef binaryValue = new BytesRef(value);
|
|
|
- if (fieldType().indexOptions() != IndexOptions.NONE || fieldType().stored()) {
|
|
|
+ if (fieldType().indexOptions() != IndexOptions.NONE || fieldType().stored()) {
|
|
|
Field field = new Field(fieldType().name(), binaryValue, fieldType());
|
|
|
fields.add(field);
|
|
|
+
|
|
|
+ if (fieldType().hasDocValues() == false && fieldType().omitNorms()) {
|
|
|
+ createFieldNamesField(context, fields);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
if (fieldType().hasDocValues()) {
|
|
|
fields.add(new SortedSetDocValuesField(fieldType().name(), binaryValue));
|
|
|
- } else if (fieldType().stored() || fieldType().indexOptions() != IndexOptions.NONE) {
|
|
|
- createFieldNamesField(context, fields);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
@Override
|
|
|
protected String contentType() {
|
|
|
return CONTENT_TYPE;
|