Elasticsearch 6.1 TransportClient实现多条件重排序搜索查询之FilterFunctionBuilder和FunctionScoreQueryBuilder

2023-11-17

搜索条件:在Index为10000下查找标题包含“IPhone”,优先取“品牌手机”这个分类,销量越高越前,结果随机给用户展示:
JAVA 代码实现片段:

		String searchContent = "IPhone";
        TransportClient client = esClient.getTransportClient();
        String index = "10000";
        SearchRequestBuilder searchBuilder = client.prepareSearch(index);
        //分页
        searchBuilder.setFrom(0).setSize(10);
        //explain为true表示根据数据相关度排序,和关键字匹配最高的排在前面
        searchBuilder.setExplain(true);

        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        // 搜索 title字段包含IPhone的数据
        queryBuilder.must(QueryBuilders.matchQuery("title", searchContent));

        FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[3];

        //过滤条件1:分类为:品牌手机最重要 -- 权重查询Weight
        ScoreFunctionBuilder<WeightBuilder> scoreFunctionBuilder = new WeightBuilder();
        scoreFunctionBuilder.setWeight(2);
        QueryBuilder termQuery = QueryBuilders.termQuery("categoryName", "品牌手机");
        FunctionScoreQueryBuilder.FilterFunctionBuilder category = new FunctionScoreQueryBuilder.FilterFunctionBuilder(termQuery, scoreFunctionBuilder);
        filterFunctionBuilders[0] = category;

        // 过滤条件2:销量越高越排前 --计分查询 FieldValueFactor
        ScoreFunctionBuilder<FieldValueFactorFunctionBuilder> fieldValueScoreFunction = new FieldValueFactorFunctionBuilder("salesVolume");
        ((FieldValueFactorFunctionBuilder) fieldValueScoreFunction).factor(1.2f);
        FunctionScoreQueryBuilder.FilterFunctionBuilder sales = new FunctionScoreQueryBuilder.FilterFunctionBuilder(fieldValueScoreFunction);
        filterFunctionBuilders[1] = sales;

        // 给定每个用户随机展示:  --random_score
        ScoreFunctionBuilder<RandomScoreFunctionBuilder> randomScoreFilter = new RandomScoreFunctionBuilder();
        ((RandomScoreFunctionBuilder) randomScoreFilter).seed(2);
        FunctionScoreQueryBuilder.FilterFunctionBuilder random = new FunctionScoreQueryBuilder.FilterFunctionBuilder(randomScoreFilter);
        filterFunctionBuilders[2] = random;

        // 多条件查询 FunctionScore
        FunctionScoreQueryBuilder query = QueryBuilders.functionScoreQuery(queryBuilder, filterFunctionBuilders)
                .scoreMode(FunctionScoreQuery.ScoreMode.SUM).boostMode(CombineFunction.SUM);
        searchBuilder.setQuery(query);

        SearchResponse response = searchBuilder.execute().actionGet();
        SearchHits hits = response.getHits();
        String searchSource;
        for (SearchHit hit : hits)
        {
            searchSource = hit.getSourceAsString();
            System.out.println(searchSource);
        }
        //        long took = response.getTook().getMillis();
        long total = hits.getTotalHits();
        System.out.println(total);

演示代码地址:GitHub

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch 6.1 TransportClient实现多条件重排序搜索查询之FilterFunctionBuilder和FunctionScoreQueryBuilder 的相关文章

随机推荐

  • SAXParserFactoryImpl cast SAXParserFactory异常

    Caused by java lang ClassCastException com sun org apache xerces internal jaxp SAXParserFactoryImpl cannot be cast to ja
  • web攻击日志分析之新手指

    0x00 前言 现实中可能会经常出现web日志当中出现一些被攻击的迹象 比如针对你的一个站点的URL进行SQL注入测试等等 这时候需要你从日志当中分析到底是个什么情况 如果非常严重的话 可能需要调查取证谁来做的这个事情 攻击流程是什么样子的
  • AlibabaProtect 卸载,不使用其他软件

    背景 发现系统中存在AlibabaProtect服务 停止不掉 文件夹也删除不掉 还占用内存 CPU 在网上也搜了很多其他的步骤 发现不太容易 这是整理的比较简单的 不需要装其他软件 步骤 1 删除注册表 AlibabaProtect搜索之
  • 华为OD机试-最长连续方波信号

    Online C compiler to run C program online include
  • docker-engine安装

    最近一直在使用docker 做一些试验 每个新机器都需要部署docker的环境 环境信息如下 RedHat 7 2 安装 docker官方的安装 docker engine 1 sudo rpm import https sks keyse
  • Webpack5优化之提高代码运行性能(Preload、Network Cache、Core-js、PWA)

    文章目录 一 Preload Prefetch 1 1 为什么 1 2 是什么 1 2 1 共同点 1 2 2 区别 1 2 3 问题 1 2 4 总结 1 3 怎么样 1 3 1 安装依赖 1 3 2 配置 1 3 3 测试 二 Netw
  • python获取微信群消息_python-itchat 统计微信群、好友数量,及原始消息数据的实例...

    coding utf 8 import itchat from itchat content import TEXT from itchat content import import sys import time import re r
  • LeetCode Week 4

    LeetCode Week 4 练腿是最虐的项目 没有之一 问题集合 1 Reverse Words in a String III Easy 557 Given a string you need to reverse the order
  • 如何高效安装MindSpore的GPU版本

    作者 王磊 更多精彩分享 欢迎访问和关注 https www zhihu com people wldandan MindSpore的GPU版本以前的安装指南 只写清楚了安装依赖 但没有明确指出安装具体执行的命令 缺乏实操性 比较依赖开发者
  • 整流七 - 三相PWM整流器—公式推导篇

    此篇文章为了进一步理解三相pwm整流器 前期的四象限产品 以及仿真模型都没有彻底理解三相pwm整流器的数学模型 于是现在开始一步步推到整流器各个环节的数学公式 三相PWM整流器拓扑结构 补充 三相 VSR 中 交流侧电感的设计尤为重要 起到
  • 面积积分_A-level数学:必考题型之积分求面积解题技巧汇总!!!

    对于A level 数学的pure Math考试部分 总有那么一道积分求面积的题 很多同学在做这种题的时候总是觉得即使自己充分调动学过的所有公式都无法做出来 导致失分 那么今天潘老师带大家一起总结一下 1积分的物理意义 我们知道积分其实是微
  • SAR成像系列:【15】合成孔径雷达(SAR)运动补偿

    不同于光学图像 SAR图像的获取的本质是方位信号的累积结果 也就是说是在合成孔径时间内的电磁波照射结果 类似于光学成像中的延时拍照 通常使用手机拍照时 若拍照的手臂出现抖动 那么得到的照片就会变模糊 同样的现象也会出现在SAR图像中 SAR
  • 如何写监听回调(事件完成监听、点击响应监听 )

    转载请注明出处 如何写监听回调 事件完成监听 点击响应监听 Mr Leixiansheng的博客 CSDN博客 主要对监听回调做一个简单说明 监听的作用 某一事件只要出现 就会调用其对应的方法 进行响应操作 方式有2 1 常规方式 和控件设
  • 对虚拟机原有磁盘扩容

    对虚拟机原有磁盘扩容 扩容不会导致数据丢失 1 先关闭虚拟机 手动去虚拟机的硬盘扩容 2 lsblk df h查看磁盘容量 3 fdisk dev sda命令扩展 输入P查看分区的start和end的值 需要先删除要扩容的分区 输入d 选择
  • 转:使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系

    代码页是字符集编码的别名 也有人称 内码表 早期 代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称 当时通用的操作系统都是命令行界面系统 这些操作系统直接使用BIOS供应的VGA功能来显示字符 操作系统的编码支持也就依靠BIOS的编
  • 微信小程序绘制二维码

    一 前言 在日常的小程序项目中 会经常遇到需要动态绘制二维码的需求 使用场景很多 例如绘制在海报上 例如制作票务码 核销码等等 这篇文章是应一位好友的需求而写的 也希望能够给有需要的同学一些帮助 二 实现原理 使用微信小程序的canvas组
  • STM32的低功耗模式

    目前的低功耗设计主要从芯片设计和系统设计两个方面考虑 随着半导体工艺的飞速发展和芯片工作频率的提高 芯片的功耗迅速增加 而功耗增加又将导致芯片发热量的增大和可靠性的下降 因此 功耗已经成为深亚微米集成电路设计中的一个重要考虑因素 为了使产品
  • HTML、CSS制作小米商城网页首页源码解析

    简介 这是我学习前端以来仿写的第一个项目 沿着尚硅谷李立超老师的教学视频学习 在仿写这个项目的过程中即巩固了这两周以来的知识 也增加了一些小经验 主要是老师传授 同时也让自己更加有信心学习下去 相信自己一定会实现自己的小梦想 加油 小米官网
  • [运算放大器系列]二、电压转4 - 20MA电流电路分析

    运算放大器系列 二 电压转4 20MA电流电路分析 1 电路原理图 2 原理分析 1 电路原理图 偶然在网上看到一个4 20MA转换电路原理图如下 2 原理分析 R L R L RL 为负载 分析电流流向如上图箭头所示可以得到 假设Rloo
  • Elasticsearch 6.1 TransportClient实现多条件重排序搜索查询之FilterFunctionBuilder和FunctionScoreQueryBuilder

    搜索条件 在Index为10000下查找标题包含 IPhone 优先取 品牌手机 这个分类 销量越高越前 结果随机给用户展示 JAVA 代码实现片段 String searchContent IPhone TransportClient c