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())) {
                // 业务处理
            }
        });
相关推荐
P1Browser13 小时前
账号触发平台安全审核?拆解标准申诉流程与材料清单
大数据·人工智能·安全·多账号管理·指纹浏览器·账户安全·运营合规
云南新人和数采集团19 小时前
云南靠谱软件开发公司选型指南:以昆明新腾科技为例
大数据·人工智能·科技
AllData公司负责人20 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析
Elasticsearch1 天前
过犹不及:为什么搜索结果重排序时,20 个候选结果胜过 200 个
elasticsearch
wno7041 天前
常用的Git命令清单
大数据·git·elasticsearch
YIN_尹2 天前
【git原理与使用】git基本操作及底层原理(二)
大数据·git·elasticsearch
武子康2 天前
H3-World 写了 CPU offload,为什么还不能保证塞进 48GB?
大数据·人工智能·深度学习
演艺大赏2 天前
Doris 数据导出实战:SeaTunnel、EXPORT 与 OUTFILE 性能对比及 9.5 亿行写入故障复盘
大数据
isfox2 天前
MapReduce 作业慢?别乱调参数,先找到瓶颈在哪
大数据
玩美数据2 天前
市场调研数据分析与数据集驱动的行业格局变革深度解析
大数据·人工智能