/** *该实例代码包括了自定义评分function_score(用script评分),以及精确匹配(包含script筛选),已经用script排序 */ public List searchByKey(String key) { /** * 自定义评分计算 */ BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder(); // 混合查询 boolQueryBuilder.must(QueryBuilders.multiMatchQuery("飞利浦", "title", "short_title", "goods_description") .minimumShouldMatch("1").type(Type.BEST_FIELDS).tieBreaker(0.3f)); //根据当前价格(有活动价的取活动价,没有活动价取当前价)筛选 Map params = new HashMap(); params.put("lprice", 100.0); params.put("hprice", 200.0); Script script = new Script(ScriptType.INLINE, "painless", "if(doc['goods_price_activity'].size()>0){doc['goods_price_activity'].value>params['lprice'] && doc['goods_price_activity'].valueparams['lprice'] && doc['goods_price_now'].value parameters = new HashMap(); parameters.put("ntime", System.currentTimeMillis()); Script inline = new Script(ScriptType.INLINE, "painless", "doc['begin_time'].size()>0 && doc['end_time'].size()>0 && doc['begin_time'].value.toInstant().toEpochMilli() < params['ntime'] && doc['end_time'].value.toInstant().toEpochMilli() > params['ntime'] ? doc['goods_price_activity'].value:doc['goods_price_now'].value", parameters); ScriptScoreFunctionBuilder scriptFunction = ScoreFunctionBuilders.scriptFunction(inline); // FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[] { // filterFunctionBuilder2 }; FunctionScoreQueryBuilder query = QueryBuilders.functionScoreQuery(boolQueryBuilder, scriptFunction); SearchSourceBuilder builder = new SearchSourceBuilder(); builder.size(10).query(boolQueryBuilder); builder.query(query); builder.sort("_score", SortOrder.DESC); Script script2 = new Script( "doc['goods_price_activity'].size()>0? doc['goods_price_activity'].value:doc['goods_price_now'].value"); ScriptSortBuilder scriptSortBuilder = new ScriptSortBuilder(script2,ScriptSortType.NUMBER); builder.sort(scriptSortBuilder.order(SortOrder.DESC)); return esUtil.search("goods_list", builder, GoodsDto.class); } kibana的rest请求写法: GET goods_list/_search { "query": { "bool": { "must": [ {"multi_match": { "query": "", "type": "best_fields", "fields": ["title","short_title","goods_description"], "tie_breaker": 0.3 } }, { "script": { "script": { "lang":"painless", "source": "if(doc['goods_price_activity'].size()>0){doc['goods_price_activity'].value>params['lprice'] && doc['goods_price_activity'].valueparams['lprice'] && doc['goods_price_now'].value0? doc['goods_price_activity'].value:doc['goods_price_now'].value" }, "type" : "number", "order" : "desc" } } ], "from": 0, "size": 100 } //最接近生产使用的rest调用示例: GET goods_list/_search { "query": { "bool": { "must": [ {"multi_match": { "query": "摩飞冷暖风机", "type": "best_fields", "fields": ["title","short_title","goods_description"], "tie_breaker": 0.3 } }, { "script": { "script": { "lang":"painless", "source": "if(doc['goods_price_activity'].size()>0){doc['goods_price_activity'].value>params['lprice'] && doc['goods_price_activity'].valueparams['lprice'] && doc['goods_price_now'].value