use of com.baidu.hugegraph.driver.HugeClient in project incubator-hugegraph-toolchain by apache.
the class ExecuteHistoryService method list.
public IPage<ExecuteHistory> list(int connId, long current, long pageSize) {
HugeClient client = this.getClient(connId);
QueryWrapper<ExecuteHistory> query = Wrappers.query();
query.eq("conn_id", connId).orderByDesc("create_time");
Page<ExecuteHistory> page = new Page<>(current, pageSize);
IPage<ExecuteHistory> results = this.mapper.selectPage(page, query);
int limit = this.config.get(HubbleOptions.EXECUTE_HISTORY_SHOW_LIMIT);
if (results.getTotal() > limit) {
log.debug("Execute history total records: {}", results.getTotal());
results.setTotal(limit);
}
// Get the status of successful execution of asynchronous tasks
Instant now = HubbleUtil.nowTime();
results.getRecords().forEach((p) -> {
if (p.getType().equals(ExecuteType.GREMLIN_ASYNC)) {
try {
Task task = client.task().get(p.getAsyncId());
long endDate = task.updateTime() > 0 ? task.updateTime() : now.getLong(ChronoField.INSTANT_SECONDS);
p.setDuration(endDate - task.createTime());
p.setAsyncStatus(task.status().toUpperCase());
} catch (Exception e) {
p.setDuration(0L);
p.setAsyncStatus(AsyncTaskStatus.UNKNOWN);
}
}
});
return results;
}
use of com.baidu.hugegraph.driver.HugeClient in project incubator-hugegraph-toolchain by apache.
the class GremlinQueryService method executeQuery.
public GremlinResult executeQuery(int connId, GremlinQuery query) {
HugeClient client = this.getClient(connId);
log.debug("The original gremlin ==> {}", query.getContent());
String gremlin = this.optimize(query.getContent());
log.debug("The optimized gremlin ==> {}", gremlin);
// Execute gremlin query
ResultSet resultSet = this.executeGremlin(gremlin, client);
// Scan data, vote the result type
TypedResult typedResult = this.parseResults(resultSet);
// Build json view
JsonView jsonView = new JsonView(typedResult.getData());
// Build table view
TableView tableView = this.buildTableView(typedResult);
// Build graph view
GraphView graphView = this.buildGraphView(typedResult, client);
return GremlinResult.builder().type(typedResult.getType()).jsonView(jsonView).tableView(tableView).graphView(graphView).build();
}
use of com.baidu.hugegraph.driver.HugeClient in project incubator-hugegraph-toolchain by apache.
the class GremlinQueryService method executeAsyncTask.
public Long executeAsyncTask(int connId, GremlinQuery query) {
HugeClient client = this.getClient(connId);
log.debug("The async gremlin ==> {}", query.getContent());
// Execute optimized gremlin query
GremlinRequest request = new GremlinRequest(query.getContent());
return client.gremlin().executeAsTask(request);
}
use of com.baidu.hugegraph.driver.HugeClient in project incubator-hugegraph-toolchain by apache.
the class PropertyIndexService method list.
public IPage<PropertyIndex> list(int connId, HugeType type, int pageNo, int pageSize) {
HugeClient client = this.client(connId);
List<IndexLabel> indexLabels = client.schema().getIndexLabels();
List<PropertyIndex> results = new ArrayList<>();
for (IndexLabel indexLabel : indexLabels) {
if (!indexLabel.baseType().equals(type)) {
continue;
}
// Collect all indexlabels
results.add(convert(indexLabel));
}
// Sort by owner name a-z, then index name a-z
results.sort((o1, o2) -> {
String owner1 = o1.getOwner();
String owner2 = o2.getOwner();
if (!owner1.equals(owner2)) {
return owner1.compareTo(owner2);
}
return o1.getName().compareTo(o2.getName());
});
return PageUtil.page(results, pageNo, pageSize);
}
use of com.baidu.hugegraph.driver.HugeClient in project incubator-hugegraph-toolchain by apache.
the class PropertyIndexService method list.
/**
* The sort result like that, content is 'name'
* --------------+------------------------+---------------------------------
* base_value | index label name | fields
* --------------+------------------------+---------------------------------
* xxxname | xxxByName | name
* --------------+------------------------+---------------------------------
* | personByName | name
* person +------------------------+---------------------------------
* | personByAgeAndName | age name
* --------------+------------------------+---------------------------------
* | softwareByName | name
* software +------------------------+---------------------------------
* | softwareByPriveAndName | price name
* --------------+------------------------+---------------------------------
*/
public IPage<PropertyIndex> list(int connId, HugeType type, String content, int pageNo, int pageSize) {
HugeClient client = this.client(connId);
List<IndexLabel> indexLabels = client.schema().getIndexLabels();
Map<String, List<PropertyIndex>> matchedResults = new HashMap<>();
Map<String, List<PropertyIndex>> unMatchResults = new HashMap<>();
for (IndexLabel indexLabel : indexLabels) {
if (!indexLabel.baseType().equals(type)) {
continue;
}
String baseValue = indexLabel.baseValue();
List<PropertyIndex> groupedIndexes;
// Collect indexlabels that contains content
boolean match = baseValue.contains(content);
if (match) {
groupedIndexes = matchedResults.computeIfAbsent(baseValue, k -> new ArrayList<>());
} else {
groupedIndexes = unMatchResults.computeIfAbsent(baseValue, k -> new ArrayList<>());
}
match = match || indexLabel.name().contains(content) || indexLabel.indexFields().stream().anyMatch(f -> f.contains(content));
if (match) {
groupedIndexes.add(convert(indexLabel));
}
}
// Sort matched results by relevance
if (!StringUtils.isEmpty(content)) {
for (Map.Entry<String, List<PropertyIndex>> entry : matchedResults.entrySet()) {
List<PropertyIndex> groupedIndexes = entry.getValue();
groupedIndexes.sort(new Comparator<PropertyIndex>() {
final int highScore = 2;
final int lowScore = 1;
@Override
public int compare(PropertyIndex o1, PropertyIndex o2) {
int o1Score = 0;
if (o1.getName().contains(content)) {
o1Score += highScore;
}
if (o1.getFields().stream().anyMatch(field -> field.contains(content))) {
o1Score += lowScore;
}
int o2Score = 0;
if (o2.getName().contains(content)) {
o2Score += highScore;
}
if (o2.getFields().stream().anyMatch(field -> field.contains(content))) {
o2Score += lowScore;
}
return o2Score - o1Score;
}
});
}
}
List<PropertyIndex> all = new ArrayList<>();
matchedResults.values().forEach(all::addAll);
unMatchResults.values().forEach(all::addAll);
return PageUtil.page(all, pageNo, pageSize);
}
Aggregations