欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Elasticsearch-关键词随机查询(8.x)

Elasticsearch-关键词随机查询(8.x)

2024/10/25 20:26:54 来源:https://blog.csdn.net/W_Meng_H/article/details/141283754  浏览:    关键词:Elasticsearch-关键词随机查询(8.x)

目录

一、查询语句

二、Java代码实现


基础介绍:

ES自定义评分机制:function_score查询详解-阿里云开发者社区ES自定义评分机制:function_score查询详解icon-default.png?t=N7T8https://developer.aliyun.com/article/1054571

开发版本详见:Elasticsearch-经纬度查询(8.x-半径查询)_es经纬度范围查询-CSDN博客

本案例只展示随机查询,具体查询权重需根据自身业务修改

一、查询语句

GET /article-test-read/_search
{"query": {"function_score": {"query": {"match_phrase": {"content": "长沙"}},"functions": [{"random_score": {"field": "_seq_no","seed": 100}}],"score_mode": "multiply"  // 将随机分数与其他查询分数相乘}}
}

二、Java代码实现

具体查询对象,可自行定义,本方法只提供思路,莫直接粘贴使用

        // 封装ES查询参数BoolQuery.Builder boolQueryBuilder = new BoolQuery.Builder();// 封装ES查询参数List<Query> shouldList = new ArrayList<>();// 笔记关键词查询Query byIkTitle = MatchQuery.of(match -> match.field("title").query(request.getSearch()).boost(2.0f))._toQuery();shouldList.add(byIkTitle);Query byIkContent = MatchQuery.of(match -> match.field("content").query(request.getSearch()))._toQuery();shouldList.add(byIkContent);boolQueryBuilder.should(shouldList).minimumShouldMatch("1");// 随机查询long randomValue = RandomUtil.randomLong(665359, 159265359);FunctionScoreQuery functionScoreQuery = FunctionScoreQuery.of(f -> f.query(q -> q.bool(boolQueryBuilder.build())).functions(fn -> fn.randomScore(r -> r.field("_seq_no").seed(String.valueOf(randomValue)))).scoreMode(FunctionScoreMode.Multiply).boostMode(FunctionBoostMode.Multiply));SearchRequest.Builder searchRequestBuilder = new SearchRequest.Builder();searchRequestBuilder.index(esIndexProperties.getNoteIndexRead()).query(query -> query.functionScore(functionScoreQuery)).size(request.getSize());// ES查询SearchRequest searchRequest = searchRequestBuilder.build();log.info("notePageSearch query:{}", searchRequest.toString());SearchResponse<NoteIndex> searchResponse = esUtil.queryDocument(searchRequest, NoteIndex.class);searchResponse.hits().hits().forEach(hit -> {if (Objects.nonNull(hit.source())) {// 业务处理}});

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com