indexedTerm to return bytes
part of the effort to reduce conversion from string to types
This commit is contained in:
parent
1cb531f000
commit
b9c5f0472c
|
@ -25,6 +25,7 @@ import org.apache.lucene.index.Term;
|
||||||
import org.apache.lucene.search.Filter;
|
import org.apache.lucene.search.Filter;
|
||||||
import org.apache.lucene.search.MultiTermQuery;
|
import org.apache.lucene.search.MultiTermQuery;
|
||||||
import org.apache.lucene.search.Query;
|
import org.apache.lucene.search.Query;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.elasticsearch.common.Nullable;
|
import org.elasticsearch.common.Nullable;
|
||||||
import org.elasticsearch.index.codec.postingsformat.PostingsFormatProvider;
|
import org.elasticsearch.index.codec.postingsformat.PostingsFormatProvider;
|
||||||
import org.elasticsearch.index.field.data.FieldDataType;
|
import org.elasticsearch.index.field.data.FieldDataType;
|
||||||
|
@ -106,6 +107,13 @@ public interface FieldMapper<T> {
|
||||||
public Term createIndexNameTerm(String value) {
|
public Term createIndexNameTerm(String value) {
|
||||||
return new Term(indexName, value);
|
return new Term(indexName, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new index term based on the provided value.
|
||||||
|
*/
|
||||||
|
public Term createIndexNameTerm(BytesRef value) {
|
||||||
|
return new Term(indexName, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Names names();
|
Names names();
|
||||||
|
@ -172,7 +180,7 @@ public interface FieldMapper<T> {
|
||||||
/**
|
/**
|
||||||
* Returns the indexed value.
|
* Returns the indexed value.
|
||||||
*/
|
*/
|
||||||
String indexedValue(String value);
|
BytesRef indexedValue(String value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should the field query {@link #fieldQuery(String, org.elasticsearch.index.query.QueryParseContext)} be used when detecting this
|
* Should the field query {@link #fieldQuery(String, org.elasticsearch.index.query.QueryParseContext)} be used when detecting this
|
||||||
|
@ -185,6 +193,8 @@ public interface FieldMapper<T> {
|
||||||
*/
|
*/
|
||||||
Query fieldQuery(String value, @Nullable QueryParseContext context);
|
Query fieldQuery(String value, @Nullable QueryParseContext context);
|
||||||
|
|
||||||
|
Filter fieldFilter(String value, @Nullable QueryParseContext context);
|
||||||
|
|
||||||
Query fuzzyQuery(String value, String minSim, int prefixLength, int maxExpansions, boolean transpositions);
|
Query fuzzyQuery(String value, String minSim, int prefixLength, int maxExpansions, boolean transpositions);
|
||||||
|
|
||||||
Query fuzzyQuery(String value, double minSim, int prefixLength, int maxExpansions, boolean transpositions);
|
Query fuzzyQuery(String value, double minSim, int prefixLength, int maxExpansions, boolean transpositions);
|
||||||
|
@ -202,8 +212,6 @@ public interface FieldMapper<T> {
|
||||||
*/
|
*/
|
||||||
Query queryStringTermQuery(Term term);
|
Query queryStringTermQuery(Term term);
|
||||||
|
|
||||||
Filter fieldFilter(String value, @Nullable QueryParseContext context);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a range query based on the mapper.
|
* Constructs a range query based on the mapper.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -28,6 +28,8 @@ import org.elasticsearch.common.bytes.HashedBytesArray;
|
||||||
public final class Uid {
|
public final class Uid {
|
||||||
|
|
||||||
public static final char DELIMITER = '#';
|
public static final char DELIMITER = '#';
|
||||||
|
public static final byte DELIMITER_BYTE = 0x23;
|
||||||
|
public static final BytesRef DELIMITER_BYTES = new BytesRef(new byte[]{DELIMITER_BYTE});
|
||||||
|
|
||||||
private final String type;
|
private final String type;
|
||||||
|
|
||||||
|
@ -98,6 +100,14 @@ public final class Uid {
|
||||||
return new Uid(uid.substring(0, delimiterIndex), uid.substring(delimiterIndex + 1));
|
return new Uid(uid.substring(0, delimiterIndex), uid.substring(delimiterIndex + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static BytesRef createUidAsBytes(String type, String id) {
|
||||||
|
BytesRef ref = new BytesRef(type.length() + 1 + id.length());
|
||||||
|
ref.copyChars(type);
|
||||||
|
ref.copyBytes(DELIMITER_BYTES);
|
||||||
|
ref.copyChars(id);
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
public static String createUid(String type, String id) {
|
public static String createUid(String type, String id) {
|
||||||
return createUid(new StringBuilder(), type, id);
|
return createUid(new StringBuilder(), type, id);
|
||||||
}
|
}
|
||||||
|
@ -110,7 +120,7 @@ public final class Uid {
|
||||||
public static HashedBytesArray[] splitUidIntoTypeAndId(BytesRef uid) {
|
public static HashedBytesArray[] splitUidIntoTypeAndId(BytesRef uid) {
|
||||||
int loc = -1;
|
int loc = -1;
|
||||||
for (int i = uid.offset; i < uid.length; i++) {
|
for (int i = uid.offset; i < uid.length; i++) {
|
||||||
if (uid.bytes[i] == 0x23) { // 0x23 is equal to '#'
|
if (uid.bytes[i] == DELIMITER_BYTE) { // 0x23 is equal to '#'
|
||||||
loc = i;
|
loc = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -123,7 +133,7 @@ public final class Uid {
|
||||||
byte[] type = new byte[loc - uid.offset];
|
byte[] type = new byte[loc - uid.offset];
|
||||||
System.arraycopy(uid.bytes, uid.offset, type, 0, type.length);
|
System.arraycopy(uid.bytes, uid.offset, type, 0, type.length);
|
||||||
|
|
||||||
byte[] id = new byte[uid.length - type.length -1];
|
byte[] id = new byte[uid.length - type.length - 1];
|
||||||
System.arraycopy(uid.bytes, loc + 1, id, 0, id.length);
|
System.arraycopy(uid.bytes, loc + 1, id, 0, id.length);
|
||||||
return new HashedBytesArray[]{new HashedBytesArray(type), new HashedBytesArray(id)};
|
return new HashedBytesArray[]{new HashedBytesArray(type), new HashedBytesArray(id)};
|
||||||
}
|
}
|
||||||
|
|
|
@ -421,8 +421,8 @@ public abstract class AbstractFieldMapper<T> implements FieldMapper<T>, Mapper {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
return value;
|
return new BytesRef(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -494,16 +494,16 @@ public abstract class AbstractFieldMapper<T> implements FieldMapper<T>, Mapper {
|
||||||
public Query rangeQuery(String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper, @Nullable QueryParseContext context) {
|
public Query rangeQuery(String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper, @Nullable QueryParseContext context) {
|
||||||
// LUCENE 4 UPGRADE: Perhaps indexedValue() should return a BytesRef?
|
// LUCENE 4 UPGRADE: Perhaps indexedValue() should return a BytesRef?
|
||||||
return new TermRangeQuery(names.indexName(),
|
return new TermRangeQuery(names.indexName(),
|
||||||
lowerTerm == null ? null : new BytesRef(indexedValue(lowerTerm)),
|
lowerTerm == null ? null : indexedValue(lowerTerm),
|
||||||
upperTerm == null ? null : new BytesRef(indexedValue(upperTerm)),
|
upperTerm == null ? null : indexedValue(upperTerm),
|
||||||
includeLower, includeUpper);
|
includeLower, includeUpper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Filter rangeFilter(String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper, @Nullable QueryParseContext context) {
|
public Filter rangeFilter(String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper, @Nullable QueryParseContext context) {
|
||||||
return new TermRangeFilter(names.indexName(),
|
return new TermRangeFilter(names.indexName(),
|
||||||
lowerTerm == null ? null : new BytesRef(indexedValue(lowerTerm)),
|
lowerTerm == null ? null : indexedValue(lowerTerm),
|
||||||
upperTerm == null ? null : new BytesRef(indexedValue(upperTerm)),
|
upperTerm == null ? null : indexedValue(upperTerm),
|
||||||
includeLower, includeUpper);
|
includeLower, includeUpper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -156,11 +156,6 @@ public class BinaryFieldMapper extends AbstractFieldMapper<byte[]> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String indexedValue(String value) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Field parseCreateField(ParseContext context) throws IOException {
|
protected Field parseCreateField(ParseContext context) throws IOException {
|
||||||
if (!stored()) {
|
if (!stored()) {
|
||||||
|
|
|
@ -22,6 +22,7 @@ package org.elasticsearch.index.mapper.core;
|
||||||
import org.apache.lucene.document.Field;
|
import org.apache.lucene.document.Field;
|
||||||
import org.apache.lucene.document.FieldType;
|
import org.apache.lucene.document.FieldType;
|
||||||
import org.apache.lucene.search.Filter;
|
import org.apache.lucene.search.Filter;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.elasticsearch.common.Booleans;
|
import org.elasticsearch.common.Booleans;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
import org.elasticsearch.common.lucene.Lucene;
|
import org.elasticsearch.common.lucene.Lucene;
|
||||||
|
@ -60,6 +61,11 @@ public class BooleanFieldMapper extends AbstractFieldMapper<Boolean> {
|
||||||
public static final Boolean NULL_VALUE = null;
|
public static final Boolean NULL_VALUE = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Values {
|
||||||
|
public final static BytesRef TRUE = new BytesRef("T");
|
||||||
|
public final static BytesRef FALSE = new BytesRef("F");
|
||||||
|
}
|
||||||
|
|
||||||
public static class Builder extends AbstractFieldMapper.Builder<Builder, BooleanFieldMapper> {
|
public static class Builder extends AbstractFieldMapper.Builder<Builder, BooleanFieldMapper> {
|
||||||
|
|
||||||
private Boolean nullValue = Defaults.NULL_VALUE;
|
private Boolean nullValue = Defaults.NULL_VALUE;
|
||||||
|
@ -169,17 +175,17 @@ public class BooleanFieldMapper extends AbstractFieldMapper<Boolean> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
if (value == null || value.length() == 0) {
|
if (value == null || value.length() == 0) {
|
||||||
return "F";
|
return Values.FALSE;
|
||||||
}
|
}
|
||||||
if (value.length() == 1 && value.charAt(0) == 'F') {
|
if (value.length() == 1 && value.charAt(0) == 'F') {
|
||||||
return "F";
|
return Values.FALSE;
|
||||||
}
|
}
|
||||||
if (Booleans.parseBoolean(value, false)) {
|
if (Booleans.parseBoolean(value, false)) {
|
||||||
return "T";
|
return Values.TRUE;
|
||||||
}
|
}
|
||||||
return "F";
|
return Values.FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -146,10 +146,10 @@ public class ByteFieldMapper extends NumberFieldMapper<Byte> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
BytesRef bytesRef = new BytesRef();
|
BytesRef bytesRef = new BytesRef();
|
||||||
NumericUtils.intToPrefixCoded(Byte.parseByte(value), precisionStep(), bytesRef);
|
NumericUtils.intToPrefixCoded(Byte.parseByte(value), precisionStep(), bytesRef);
|
||||||
return bytesRef.utf8ToString();
|
return bytesRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -220,10 +220,10 @@ public class DateFieldMapper extends NumberFieldMapper<Long> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
BytesRef bytesRef = new BytesRef();
|
BytesRef bytesRef = new BytesRef();
|
||||||
NumericUtils.longToPrefixCoded(dateTimeFormatter.parser().parseMillis(value), precisionStep(), bytesRef);
|
NumericUtils.longToPrefixCoded(dateTimeFormatter.parser().parseMillis(value), precisionStep(), bytesRef);
|
||||||
return bytesRef.utf8ToString();
|
return bytesRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -148,11 +148,11 @@ public class DoubleFieldMapper extends NumberFieldMapper<Double> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
long longValue = NumericUtils.doubleToSortableLong(Double.parseDouble(value));
|
long longValue = NumericUtils.doubleToSortableLong(Double.parseDouble(value));
|
||||||
BytesRef bytesRef = new BytesRef();
|
BytesRef bytesRef = new BytesRef();
|
||||||
NumericUtils.longToPrefixCoded(longValue, precisionStep(), bytesRef);
|
NumericUtils.longToPrefixCoded(longValue, precisionStep(), bytesRef);
|
||||||
return bytesRef.utf8ToString();
|
return bytesRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -146,11 +146,11 @@ public class FloatFieldMapper extends NumberFieldMapper<Float> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
int intValue = NumericUtils.floatToSortableInt(Float.parseFloat(value));
|
int intValue = NumericUtils.floatToSortableInt(Float.parseFloat(value));
|
||||||
BytesRef bytesRef = new BytesRef();
|
BytesRef bytesRef = new BytesRef();
|
||||||
NumericUtils.intToPrefixCoded(intValue, precisionStep(), bytesRef);
|
NumericUtils.intToPrefixCoded(intValue, precisionStep(), bytesRef);
|
||||||
return bytesRef.utf8ToString();
|
return bytesRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -148,10 +148,10 @@ public class IntegerFieldMapper extends NumberFieldMapper<Integer> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
BytesRef bytesRef = new BytesRef();
|
BytesRef bytesRef = new BytesRef();
|
||||||
NumericUtils.intToPrefixCoded(Integer.parseInt(value), precisionStep(), bytesRef);
|
NumericUtils.intToPrefixCoded(Integer.parseInt(value), precisionStep(), bytesRef);
|
||||||
return bytesRef.utf8ToString();
|
return bytesRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -148,10 +148,10 @@ public class LongFieldMapper extends NumberFieldMapper<Long> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
BytesRef bytesRef = new BytesRef();
|
BytesRef bytesRef = new BytesRef();
|
||||||
NumericUtils.longToPrefixCoded(Long.parseLong(value), precisionStep(), bytesRef);
|
NumericUtils.longToPrefixCoded(Long.parseLong(value), precisionStep(), bytesRef);
|
||||||
return bytesRef.utf8ToString();
|
return bytesRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -148,10 +148,10 @@ public class ShortFieldMapper extends NumberFieldMapper<Short> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
BytesRef bytesRef = new BytesRef();
|
BytesRef bytesRef = new BytesRef();
|
||||||
NumericUtils.intToPrefixCoded(Short.parseShort(value), precisionStep(), bytesRef);
|
NumericUtils.intToPrefixCoded(Short.parseShort(value), precisionStep(), bytesRef);
|
||||||
return bytesRef.utf8ToString();
|
return bytesRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -229,11 +229,6 @@ public class StringFieldMapper extends AbstractFieldMapper<String> implements Al
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String indexedValue(String value) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean customBoost() {
|
protected boolean customBoost() {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -145,11 +145,11 @@ public class BoostFieldMapper extends NumberFieldMapper<Float> implements Intern
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
int intValue = NumericUtils.floatToSortableInt(Float.parseFloat(value));
|
int intValue = NumericUtils.floatToSortableInt(Float.parseFloat(value));
|
||||||
BytesRef bytesRef = new BytesRef();
|
BytesRef bytesRef = new BytesRef();
|
||||||
NumericUtils.intToPrefixCoded(intValue, precisionStep(), bytesRef);
|
NumericUtils.intToPrefixCoded(intValue, precisionStep(), bytesRef);
|
||||||
return bytesRef.utf8ToString();
|
return bytesRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -143,11 +143,6 @@ public class IdFieldMapper extends AbstractFieldMapper<String> implements Intern
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String indexedValue(String value) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean useFieldQueryWithQueryString() {
|
public boolean useFieldQueryWithQueryString() {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -137,11 +137,6 @@ public class IndexFieldMapper extends AbstractFieldMapper<String> implements Int
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String indexedValue(String value) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Term term(String value) {
|
public Term term(String value) {
|
||||||
return names().createIndexNameTerm(value);
|
return names().createIndexNameTerm(value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ import org.apache.lucene.index.Term;
|
||||||
import org.apache.lucene.search.ConstantScoreQuery;
|
import org.apache.lucene.search.ConstantScoreQuery;
|
||||||
import org.apache.lucene.search.Filter;
|
import org.apache.lucene.search.Filter;
|
||||||
import org.apache.lucene.search.Query;
|
import org.apache.lucene.search.Query;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.elasticsearch.common.Nullable;
|
import org.elasticsearch.common.Nullable;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
import org.elasticsearch.common.lucene.Lucene;
|
import org.elasticsearch.common.lucene.Lucene;
|
||||||
|
@ -192,11 +193,11 @@ public class ParentFieldMapper extends AbstractFieldMapper<Uid> implements Inter
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
if (value.indexOf(Uid.DELIMITER) == -1) {
|
if (value.indexOf(Uid.DELIMITER) == -1) {
|
||||||
return Uid.createUid(type, value);
|
return Uid.createUidAsBytes(type, value);
|
||||||
}
|
}
|
||||||
return value;
|
return super.indexedValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -151,11 +151,6 @@ public class RoutingFieldMapper extends AbstractFieldMapper<String> implements I
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String indexedValue(String value) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validate(ParseContext context) throws MapperParsingException {
|
public void validate(ParseContext context) throws MapperParsingException {
|
||||||
String routing = context.sourceToParse().routing();
|
String routing = context.sourceToParse().routing();
|
||||||
|
|
|
@ -373,11 +373,6 @@ public class SourceFieldMapper extends AbstractFieldMapper<byte[]> implements In
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String indexedValue(String value) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String contentType() {
|
protected String contentType() {
|
||||||
return CONTENT_TYPE;
|
return CONTENT_TYPE;
|
||||||
|
|
|
@ -121,11 +121,6 @@ public class TypeFieldMapper extends AbstractFieldMapper<String> implements Inte
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String indexedValue(String value) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Term term(String value) {
|
public Term term(String value) {
|
||||||
return names().createIndexNameTerm(value);
|
return names().createIndexNameTerm(value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,11 +184,6 @@ public class UidFieldMapper extends AbstractFieldMapper<Uid> implements Internal
|
||||||
return Uid.createUid(value);
|
return Uid.createUid(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String indexedValue(String value) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Term term(String type, String id) {
|
public Term term(String type, String id) {
|
||||||
return term(Uid.createUid(type, id));
|
return term(Uid.createUid(type, id));
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,10 +186,10 @@ public class IpFieldMapper extends NumberFieldMapper<Long> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String indexedValue(String value) {
|
public BytesRef indexedValue(String value) {
|
||||||
BytesRef bytesRef = new BytesRef();
|
BytesRef bytesRef = new BytesRef();
|
||||||
NumericUtils.longToPrefixCoded(ipToLong(value), precisionStep(), bytesRef);
|
NumericUtils.longToPrefixCoded(ipToLong(value), precisionStep(), bytesRef);
|
||||||
return bytesRef.utf8ToString();
|
return bytesRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -22,6 +22,7 @@ package org.elasticsearch.index.query;
|
||||||
import org.apache.lucene.index.Term;
|
import org.apache.lucene.index.Term;
|
||||||
import org.apache.lucene.search.Query;
|
import org.apache.lucene.search.Query;
|
||||||
import org.apache.lucene.search.spans.SpanTermQuery;
|
import org.apache.lucene.search.spans.SpanTermQuery;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
|
@ -90,15 +91,19 @@ public class SpanTermQueryParser implements QueryParser {
|
||||||
throw new QueryParsingException(parseContext.index(), "No value specified for term query");
|
throw new QueryParsingException(parseContext.index(), "No value specified for term query");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BytesRef valueBytes = null;
|
||||||
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
||||||
if (smartNameFieldMappers != null) {
|
if (smartNameFieldMappers != null) {
|
||||||
if (smartNameFieldMappers.hasMapper()) {
|
if (smartNameFieldMappers.hasMapper()) {
|
||||||
fieldName = smartNameFieldMappers.mapper().names().indexName();
|
fieldName = smartNameFieldMappers.mapper().names().indexName();
|
||||||
value = smartNameFieldMappers.mapper().indexedValue(value);
|
valueBytes = smartNameFieldMappers.mapper().indexedValue(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (valueBytes == null) {
|
||||||
|
valueBytes = new BytesRef(value);
|
||||||
|
}
|
||||||
|
|
||||||
SpanTermQuery query = new SpanTermQuery(new Term(fieldName, value));
|
SpanTermQuery query = new SpanTermQuery(new Term(fieldName, valueBytes));
|
||||||
query.setBoost(boost);
|
query.setBoost(boost);
|
||||||
return wrapSmartNameQuery(query, smartNameFieldMappers, parseContext);
|
return wrapSmartNameQuery(query, smartNameFieldMappers, parseContext);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ package org.elasticsearch.index.query;
|
||||||
import org.apache.lucene.index.Term;
|
import org.apache.lucene.index.Term;
|
||||||
import org.apache.lucene.search.Query;
|
import org.apache.lucene.search.Query;
|
||||||
import org.apache.lucene.search.WildcardQuery;
|
import org.apache.lucene.search.WildcardQuery;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.index.mapper.MapperService;
|
import org.elasticsearch.index.mapper.MapperService;
|
||||||
|
@ -90,13 +91,16 @@ public class WildcardQueryParser implements QueryParser {
|
||||||
throw new QueryParsingException(parseContext.index(), "No value specified for prefix query");
|
throw new QueryParsingException(parseContext.index(), "No value specified for prefix query");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BytesRef valueBytes;
|
||||||
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
||||||
if (smartNameFieldMappers != null && smartNameFieldMappers.hasMapper()) {
|
if (smartNameFieldMappers != null && smartNameFieldMappers.hasMapper()) {
|
||||||
fieldName = smartNameFieldMappers.mapper().names().indexName();
|
fieldName = smartNameFieldMappers.mapper().names().indexName();
|
||||||
value = smartNameFieldMappers.mapper().indexedValue(value);
|
valueBytes = smartNameFieldMappers.mapper().indexedValue(value);
|
||||||
|
} else {
|
||||||
|
valueBytes = new BytesRef(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
WildcardQuery query = new WildcardQuery(new Term(fieldName, value));
|
WildcardQuery query = new WildcardQuery(new Term(fieldName, valueBytes));
|
||||||
QueryParsers.setRewriteMethod(query, rewriteMethod);
|
QueryParsers.setRewriteMethod(query, rewriteMethod);
|
||||||
query.setRewriteMethod(QueryParsers.parseRewriteMethod(rewriteMethod));
|
query.setRewriteMethod(QueryParsers.parseRewriteMethod(rewriteMethod));
|
||||||
query.setBoost(boost);
|
query.setBoost(boost);
|
||||||
|
|
Loading…
Reference in New Issue