• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Java ObjectMapper类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Java中org.elasticsearch.index.mapper.object.ObjectMapper的典型用法代码示例。如果您正苦于以下问题:Java ObjectMapper类的具体用法?Java ObjectMapper怎么用?Java ObjectMapper使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



ObjectMapper类属于org.elasticsearch.index.mapper.object包,在下文中一共展示了ObjectMapper类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。

示例1: create

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
public Mapper create(String name, ObjectMapper parentMapper, ParseContext context) {
    BuilderContext builderContext = new BuilderContext(context.indexSettings(), context.path());
    try {
        Mapper.Builder<?, ?> innerBuilder = detectInnerMapper(context, name, context.parser());
        if (innerBuilder == null) {
            return null;
        }
        Mapper mapper = innerBuilder.build(builderContext);
        mapper = DocumentParser.parseAndMergeUpdate(mapper, context);
        MappedFieldType mappedFieldType = newArrayFieldType(innerBuilder);
        String fullName = context.path().fullPathAsText(name);
        mappedFieldType.setNames(new MappedFieldType.Names(fullName));
        return new ArrayMapper(
                name,
                mappedFieldType,
                mappedFieldType.clone(),
                context.indexSettings(),
                MultiFields.empty(),
                null,
                mapper);
    } catch (IOException e) {
        throw Throwables.propagate(e);
    }
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:25,代码来源:ArrayMapper.java


示例2: parse

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
@Override
public Mapper.Builder parse(String name, Map<String, Object> node, ParserContext parserContext) throws MapperParsingException {
    Object inner = node.remove(INNER_TYPE);
    if (inner == null) {
        throw new MapperParsingException("property [inner] missing");
    }
    if (!(inner instanceof Map)) {
        throw new MapperParsingException("property [inner] must be a map");
    }
    @SuppressWarnings("unchecked")
    Map<String, Object> innerNode = (Map<String, Object>) inner;
    String typeName = (String)innerNode.get("type");
    if (typeName == null && innerNode.containsKey("properties")) {
        typeName = ObjectMapper.CONTENT_TYPE;
    } else if (CONTENT_TYPE.equalsIgnoreCase(typeName)) {
        throw new MapperParsingException("nested arrays are not supported");
    }

    Mapper.TypeParser innerTypeParser = parserContext.typeParser(typeName);
    Mapper.Builder innerBuilder = innerTypeParser.parse(name, innerNode, parserContext);

    return new Builder(name, innerBuilder);
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:24,代码来源:ArrayMapper.java


示例3: doMerge

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
@Override
protected void doMerge(Mapper mergeWith, boolean updateAllTypes) {
    if (mergeWith instanceof ArrayMapper) {
        innerMapper = innerMapper.merge(((ArrayMapper) mergeWith).innerMapper, updateAllTypes);
    } else {
        innerMapper = innerMapper.merge(mergeWith, updateAllTypes);
    }
    MappedFieldType newArrayFieldType = null;
    if (innerMapper instanceof ObjectMapper) {
        newArrayFieldType = new ObjectArrayFieldType();
    }
    if (innerMapper instanceof FieldMapper) {
        newArrayFieldType = new ArrayFieldType(((FieldMapper) innerMapper).fieldType());
    }
    newArrayFieldType.setNames(this.fieldType.names());
    this.fieldType = newArrayFieldType;
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:18,代码来源:ArrayMapper.java


示例4: registerBuiltInMappers

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
private void registerBuiltInMappers() {
    registerMapper(ByteFieldMapper.CONTENT_TYPE, new ByteFieldMapper.TypeParser());
    registerMapper(ShortFieldMapper.CONTENT_TYPE, new ShortFieldMapper.TypeParser());
    registerMapper(IntegerFieldMapper.CONTENT_TYPE, new IntegerFieldMapper.TypeParser());
    registerMapper(LongFieldMapper.CONTENT_TYPE, new LongFieldMapper.TypeParser());
    registerMapper(FloatFieldMapper.CONTENT_TYPE, new FloatFieldMapper.TypeParser());
    registerMapper(DoubleFieldMapper.CONTENT_TYPE, new DoubleFieldMapper.TypeParser());
    registerMapper(BooleanFieldMapper.CONTENT_TYPE, new BooleanFieldMapper.TypeParser());
    registerMapper(BinaryFieldMapper.CONTENT_TYPE, new BinaryFieldMapper.TypeParser());
    registerMapper(DateFieldMapper.CONTENT_TYPE, new DateFieldMapper.TypeParser());
    registerMapper(IpFieldMapper.CONTENT_TYPE, new IpFieldMapper.TypeParser());
    registerMapper(StringFieldMapper.CONTENT_TYPE, new StringFieldMapper.TypeParser());
    registerMapper(TokenCountFieldMapper.CONTENT_TYPE, new TokenCountFieldMapper.TypeParser());
    registerMapper(ObjectMapper.CONTENT_TYPE, new ObjectMapper.TypeParser());
    registerMapper(ObjectMapper.NESTED_CONTENT_TYPE, new ObjectMapper.TypeParser());
    registerMapper(TypeParsers.MULTI_FIELD_CONTENT_TYPE, TypeParsers.multiFieldConverterTypeParser);
    registerMapper(CompletionFieldMapper.CONTENT_TYPE, new CompletionFieldMapper.TypeParser());
    registerMapper(GeoPointFieldMapper.CONTENT_TYPE, new GeoPointFieldMapper.TypeParser());

    if (ShapesAvailability.JTS_AVAILABLE) {
        registerMapper(GeoShapeFieldMapper.CONTENT_TYPE, new GeoShapeFieldMapper.TypeParser());
    }
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:24,代码来源:IndicesModule.java


示例5: createInternal

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
@Override
public Aggregator createInternal(AggregationContext context, Aggregator parent, boolean collectsFromSingleBucket,
        List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData) throws IOException {
    // Early validation
    NestedAggregator closestNestedAggregator = findClosestNestedAggregator(parent);
    if (closestNestedAggregator == null) {
        throw new SearchParseException(context.searchContext(), "Reverse nested aggregation [" + name
                + "] can only be used inside a [nested] aggregation", null);
    }

    final ObjectMapper objectMapper;
    if (path != null) {
        objectMapper = context.searchContext().getObjectMapper(path);
        if (objectMapper == null) {
            return new Unmapped(name, context, parent, pipelineAggregators, metaData);
        }
        if (!objectMapper.nested().isNested()) {
            throw new AggregationExecutionException("[reverse_nested] nested path [" + path + "] is not nested");
        }
    } else {
        objectMapper = null;
    }
    return new ReverseNestedAggregator(name, factories, objectMapper, context, parent, pipelineAggregators, metaData);
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:25,代码来源:ReverseNestedAggregator.java


示例6: parseNested

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
private InnerHitsContext.NestedInnerHits parseNested(XContentParser parser, QueryParseContext parseContext, SearchContext searchContext, String nestedPath) throws Exception {
    ObjectMapper objectMapper = searchContext.getObjectMapper(nestedPath);
    if (objectMapper == null) {
        throw new IllegalArgumentException("path [" + nestedPath +"] doesn't exist");
    }
    if (objectMapper.nested().isNested() == false) {
        throw new IllegalArgumentException("path [" + nestedPath +"] isn't nested");
    }
    ObjectMapper parentObjectMapper = parseContext.nestedScope().nextLevel(objectMapper);
    ParseResult parseResult = parseSubSearchContext(searchContext, parseContext, parser);
    parseContext.nestedScope().previousLevel();

    return new InnerHitsContext.NestedInnerHits(parseResult.context(), parseResult.query(), parseResult.childInnerHits(), parentObjectMapper, objectMapper);
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:15,代码来源:InnerHitsParseElement.java


示例7: setPathLevel

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
private void setPathLevel() {
    ObjectMapper objectMapper = parseContext.nestedScope().getObjectMapper();
    if (objectMapper == null) {
        parentFilter = parseContext.bitsetFilter(Queries.newNonNestedFilter());
    } else {
        parentFilter = parseContext.bitsetFilter(objectMapper.nestedTypeFilter());
    }
    childFilter = nestedObjectMapper.nestedTypeFilter();
    parentObjectMapper = parseContext.nestedScope().nextLevel(nestedObjectMapper);
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:11,代码来源:NestedInnerQueryParseSupport.java


示例8: checkObjectsCompatibility

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
private void checkObjectsCompatibility(String type, Collection<ObjectMapper> objectMappers, Collection<FieldMapper> fieldMappers, boolean updateAllTypes) {
    assert Thread.holdsLock(this);

    for (ObjectMapper newObjectMapper : objectMappers) {
        ObjectMapper existingObjectMapper = fullPathObjectMappers.get(newObjectMapper.fullPath());
        if (existingObjectMapper != null) {
            // simulate a merge and ignore the result, we are just interested
            // in exceptions here
            existingObjectMapper.merge(newObjectMapper, updateAllTypes);
        }
    }
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:13,代码来源:MapperService.java


示例9: checkNestedFieldsLimit

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
private void checkNestedFieldsLimit(Map<String, ObjectMapper> fullPathObjectMappers) {
    long allowedNestedFields = indexSettingsService.getSettings().getAsLong(INDEX_MAPPING_NESTED_FIELDS_LIMIT_SETTING, 50L);
    long actualNestedFields = 0;
    for (ObjectMapper objectMapper : fullPathObjectMappers.values()) {
        if (objectMapper.nested().isNested()) {
            actualNestedFields++;
        }
    }
    if (allowedNestedFields >= 0 && actualNestedFields > allowedNestedFields) {
        throw new IllegalArgumentException("Limit of nested fields [" + allowedNestedFields + "] in index [" + index().name() + "] has been exceeded");
    }
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:13,代码来源:MapperService.java


示例10: resolveClosestNestedObjectMapper

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
/**
 * Resolves the closest inherited {@link ObjectMapper} that is nested.
 */
public ObjectMapper resolveClosestNestedObjectMapper(String fieldName) {
    int indexOf = fieldName.lastIndexOf('.');
    if (indexOf == -1) {
        return null;
    } else {
        do {
            String objectPath = fieldName.substring(0, indexOf);
            ObjectMapper objectMapper = fullPathObjectMappers.get(objectPath);
            if (objectMapper == null) {
                indexOf = objectPath.lastIndexOf('.');
                continue;
            }

            if (objectMapper.nested().isNested()) {
                return objectMapper;
            }

            indexOf = objectPath.lastIndexOf('.');
        } while (indexOf != -1);
    }

    return null;
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:27,代码来源:MapperService.java


示例11: findNestedObjectMapper

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
/**
 * Returns the best nested {@link ObjectMapper} instances that is in the scope of the specified nested docId.
 */
public ObjectMapper findNestedObjectMapper(int nestedDocId, SearchContext sc, LeafReaderContext context) throws IOException {
    ObjectMapper nestedObjectMapper = null;
    for (ObjectMapper objectMapper : objectMappers().values()) {
        if (!objectMapper.nested().isNested()) {
            continue;
        }

        Query filter = objectMapper.nestedTypeFilter();
        if (filter == null) {
            continue;
        }
        // We can pass down 'null' as acceptedDocs, because nestedDocId is a doc to be fetched and
        // therefor is guaranteed to be a live doc.
        final Weight nestedWeight = filter.createWeight(sc.searcher(), false);
        Scorer scorer = nestedWeight.scorer(context);
        if (scorer == null) {
            continue;
        }

        if (scorer.iterator().advance(nestedDocId) == nestedDocId) {
            if (nestedObjectMapper == null) {
                nestedObjectMapper = objectMapper;
            } else {
                if (nestedObjectMapper.fullPath().length() < objectMapper.fullPath().length()) {
                    nestedObjectMapper = objectMapper;
                }
            }
        }
    }
    return nestedObjectMapper;
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:35,代码来源:DocumentMapper.java


示例12: parseNonDynamicArray

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
private static ObjectMapper parseNonDynamicArray(ParseContext context, ObjectMapper mapper, String lastFieldName, String arrayFieldName) throws IOException {
    XContentParser parser = context.parser();
    XContentParser.Token token;
    while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
        if (token == XContentParser.Token.START_OBJECT) {
            return parseObject(context, mapper, lastFieldName);
        } else if (token == XContentParser.Token.START_ARRAY) {
            return parseArray(context, mapper, lastFieldName);
        } else if (token == XContentParser.Token.FIELD_NAME) {
            lastFieldName = parser.currentName();
        } else if (token == XContentParser.Token.VALUE_NULL) {
            parseNullValue(context, mapper, lastFieldName);
        } else if (token == null) {
            throw new MapperParsingException("object mapping for [" + mapper.name() + "] with array for [" + arrayFieldName + "] tried to parse as array, but got EOF, is there a mismatch in types for the same field?");
        } else {
            return parseValue(context, mapper, lastFieldName, token);
        }
    }
    return null;
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:21,代码来源:DocumentParser.java


示例13: configureRootObjectBuilder

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
@Override
protected void configureRootObjectBuilder(RootObjectMapper.Builder builder) {
    builder
            .add(new DateFieldMapper.Builder("dateTime"))
            .add(new FloatFieldMapper.Builder("temperature"))
            .add(new FloatFieldMapper.Builder("windSpeed"))
            .add(new FloatFieldMapper.Builder("stationPressure"))
            .add(new StringFieldMapper.Builder("skyCondition"))
            .add(new ObjectMapper.Builder("station")
                    .add(new StringFieldMapper.Builder("wban"))
                    .add(new StringFieldMapper.Builder("name"))
                    .add(new StringFieldMapper.Builder("state"))
                    .add(new StringFieldMapper.Builder("location"))
                    .add(new GeoPointFieldMapper.Builder("coordinates")
                            .enableLatLon(true)
                            .enableGeoHash(false))
                    .nested(ObjectMapper.Nested.newNested(true, false)));
}
 
开发者ID:bytefish,项目名称:ElasticUtils,代码行数:19,代码来源:LocalWeatherDataMapper.java


示例14: registerBuiltInMappers

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
private static Map<String, Mapper.TypeParser> registerBuiltInMappers() {
    Map<String, Mapper.TypeParser> mapperParsers = new LinkedHashMap<>();
    mapperParsers.put(ByteFieldMapper.CONTENT_TYPE, new ByteFieldMapper.TypeParser());
    mapperParsers.put(ShortFieldMapper.CONTENT_TYPE, new ShortFieldMapper.TypeParser());
    mapperParsers.put(IntegerFieldMapper.CONTENT_TYPE, new IntegerFieldMapper.TypeParser());
    mapperParsers.put(LongFieldMapper.CONTENT_TYPE, new LongFieldMapper.TypeParser());
    mapperParsers.put(FloatFieldMapper.CONTENT_TYPE, new FloatFieldMapper.TypeParser());
    mapperParsers.put(DoubleFieldMapper.CONTENT_TYPE, new DoubleFieldMapper.TypeParser());
    mapperParsers.put(BooleanFieldMapper.CONTENT_TYPE, new BooleanFieldMapper.TypeParser());
    mapperParsers.put(BinaryFieldMapper.CONTENT_TYPE, new BinaryFieldMapper.TypeParser());
    mapperParsers.put(DateFieldMapper.CONTENT_TYPE, new DateFieldMapper.TypeParser());
    mapperParsers.put(IpFieldMapper.CONTENT_TYPE, new IpFieldMapper.TypeParser());
    mapperParsers.put(StringFieldMapper.CONTENT_TYPE, new StringFieldMapper.TypeParser());
    mapperParsers.put(TokenCountFieldMapper.CONTENT_TYPE, new TokenCountFieldMapper.TypeParser());
    mapperParsers.put(ObjectMapper.CONTENT_TYPE, new ObjectMapper.TypeParser());
    mapperParsers.put(ObjectMapper.NESTED_CONTENT_TYPE, new ObjectMapper.TypeParser());
    mapperParsers.put(TypeParsers.MULTI_FIELD_CONTENT_TYPE, TypeParsers.multiFieldConverterTypeParser);
    mapperParsers.put(CompletionFieldMapper.CONTENT_TYPE, new CompletionFieldMapper.TypeParser());
    mapperParsers.put(GeoPointFieldMapper.CONTENT_TYPE, new GeoPointFieldMapper.TypeParser());
    return mapperParsers;
}
 
开发者ID:jprante,项目名称:elasticsearch-analysis-phonetic-eudex,代码行数:22,代码来源:MapperTestUtils.java


示例15: configure

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
@Override
protected void configure(RootObjectMapper.Builder builder) {
    builder
            .add(new DateFieldMapper.Builder("dateTime"))
            .add(new FloatFieldMapper.Builder("temperature"))
            .add(new FloatFieldMapper.Builder("windSpeed"))
            .add(new FloatFieldMapper.Builder("stationPressure"))
            .add(new StringFieldMapper.Builder("skyCondition"))
            .add(new ObjectMapper.Builder("station")
                    .add(new StringFieldMapper.Builder("wban"))
                    .add(new StringFieldMapper.Builder("name"))
                    .add(new StringFieldMapper.Builder("state"))
                    .add(new StringFieldMapper.Builder("location"))
                    .add(new GeoPointFieldMapper.Builder("coordinates")
                            .enableLatLon(true)
                            .enableGeoHash(false))
                    .nested(ObjectMapper.Nested.newNested(true, false)));
}
 
开发者ID:bytefish,项目名称:JavaElasticSearchExperiment,代码行数:19,代码来源:LocalWeatherDataMapper.java


示例16: get

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
@Override
public Object get(final Object key)
{
    if (key == null) return null;
    
    try
    {
        String path = _mapper.fullPath() + "." + (String)key;
        ObjectMapper obj = mapper().objectMappers().get(path);
        if (obj != null)
        {
            return new FieldParametersWrapper(this, obj);
        }
        else
        {
            return super.get(key);            
        }
    }
    catch (RuntimeException ex)
    {
        throw ex;
    }
}
 
开发者ID:SkillPages,项目名称:elasticsearch-computed-fields,代码行数:24,代码来源:FieldParametersWrapper.java


示例17: newArrayFieldType

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
private static MappedFieldType newArrayFieldType(Mapper.Builder innerBuilder) {
    if (innerBuilder instanceof FieldMapper.Builder) {
        return new ArrayFieldType(((FieldMapper.Builder) innerBuilder).fieldType());
    }
    if (innerBuilder instanceof ObjectMapper.Builder) {
        return new ObjectArrayFieldType();
    }
    throw new IllegalArgumentException("expected a FieldMapper.Builder or ObjectMapper.Builder");
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:10,代码来源:ArrayMapper.java


示例18: ReverseNestedAggregator

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
public ReverseNestedAggregator(String name, AggregatorFactories factories, ObjectMapper objectMapper,
        AggregationContext aggregationContext, Aggregator parent, List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData)
        throws IOException {
    super(name, factories, aggregationContext, parent, pipelineAggregators, metaData);
    if (objectMapper == null) {
        parentFilter = Queries.newNonNestedFilter();
    } else {
        parentFilter = objectMapper.nestedTypeFilter();
    }
    parentBitsetProducer = context.searchContext().bitsetFilterCache().getBitSetProducer(parentFilter);
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:12,代码来源:ReverseNestedAggregator.java


示例19: createInternal

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
@Override
public Aggregator createInternal(AggregationContext context, Aggregator parent, boolean collectsFromSingleBucket,
        List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData) throws IOException {
    if (collectsFromSingleBucket == false) {
        return asMultiBucketAggregator(this, context, parent);
    }
    ObjectMapper objectMapper = context.searchContext().getObjectMapper(path);
    if (objectMapper == null) {
        return new Unmapped(name, context, parent, pipelineAggregators, metaData);
    }
    if (!objectMapper.nested().isNested()) {
        throw new AggregationExecutionException("[nested] nested path [" + path + "] is not nested");
    }
    return new NestedAggregator(name, factories, objectMapper, context, parent, pipelineAggregators, metaData);
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:16,代码来源:NestedAggregator.java


示例20: findParentObjectMapper

import org.elasticsearch.index.mapper.object.ObjectMapper; //导入依赖的package包/类
/**
 * Returns the parent {@link ObjectMapper} instance of the specified object mapper or <code>null</code> if there
 * isn't any.
 */
// TODO: We should add: ObjectMapper#getParentObjectMapper()
public ObjectMapper findParentObjectMapper(ObjectMapper objectMapper) {
    int indexOfLastDot = objectMapper.fullPath().lastIndexOf('.');
    if (indexOfLastDot != -1) {
        String parentNestObjectPath = objectMapper.fullPath().substring(0, indexOfLastDot);
        return objectMappers().get(parentNestObjectPath);
    } else {
        return null;
    }
}
 
开发者ID:baidu,项目名称:Elasticsearch,代码行数:15,代码来源:DocumentMapper.java



注:本文中的org.elasticsearch.index.mapper.object.ObjectMapper类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Java EventSourcingHandler类代码示例发布时间:2022-05-22
下一篇:
Java SSTableDeletingTask类代码示例发布时间:2022-05-22
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap