Search in sources :

Example 6 with Token

use of org.elasticsearch.common.xcontent.XContentParser.Token in project elasticsearch by elastic.

the class ContextMapping method parseQueryContext.

/**
     * Parses query contexts for this mapper
     */
public final List<InternalQueryContext> parseQueryContext(QueryParseContext context) throws IOException, ElasticsearchParseException {
    List<T> queryContexts = new ArrayList<>();
    XContentParser parser = context.parser();
    Token token = parser.nextToken();
    if (token == Token.START_OBJECT || token == Token.VALUE_STRING) {
        queryContexts.add(fromXContent(context));
    } else if (token == Token.START_ARRAY) {
        while (parser.nextToken() != Token.END_ARRAY) {
            queryContexts.add(fromXContent(context));
        }
    }
    return toInternalQueryContexts(queryContexts);
}
Also used : ArrayList(java.util.ArrayList) Token(org.elasticsearch.common.xcontent.XContentParser.Token) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Example 7 with Token

use of org.elasticsearch.common.xcontent.XContentParser.Token in project elasticsearch by elastic.

the class GeoContextMapping method parseContext.

/**
     * Parse a set of {@link CharSequence} contexts at index-time.
     * Acceptable formats:
     *
     *  <ul>
     *     <li>Array: <pre>[<i>&lt;GEO POINT&gt;</i>, ..]</pre></li>
     *     <li>String/Object/Array: <pre>&quot;GEO POINT&quot;</pre></li>
     *  </ul>
     *
     * see {@link GeoUtils#parseGeoPoint(String, GeoPoint)} for GEO POINT
     */
@Override
public Set<CharSequence> parseContext(ParseContext parseContext, XContentParser parser) throws IOException, ElasticsearchParseException {
    if (fieldName != null) {
        FieldMapper mapper = parseContext.docMapper().mappers().getMapper(fieldName);
        if (!(mapper instanceof GeoPointFieldMapper)) {
            throw new ElasticsearchParseException("referenced field must be mapped to geo_point");
        }
    }
    final Set<CharSequence> contexts = new HashSet<>();
    Token token = parser.currentToken();
    if (token == Token.START_ARRAY) {
        token = parser.nextToken();
        // Test if value is a single point in <code>[lon, lat]</code> format
        if (token == Token.VALUE_NUMBER) {
            double lon = parser.doubleValue();
            if (parser.nextToken() == Token.VALUE_NUMBER) {
                double lat = parser.doubleValue();
                if (parser.nextToken() == Token.END_ARRAY) {
                    contexts.add(stringEncode(lon, lat, precision));
                } else {
                    throw new ElasticsearchParseException("only two values [lon, lat] expected");
                }
            } else {
                throw new ElasticsearchParseException("latitude must be a numeric value");
            }
        } else {
            while (token != Token.END_ARRAY) {
                GeoPoint point = GeoUtils.parseGeoPoint(parser);
                contexts.add(stringEncode(point.getLon(), point.getLat(), precision));
                token = parser.nextToken();
            }
        }
    } else if (token == Token.VALUE_STRING) {
        final String geoHash = parser.text();
        final CharSequence truncatedGeoHash = geoHash.subSequence(0, Math.min(geoHash.length(), precision));
        contexts.add(truncatedGeoHash);
    } else {
        // or a single location
        GeoPoint point = GeoUtils.parseGeoPoint(parser);
        contexts.add(stringEncode(point.getLon(), point.getLat(), precision));
    }
    return contexts;
}
Also used : GeoPoint(org.elasticsearch.common.geo.GeoPoint) GeoPointFieldMapper(org.elasticsearch.index.mapper.GeoPointFieldMapper) ElasticsearchParseException(org.elasticsearch.ElasticsearchParseException) Token(org.elasticsearch.common.xcontent.XContentParser.Token) FieldMapper(org.elasticsearch.index.mapper.FieldMapper) GeoPointFieldMapper(org.elasticsearch.index.mapper.GeoPointFieldMapper) HashSet(java.util.HashSet)

Example 8 with Token

use of org.elasticsearch.common.xcontent.XContentParser.Token in project elasticsearch by elastic.

the class Laplace method fromXContent.

public static SmoothingModel fromXContent(XContentParser parser) throws IOException {
    XContentParser.Token token;
    String fieldName = null;
    double alpha = DEFAULT_LAPLACE_ALPHA;
    while ((token = parser.nextToken()) != Token.END_OBJECT) {
        if (token == XContentParser.Token.FIELD_NAME) {
            fieldName = parser.currentName();
        }
        if (token.isValue() && ALPHA_FIELD.match(fieldName)) {
            alpha = parser.doubleValue();
        }
    }
    return new Laplace(alpha);
}
Also used : Token(org.elasticsearch.common.xcontent.XContentParser.Token) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Example 9 with Token

use of org.elasticsearch.common.xcontent.XContentParser.Token in project elasticsearch by elastic.

the class FieldStatsRequest method parseIndexConstraints.

private static void parseIndexConstraints(List<IndexConstraint> indexConstraints, XContentParser parser) throws IOException {
    Token token = parser.currentToken();
    assert token == Token.START_OBJECT;
    String field = null;
    String currentName = null;
    for (token = parser.nextToken(); token != Token.END_OBJECT; token = parser.nextToken()) {
        if (token == Token.FIELD_NAME) {
            field = currentName = parser.currentName();
        } else if (token == Token.START_OBJECT) {
            for (Token fieldToken = parser.nextToken(); fieldToken != Token.END_OBJECT; fieldToken = parser.nextToken()) {
                if (fieldToken == Token.FIELD_NAME) {
                    currentName = parser.currentName();
                } else if (fieldToken == Token.START_OBJECT) {
                    IndexConstraint.Property property = IndexConstraint.Property.parse(currentName);
                    String value = null;
                    String optionalFormat = null;
                    IndexConstraint.Comparison comparison = null;
                    for (Token propertyToken = parser.nextToken(); propertyToken != Token.END_OBJECT; propertyToken = parser.nextToken()) {
                        if (propertyToken.isValue()) {
                            if ("format".equals(parser.currentName())) {
                                optionalFormat = parser.text();
                            } else {
                                comparison = IndexConstraint.Comparison.parse(parser.currentName());
                                value = parser.text();
                            }
                        } else {
                            if (propertyToken != Token.FIELD_NAME) {
                                throw new IllegalArgumentException("unexpected token [" + propertyToken + "]");
                            }
                        }
                    }
                    indexConstraints.add(new IndexConstraint(field, property, comparison, value, optionalFormat));
                } else {
                    throw new IllegalArgumentException("unexpected token [" + fieldToken + "]");
                }
            }
        } else {
            throw new IllegalArgumentException("unexpected token [" + token + "]");
        }
    }
}
Also used : Token(org.elasticsearch.common.xcontent.XContentParser.Token)

Example 10 with Token

use of org.elasticsearch.common.xcontent.XContentParser.Token in project elasticsearch by elastic.

the class FieldStatsRequest method source.

public void source(XContentParser parser) throws IOException {
    List<IndexConstraint> indexConstraints = new ArrayList<>();
    List<String> fields = new ArrayList<>();
    String fieldName = null;
    Token token = parser.nextToken();
    assert token == Token.START_OBJECT;
    for (token = parser.nextToken(); token != Token.END_OBJECT; token = parser.nextToken()) {
        switch(token) {
            case FIELD_NAME:
                fieldName = parser.currentName();
                break;
            case START_OBJECT:
                if ("index_constraints".equals(fieldName)) {
                    parseIndexConstraints(indexConstraints, parser);
                } else {
                    throw new IllegalArgumentException("unknown field [" + fieldName + "]");
                }
                break;
            case START_ARRAY:
                if ("fields".equals(fieldName)) {
                    while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
                        if (token.isValue()) {
                            fields.add(parser.text());
                        } else {
                            throw new IllegalArgumentException("unexpected token [" + token + "]");
                        }
                    }
                } else {
                    throw new IllegalArgumentException("unknown field [" + fieldName + "]");
                }
                break;
            default:
                throw new IllegalArgumentException("unexpected token [" + token + "]");
        }
    }
    this.fields = fields.toArray(new String[fields.size()]);
    this.indexConstraints = indexConstraints.toArray(new IndexConstraint[indexConstraints.size()]);
}
Also used : ArrayList(java.util.ArrayList) Token(org.elasticsearch.common.xcontent.XContentParser.Token)

Aggregations

Token (org.elasticsearch.common.xcontent.XContentParser.Token)22 XContentParser (org.elasticsearch.common.xcontent.XContentParser)10 ParsingException (org.elasticsearch.common.ParsingException)9 ArrayList (java.util.ArrayList)4 ElasticsearchParseException (org.elasticsearch.ElasticsearchParseException)4 GeoPoint (org.elasticsearch.common.geo.GeoPoint)4 HashMap (java.util.HashMap)3 HashSet (java.util.HashSet)3 Map (java.util.Map)2 IOException (java.io.IOException)1 UncheckedIOException (java.io.UncheckedIOException)1 Set (java.util.Set)1 SuggestField (org.apache.lucene.search.suggest.document.SuggestField)1 BytesArray (org.elasticsearch.common.bytes.BytesArray)1 GeoDistance (org.elasticsearch.common.geo.GeoDistance)1 DistanceUnit (org.elasticsearch.common.unit.DistanceUnit)1 XContentBuilder (org.elasticsearch.common.xcontent.XContentBuilder)1 NumberType (org.elasticsearch.common.xcontent.XContentParser.NumberType)1 FieldMapper (org.elasticsearch.index.mapper.FieldMapper)1 GeoPointFieldMapper (org.elasticsearch.index.mapper.GeoPointFieldMapper)1