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;
}