java的desc算法_Java SortOrder.DESC属性代码示例

protected void applySort(SearchRequestBuilder q) {

for (SortContainer sortContainer : getParameters().getSortContainers()) {

SortOrder esOrder = sortContainer.direction == SortDirection.ASCENDING ? SortOrder.ASC : SortOrder.DESC;

if (Element.ID_PROPERTY_NAME.equals(sortContainer.propertyName)) {

q.addSort("_uid", esOrder);

} else if (Edge.LABEL_PROPERTY_NAME.equals(sortContainer.propertyName)) {

q.addSort(Elasticsearch5SearchIndex.EDGE_LABEL_FIELD_NAME, esOrder);

} else {

PropertyDefinition propertyDefinition = getGraph().getPropertyDefinition(sortContainer.propertyName);

if (propertyDefinition == null) {

continue;

}

if (!getSearchIndex().isPropertyInIndex(getGraph(), sortContainer.propertyName)) {

continue;

}

if (!propertyDefinition.isSortable()) {

throw new MemgraphException("Cannot sort on non-sortable fields");

}

String[] propertyNames = getPropertyNames(propertyDefinition.getPropertyName());

if (propertyNames.length > 1) {

String scriptSrc = "def fieldValues = []; for (def fieldName : params.fieldNames) { fieldValues.addAll(doc[fieldName].values); } " +

"if (params.esOrder == 'asc') { Collections.sort(fieldValues); } else { Collections.sort(fieldValues, Collections.reverseOrder()); }" +

"if (params.dataType == 'String') { return fieldValues; } else { return fieldValues.length > 0 ? fieldValues[0] : (params.esOrder == 'asc' ? Integer.MAX_VALUE : Integer.MIN_VALUE); }";

List fieldNames = Arrays.stream(propertyNames).map(propertyName ->

propertyName + (propertyDefinition.getDataType() == String.class ? Elasticsearch5SearchIndex.EXACT_MATCH_PROPERTY_NAME_SUFFIX : "")

).collect(Collectors.toList());

HashMap scriptParams = new HashMap<>();

scriptParams.put("fieldNames", fieldNames);

scriptParams.put("esOrder", esOrder == SortOrder.DESC ? "desc" : "asc");

scriptParams.put("dataType", propertyDefinition.getDataType().getSimpleName());

Script script = new Script(ScriptType.INLINE, "painless", scriptSrc, scriptParams);

ScriptSortBuilder.ScriptSortType sortType = propertyDefinition.getDataType() == String.class ? ScriptSortBuilder.ScriptSortType.STRING : ScriptSortBuilder.ScriptSortType.NUMBER;

q.addSort(SortBuilders.scriptSort(script, sortType)

.order(esOrder)

.sortMode(esOrder == SortOrder.DESC ? SortMode.MAX : SortMode.MIN));

} else {

String sortField = propertyNames[0];

if (propertyDefinition.getDataType() == String.class) {

sortField += Elasticsearch5SearchIndex.EXACT_MATCH_PROPERTY_NAME_SUFFIX;

}

q.addSort(sortField, esOrder);

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值