public FeatureResult getFeatures()

in src/main/java/com/aliyun/openservices/paifeaturestore/dao/FeatureViewIgraphDao.java [71:134]


    public FeatureResult getFeatures(String[] keys, String[] selectFields) {
        List<Map<String, Object>> featureDataList = new ArrayList<>();

        List<String> selector = new ArrayList<>(selectFields.length);

        for (String field : selectFields) {
            selector.add(String.format("\"%s\"",  this.reverseFieldMap.get(field)));
        }

        Map<String, Object> bind = new HashMap<>();
        String queryString = null;
        if (this.fieldMap.size() == selectFields.length) {
            queryString = String.format("g(\"%s\").V($1).hasLabel(\"%s\")", this.group, this.label);
            bind.put("$1", StringUtil.join(keys, ";"));
        } else {
            queryString = String.format("g(\"%s\").V($2).hasLabel(\"%s\").fields(%s)", this.group, this.label, StringUtil.join(selector.toArray(new String[0]), ","));
            bind.put("$2", StringUtil.join(keys, ";"));
        }

        ResultSet resultSet = this.client.submit(queryString, bind);
        List<Result> resultList = resultSet.all().join();
        for (Result result : resultList) {
            Map<String, Object> featureMap = new HashMap<>();
            for (String field : selectFields) {
                String igraphField = this.reverseFieldMap.get(field);

                switch (this.fieldTypeMap.get(igraphField)) {
                    case FS_DOUBLE:
                    case FS_FLOAT:
                        Double val = result.getVertex().value(igraphField);
                        if (val == -1024.0) {
                            featureMap.put(field, null);
                        } else {
                            featureMap.put(field, val);
                        }
                        break;
                    case FS_INT32:
                    case FS_INT64:
                        Long lval = result.getVertex().value(igraphField);
                        if (lval == -1024L) {
                            featureMap.put(field, null);
                        } else {
                            featureMap.put(field, lval);
                        }
                        break;
                    default:
                        String str =result.getVertex().value(igraphField);
                        if (StringUtils.isEmpty(str)) {
                            featureMap.put(field, null);
                        } else {
                            featureMap.put(field, str);
                        }
                        break;
                }
            }
            featureDataList.add(featureMap);
        }

        FeatureStoreResult featureResult = new FeatureStoreResult();
        featureResult.setFeatureDataList(featureDataList);
        featureResult.setFeatureFields(selectFields);
        featureResult.setFeatureFieldTypeMap(this.reverseFieldTypeMap);
        return  featureResult;
    }