栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ElasticSearch 匹配函数

ElasticSearch 匹配函数

wildcardQuery 

GaussDecayFunctionBuilder 高斯函数比对

该配方包含此trade,且国家是140的更靠前,并且包含当前trade的纯度越高越靠前

EsQuery query = new EsQuery();
if(null==size){
    query.setPager(0,10);
}else{
    query.setPager(0,size);
}
query.includes( "id","tradeName","prd","coverImgId","coverImgSrc","ecoStatus","base64Image" );
//原点(origin):该字段最理想的值,这个值可以得到满分(1.0) 最佳只包含一个inci
//偏移量(offset):与原点相差在偏移量之内的值也可以得到满分
//衰减规模(scale):当值超出了原点到偏移量这段范围,它所得的分数就开始进行衰减了,衰减规模决定了这个分数衰减速度的快慢
//衰减值(decay):该字段可以被接受的值(默认为 0.5),相当于一个分界点,具体的效果与衰减的模式有关
double origin = 1, offset = 0, scale = 20,decay = 0.5;


//以 e 为底的指数函数
//1、最优先展示只含有当前成分的BASF Product(一对一)
ExponentialDecayFunctionBuilder functionBuilder = ScoreFunctionBuilders.exponentialDecayFunction("inciCount", origin, scale, offset, decay).setWeight(100l);
// 2、优先展示Released Country = Asia Pacific的BASF Product 在字典表中的id:140
BoolQueryBuilder countryBuilder= QueryBuilders.boolQuery()
            .must(QueryBuilders.termsQuery("inci_ids_arr",tradeMap.get("id")))
            .should(QueryBuilders.matchQuery("releasedCountryId",140).boost(25)); //提高评分
    //联合分数
    FunctionScoreQueryBuilder scoreQueryBuilder = QueryBuilders.functionScoreQuery(countryBuilder,functionBuilder).boostMode(CombineFunction.SUM);
    query.boolQueryBuilder(scoreQueryBuilder);
    query.orderByDesc("_score","hitNum","id");
    //添加用户角色过滤
    EsQueryUtil.addTargetUserAndRole(query);
    EsResult result = elasticsearchService.createSearch(EsIndexConstant.es_basf_product,query,Map.class);
    resultMaps = (List>)result.getData();
    for (Map map : resultMaps) {
        if (tradeMap.get("ecoStatus") != null) {
            map.put("base64Image", tradeMapper.getbase64ImageByEco(Integer.valueOf(tradeMap.get("ecoStatus").toString())));
        }
    }
return resultMaps;

越多匹配排序越靠前:

if (StrUtil.isNotBlank(formulationQuery.getFunctionClaimId()) && !formulationQuery.getFunctionClaimId().equals("0")) {
    List claimIdList = CollUtil.convertToListFromString(formulationQuery.getFunctionClaimId(), ",");
    FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[claimIdList.size() + 1];
    ScoreFunctionBuilder claims = new WeightBuilder();
    TermsQueryBuilder claimsQuery = QueryBuilders.termsQuery("functionClaimIdArray", claimIdList);
    claims.setWeight(32);
    FunctionScoreQueryBuilder.FilterFunctionBuilder claimsBuilder = new FunctionScoreQueryBuilder.FilterFunctionBuilder(claimsQuery, claims);
    filterFunctionBuilders[0] = claimsBuilder;
    for (Integer claimId : claimIdList) {
        ScoreFunctionBuilder scoreFunctionBuilder = new WeightBuilder();
        TermQueryBuilder functionClaimIdArray = QueryBuilders.termQuery("functionClaimIdArray", claimId);
        scoreFunctionBuilder.setWeight(32f);
        FunctionScoreQueryBuilder.FilterFunctionBuilder claim = new FunctionScoreQueryBuilder.FilterFunctionBuilder(functionClaimIdArray, scoreFunctionBuilder);
        filterFunctionBuilders[claimIdList.indexOf(claimId) + 1] = claim;
    }
    boolQueryBuilder.should(QueryBuilders.functionScoreQuery(filterFunctionBuilders).scoreMode(FunctionScoreQuery.ScoreMode.SUM).boostMode(CombineFunction.REPLACE));
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311431.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号