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())) {
                // 业务处理
            }
        });
相关推荐
serve the people2 分钟前
Elasticsearch(1) could you tell me how to use es if i am a beginner
大数据·elasticsearch·jenkins
一个儒雅随和的男子1 小时前
Elasticsearch出现深度分页问题怎么解决?
大数据·elasticsearch·搜索引擎
AI智图坊1 小时前
多件装组合SKU图的批量生产效率分析:从PS手工到AI自动化的工作流改造
大数据·运维·人工智能·gpt·ai作画·自动化·aigc
jerryinwuhan3 小时前
面向产业带与中小企业数字化转型的电商运营人才培养模式
大数据·人工智能
2601_961845424 小时前
高考真题下载|2025高考全科真题网盘分类整理
搜索引擎·中文分词·solr·lucene·sphinx·高考
Fnetlink15 小时前
企业SDWAN供应商
大数据
galaxylove5 小时前
Gartner发布创新洞察:AI SOC智能体加速通信运营商安全运营转型
大数据·人工智能·安全
甩手网软件5 小时前
Shopee2026新规:费率重构与履约收紧下,卖家如何破局?
大数据·人工智能
lizhihai_995 小时前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
ha_lydms6 小时前
AnalyticDB分区、分布键性能优化
android·大数据·分布式·性能优化·分布式计算·分区·analyticdb