说明: 1、filterFunctionBuilders中QueryBuilders.matchPhraseQuery("Title", param.getTitle())意思是不拆分标题进行的查询。 2、shouldQueryBuilder是拼接标题拆分后的词语。 3、FilingHalpUtils.getFilingList(FromateUtil.delHTMLTag(param.getTitle()), 200) 根据自己定义字典拆分的词语的方法。 BoolQueryBuilder shouldQueryBuilder = QueryBuilders.boolQuery();//后拆分成词模糊查询 List<String> hanlpTitle = FilingHalpUtils.getFilingList(FromateUtil.delHTMLTag(param.getTitle()), 200); if (null != hanlpTitle && hanlpTitle.size() > 0) { hanlpTitle.stream().forEach(x -> { MatchPhraseQueryBuilder titleMatchPhraseQuery = QueryBuilders.matchPhraseQuery("Title", x); shouldQueryBuilder.should(titleMatchPhraseQuery); }); } //优先展示整体的,后展示拆分的词 FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders = { new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchPhraseQuery("Title", param.getTitle()), ScoreFunctionBuilders.weightFactorFunction(2)) }; //关键点 FunctionScoreQueryBuilder query = QueryBuilders.functionScoreQuery(shouldQueryBuilder, filterFunctionBuilders) .scoreMode(FunctionScoreQuery.ScoreMode.SUM).boostMode(CombineFunction.MULTIPLY); boolQueryBuilder.must(query);
展示效果