Spring Boot & Elasticsearch 自定义查询结果排序

269 阅读1分钟

记一下调查查询结果排序的结果,以供今后参考。

首先是参考这篇博客使用 FunctionScoreQuery 实现自定义分值的方案。

queryBuilder.must(
    QueryBuilders.boolQuery()
        .should(QueryBuilders
            .functionScoreQuery(
                QueryBuilders.matchQuery(NovelField.TITLE, parameter.getKeyword()),
                ScoreFunctionBuilders.weightFactorFunction(1000)
            ))
        .should(QueryBuilders
            .functionScoreQuery(
                QueryBuilders.matchQuery(NovelField.AUTHOR, parameter.getKeyword()),
                ScoreFunctionBuilders.weightFactorFunction(500)
            ))
        .should(QueryBuilders
            .functionScoreQuery(
                QueryBuilders.matchQuery(NovelField.BRIEF, parameter.getKeyword()),
                ScoreFunctionBuilders.weightFactorFunction(10)
            ))
        .should(QueryBuilders
            .functionScoreQuery(
                QueryBuilders.matchQuery(NovelField.MAJOR_CHARACTERS, parameter.getKeyword()),
                ScoreFunctionBuilders.weightFactorFunction(100)
            ))
);

第二种是查看之前的笔记,可以通过修改 boost 调整查询权重,示例如下:

queryBuilder.must(
    QueryBuilders.boolQuery()
        .should(QueryBuilders.matchQuery(NovelField.TITLE, parameter.getKeyword()).boost(1000))
        .should(QueryBuilders.matchQuery(NovelField.AUTHOR, parameter.getKeyword()).boost(500))
        .should(QueryBuilders.matchQuery(NovelField.BRIEF, parameter.getKeyword()).boost(10))
        .should(QueryBuilders.matchQuery(NovelField.MAJOR_CHARACTERS, parameter.getKeyword()).boost(100))
);

版权声明:本文为博主「佳佳」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:www.liujiajia.me/2021/7/21/s…