@Test public void testSort() { String scoreScript = "if (doc['type'].value == 3) {" + " return 100;" + "} else {" + " return 1;" + "}"; FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{ new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchAllQuery(), ScoreFunctionBuilders.scriptFunction(new Script(scoreScript))) }; SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); boolQuery.must(QueryBuilders.termQuery("userId", 1)); FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(boolQuery, filterFunctionBuilders); searchSourceBuilder.query(functionScoreQueryBuilder) .sort("_score", SortOrder.DESC) .sort("heat", SortOrder.DESC); SearchRequest searchRequest = new SearchRequest(elasticSearchIndexConfig.getArticleSearchIndexName()); searchRequest.types(EsConstant.DEFAULT_TYPE); searchRequest.source(searchSourceBuilder);
List searchResults = kittyRestHighLevelClient.search(searchRequest, ArticleDocument.class); searchResults.forEach(doc -> { System.out.println(doc.getId() + " " + doc.getType() + " " + doc.getHeat()); }); }
scoreScript 就是控制权重的脚本,也就是一段代码(脚本默认是 groovy),是不是方便的多。 (编辑:应用网_阳江站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|