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
    评论
Java中,Elasticsearch的算分函数可以使用Elastic提供的Java API来调用。Elasticsearch的算分函数是根据相关度评分算法来计算文档的相关度得分。你可以使用以下代码示例来调用Elasticsearch的算分函数: ```java import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; public class ElasticsearchExample { private static final String INDEX_NAME = "your_index_name"; private static final String FIELD_NAME = "your_field_name"; private static final String SEARCH_KEYWORD = "your_search_keyword"; public static void main(String[] args) { // 创建Elasticsearch客户端 RestHighLevelClient client = createElasticsearchClient(); try { // 创建搜索请求 SearchRequest searchRequest = new SearchRequestDEX_NAME); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); // 创建查询构建器 QueryBuilder queryBuilder = QueryBuilders.matchQuery(FIELD_NAME, SEARCH_KEYWORD); // 创建算分函数 FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(queryBuilder, ScoreFunctionBuilders.fieldValueFactorFunction(FIELD_NAME)); // 设置排序方式 searchSourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.DESC)); // 设置高亮显示 HighlightBuilder highlightBuilder = new HighlightBuilder().field(FIELD_NAME); searchSourceBuilder.highlighter(highlightBuilder); // 将算分函数添加到搜索请求中 searchSourceBuilder.query(functionScoreQueryBuilder); searchRequest.source(searchSourceBuilder); // 执行搜索请求 SearchResponse searchResponse = client.search(searchRequest); // 处理搜索结果 SearchHits hits = searchResponse.getHits(); // TODO: 处理搜索结果 } catch (Exception e) { e.printStackTrace(); } finally { // 关闭Elasticsearch客户端 closeElasticsearchClient(client); } } private static RestHighLevelClient createElasticsearchClient() { // 创建Elasticsearch客户端 // TODO: 创建并返回Elasticsearch客户端实例 } private static void closeElasticsearchClient(RestHighLevelClient client) { // 关闭Elasticsearch客户端 // TODO: 关闭Elasticsearch客户端实例 } } ``` 以上示例代码演示了如何使用Java API调用Elasticsearch的算分函数进行搜索。你可以根据自己的需求进行调整和扩展。请确保在使用之前已经正确配置了Elasticsearch客户端。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值