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

目录

一、查询语句

二、Java代码实现


基础介绍:

ES自定义评分机制:function_score查询详解-阿里云开发者社区ES自定义评分机制:function_score查询详解https://developer.aliyun.com/article/1054571

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

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

一、查询语句

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

二、Java代码实现

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

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())) {
                // 业务处理
            }
        });
相关推荐
数字化顾问23 分钟前
(138页PPT)流程体系的建设优化与运营(附下载方式)
大数据·运维·人工智能
织码weavecodes1 小时前
培训平台部署备份与容灾:从三服务交付到可恢复运行
大数据·学习·开源软件
IT大白鼠1 小时前
搜索系列 · 第 06 篇——避坑汇总:经典生产问题
elasticsearch·nosql
天涯明月19932 小时前
世界模型:原理、范式与工程实践
大数据·人工智能·大模型·具身智能·世界模型
梦想画家3 小时前
SQLMesh Python 模型入门(三):前后置语句、蓝图建模与避坑指南
大数据·python·sqlmesh
和裕3 小时前
年度框架直供 vs 零散按需采购:定制纸箱采购成本、交付与服务核心区别全对比
大数据·运维·网络·人工智能·算法
具身AGI5 小时前
ARR还是交付量,物理AI 国产 的三种收入口径
大数据·人工智能
计算机源码社5 小时前
基于大数据技术的城市空气质量时序趋势与站点特征分析系统 面向监测站点的城市空气污染时空异质性分析与可视化系统
大数据·机器学习·数据挖掘·数据分析·毕业设计·课程设计·数据可视化
IT大白鼠5 小时前
搜索系列 · 第 07 篇——调优实战:写入、查询与监控
elasticsearch·nosql
AC赳赳老秦5 小时前
OpenClaw 数据引用规范自动生成:为公开数据构建可信来源标注与标准引用体系
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw