ES 搜索20 (function_score 和 field_value_factor 自定义评分)

2023-10-27

自定义评分

设想有个网站供用户发布博客并且可以让他们为自己喜欢的博客点赞, 我们希望将更受欢迎的博客放在搜索结果列表中相对较上的位置,同时全文搜索的评分仍然作为相关度的主要排序依据,可以简单的通过存储每个博客的点赞数来实现它:

在搜索时,可以将 function_score 查询与 field_value_factor 结合使用, 即将点赞数与全文相关度评分结合:

GET /blogposts/post/_search
{
  "query": {
    "function_score": {           1
      "query": {                  2
        "multi_match": {
          "query":    "popularity",
          "fields": [ "title", "content" ]
        }
      },
      "field_value_factor": {        3
        "field": "votes"             4
      }
    }
  }
}

1

function_score 查询将主查询和函数包括在内。

2

主查询优先执行。

3

field_value_factor 函数会被应用到每个与主 query 匹配的文档。

4

每个文档的 votes 字段都 必须 有值供 function_score 计算。如果 没有 文档的 votes 字段有值,那么就 必须 使用 missing 属性 提供的默认值来进行评分计算。所有查询字段都会和 field 所指定的字段进行评分的计算(乘法)

 

modifier

一种融入受欢迎度更好方式是用 modifier 平滑 votes 的值。 换句话说,我们希望最开始的一些赞更重要,但是其重要性会随着数字的增加而降低。 0 个赞与 1 个赞的区别应该比 10 个赞与 11 个赞的区别大很多。

GET /blogposts/post/_search
{
  "query": {
    "function_score": {
      "query": {
        "multi_match": {
          "query":    "popularity",
          "fields": [ "title", "content" ]
        }
      },
      "field_value_factor": {
        "field":    "votes",
        "modifier": "log1p"            1
      }
    }
  }
}

1

modifier 为 log1p 。

修饰语 modifier 的值可以为: none (默认状态)、 log 、 log1p 、 log2p 、 ln 、 ln1p 、 ln2p、 square 、 sqrt 以及 reciprocal 。想要了解更多信息请参照: field_value_factor 文档.(不做详细介绍)

factor

可以通过将 votes 字段与 factor 的积来调节受欢迎程度效果的高低:

GET /blogposts/post/_search
{
  "query": {
    "function_score": {
      "query": {
        "multi_match": {
          "query":    "popularity",
          "fields": [ "title", "content" ]
        }
      },
      "field_value_factor": {
        "field":    "votes",
        "modifier": "log1p",
        "factor":   2 
      }
    }
  }
}

factor 值大于 1 会提升效果, factor 值小于 1 会降低效果

boost_mode

或许将全文评分与 field_value_factor 函数值乘积的效果仍然可能太大, 我们可以通过参数 boost_mode 来控制函数与查询评分 _score 合并后的结果,参数接受的值为:

multiply

评分 _score 与函数值的积(默认)

sum

评分 _score 与函数值的和

min

评分 _score 与函数值间的较小值

max

评分 _score 与函数值间的较大值

replace

函数值替代评分 _score

与使用乘积的方式相比,使用评分 _score 与函数值求和的方式可以弱化最终效果,特别是使用一个较小 factor 因子时:

GET /blogposts/post/_search
{
  "query": {
    "function_score": {
      "query": {
        "multi_match": {
          "query":    "popularity",
          "fields": [ "title", "content" ]
        }
      },
      "field_value_factor": {
        "field":    "votes",
        "modifier": "log1p",
        "factor":   0.1
      },
      "boost_mode": "sum"         1
    }
  }
}

1

将函数计算结果值累加到评分 _score 。

 

max_boost

最后,可以使用 max_boost 参数限制一个函数的最大效果:

GET /blogposts/post/_search
{
  "query": {
    "function_score": {
      "query": {
        "multi_match": {
          "query":    "popularity",
          "fields": [ "title", "content" ]
        }
      },
      "field_value_factor": {
        "field":    "votes",
        "modifier": "log1p",
        "factor":   0.1
      },
      "boost_mode": "sum",
      "max_boost":  1.5             1
    } 
  }
}

1

无论 field_value_factor 函数的结果如何,最终结果都不会大于 1.5 。

 

max_boost 只对函数的结果进行限制,不会对最终评分 _score 产生直接影响。

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

ES 搜索20 (function_score 和 field_value_factor 自定义评分) 的相关文章

  • elasticsearch6.3.2搭建集群

    搭建3台机器的elasticsearch集群 所需软件 1 jdk8 2 elasticsearch6 3 2 3 elasticsearch head 在安装elasticsearch之前 先安装jdk1 8 在一个文件夹中 解压三个el
  • ElasticSearch系列18:Mapping 设计指南

    点击上方 方才编程 即可关注我 本文导读 ElasticSearch 的 mapping 该如何设计 才能保证检索的高效 想要回答这个问题 就需要全面系统地掌握 mapping 各种参数的含义以及其适用的场景 ps 本文基于ElasticS
  • elasticsearch启动报错

    系统 操作centos7 虚拟机 bin elasticsearch 启动报错 es1 es1 software elasticsearch 6 3 1 bin elasticsearch Exception in thread main
  • springCloud整合Elasticsearch 之 Springboot整合ES

    引入依赖 maven
  • Elasticsearch更新语法

    文章目录 update 语法 示例 数值计算 add列表元素 remove列表元素 add字段 remove字段 delete文档 detect noop upsert更新 新增 scripted upsert doc as upsert
  • 亿流量大考(4):自研ES+HBase+纯内存的高性能毫秒级查询引擎

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 前情回顾 上篇文章 亿流量大考 3 不加机器 如何抗住每天百亿级高并发流量 聊了一下系统架构中 百亿流量级别高并发写入场景下 如何承载这种高并发写入 同时如何在高
  • 基于centos开发的server系统单机部署gp(rpm)

    1 下载安装包 rpm deb或源码 打开greenplum官网https github com greenplum db gpdb releases 下载安装包 或Greenplum Database Greenplum Database
  • elasticsearch 中获得 分词匹配 +(or) 全词模糊匹配 的查询结果(boolQuery)

    Override public Response selectStructuredDataList StructuredDataDTO structuredDataDTO StructuredDataTypeEnum structuredD
  • ES查询不存在的索引,索引未创建导致查询报错

    ES查询不存在的索引 索引未创建导致查询报错 项目中的一个es索引是根据时间建立的 在对其操作时候 因时间原因此索引为创建 查询时候报如下错误 Elasticsearch exception type index not found exc
  • ES命令: “track_total_hits“:true

    搜索type全部数据 GET test movie search 结果 took 2 耗费时间 毫秒 timed out false 是否超时 shards total 5 发送给全部5个分片 successful 5 skipped 0
  • ES设置常规数据字段属性

    index 是否可被搜索 示例如下 PUT es 0001 mappings properties name type keyword index false POST es 0001 doc name James GET es 0001
  • es 搜索推荐:Suggest

    搜索推荐 Suggest 概述 搜索一般都会要求具有 搜索推荐 或者叫 搜索补全 的功能 即在用户输入搜索的过程中 进行自动补全或者纠错 以此来提高搜索文档的匹配精准度 进而提升用户的搜索体验 这就是Suggest 四种Suggester
  • 8、es---深入聚合数据分析

    一 bucket与metric 1 bucket相当于mysql的group by 2 metric 对一个数据分组执行的统计 比如说求平均值 求最大值 求最小值 二 实战 1 例1 查询参数及结果说明 GET tvs sales sear
  • 权衡问题---学习了微服务各大常用组件的一点思考

    1 没有什么技术可以完全通用 只要深度使用一定需要从业务出发对技术进行权衡 从几个例子出发 1 ES的分片机制天生支持分布式 同时也带来了分布式了弊端 排序和算分问题 搜索的场景需要严格的定制化 通过对mapping的修改可以支持算分的调整
  • Elastic Stack简介及es简单操作

    如果你没有听说过 Elastic Stack 那你一定听说过 ELK 实际上 ELK 是三款软件的简称 分别是 Elasticsearch Logstash Kibana 组成 在发展的过程中 又有新成员 Beats 的加入 所以就形成了
  • elasticsearch7.17.3实现按terms传入内容排序,类似mysql中order by filed()的排序方式

    现有一个需求 需要在elasticsearch中实现用terms筛选内容 并且按terms传入的内容顺序排列 类型于mysql中order by filed 的排序方式 具体实现如下 目录 一 需求 二 整体思路 三 es查询语句 四 ja
  • ES使用小结

    ES使用总结 1 查询es全部索 2 根据es索引查询文档 3 查看指定索引mapping文件 4 默认查询总数10000条 5 删除指定索引文档 6 删除所有数据包括索引 7 設置窗口值 8 logstash简单配置 Logstash配置
  • ELK 性能优化实践

    点击上方蓝色 方志朋 选择 设为星标 回复 666 获取独家整理的学习资料 一 背景介绍 近一年内对公司的 ELK 日志系统做过性能优化 也对 SkyWalking 使用的 ES 存储进行过性能优化 在此做一些总结 本篇主要是讲 ES 在
  • 用elasticsearch聚合函数实现distinct查询

    1 等价的sql Sql代码 SELECT DISTINCT field1 field2 FROM test index test type 等价于 Sql代码 SELECT field1 field2 FROM test index te
  • 小白成功搭建Elasticsearch 只需五步(包含配置xpack)

    ElasticSearch 安装成功后 是不需要使用用户名和密码就可以访问的 这也是在配置skywalking的apm过程中 连接es数据库无需设置用户名和密码的原因 启动es也非常的简单 在 bin 目录下运行elasticsearch

随机推荐

  • 《大话数据结构》第六章树

    1 定义 之前我们一直在谈的是一对一的线性结构 可现实中 还有很多一对多的情况需要处理 所以我们需要研究这种一对多的数据结构 树 考虑它的各种特性 来解决我们在编程中碰到的相关问题 树 Tree 是n n 0 个结点的有限集 n 0时称为空
  • R语言中的函数18:readxl::read_excel(), read_xls(),read_xlsx()

    文章目录 read excel read xls 和read xlsx 函数介绍 实例 实例1利用read xls读取文件 实例2指定读取数据的范围range 实例3读取有缺失值的数据 实例4read xls和read xlsx需要对应的文
  • vue nextTick深入理解-vue性能优化、DOM更新时机、事件循环机制

    一 定义 nextTick 事件循环 nextTick的由来 由于VUE的数据驱动视图更新 是异步的 即修改数据的当下 视图不会立刻更新 而是等同一事件循环中的所有数据变化完成之后 再统一进行视图更新 nextTick的触发时机 在同一事件
  • 什么?计算机居然不能精确计算0.1+0.2?

    小云今年大三在一家互联网公司实习 今天下班回到寝室闷闷不乐 小帅见状关心到 怎么了 碰到什么不开心的事了吗 小云叹了口气 今天我写的程序中涉及到小数计算 出了个bug 被测试的人笑了 说我居然0 1 02都不会算 小帅忍不住笑了 0 1 0
  • Java之JVM方法区、永久代、元空间、常量池简介说明

    转自 Java之JVM方法区 永久代 元空间 常量池简介说明 下文笔者讲述jvm中方法区 永久代 元空间 常量池的简介说明 如下所示 JVM内存模型简介 jvm堆是所有线程共享的 主要用来存储对象 堆 年轻代和老年代两块区域 使用NewRa
  • 安时积分法计算soc程序_BMS(电池管理系统)第四课——核心!!!SOC算法开发...

    SOC基本定义 Qmax 电池最大允许充放电容量 可理解为额定容量 SOH Ieff 充放电电流或自放电电流 充电为负 充放电的库伦效率 目前行业算法方案列表如下 其中安时积分 开路电压 人工神经网络 卡尔曼滤波四中方案通用性比较高 重点介
  • 【论文解读-未完成】-A Survey of Transformers-【一篇论文了解整个Transformers王国】

    论文链接 https arxiv org abs 2106 04554 论文时间 202106 论文单位 复旦大学 论文长度 40页 论文目录 A Survey of Transformers Transformers的文献综述 1 INT
  • 自动化测试框架总结

    自动化测试框架流程图 自动化测试框架模块 配置文件读取模块 日志模块 测试数据读取模块 测试执行模块 测试结果更新模块 异常处理模块 屏幕截图模块 自动化框架模块功能说明 配置文件读取模块 模块的主要功能是把测试项目的公共配置读取到脚本里
  • 智能家居_串口通信编程

    模拟串口 我要使用串口开发 那么 安卓系统必须要Root 让我有超级权限 串口就是文件 首先要打开串口文件 我们没有实体开发主板 使用虚拟串口驱动来代替实体开发主板 模拟android主板上的2个串口 模拟 开发板 插入了电脑 电脑就会显示
  • 2020东南大学网络空间安全保研夏令营(预推免)经验

    2020东南大学网安院保研夏令营 预推免 经验 前言 个人情况 本科某双非双一流CS专业 GPA 1 230 国家级省级奖项各有四五项 校级奖项若干 奖学金若干 项目只有一个大创 无论文 东大网安院说来话长 本来是不想报的 然鹅计算机学院的
  • mavne install 报错org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.Invoca...

    maven install 报错 org apache maven surefire util SurefireReflectionException java lang reflect InvocationTargetException
  • java校验文件路径正则表达式_正则表达式判断是否是合法路径

    在页面前端使用一个文本框 输入条件是 c test 在java中File判断是可以通过的 可以创建的 File file new File filePath if file exists file mkdir 说明是一个合法的路径 但是在w
  • 哈师大计算机学院宿舍,新生攻略

    原标题 新生攻略 哈师大所有的 秘密 都在这了 你好 我是哈师大17级的新生 我想全面的了解一下咱们学校 应该去哪了解呀 这你可算是问对人了 听说最近哈尔滨师范大学学生会的官方微信平台出了非常全的新生攻略呢 快关注它们的公众号 hsdxsh
  • Linux系列

    测试代码如下 是一个输出 Tinywan字符串与循环轮数的死循环程序 每输出一行就休眠1秒 原始输出 前台执行该程序运行效果 程序每隔一秒会在终端输出一个字符串 此时如果键入 Ctrl C 程序会收到一个 SIGINT信号 如果不做特殊处理
  • APT 攻击溯源方法

    概述 当今世界正值百年未有之大变局 网络空间成为继陆 海 空 天之后的第五大疆域 安全威胁也随之延伸至网络空间 没有网络安全就没有国家安全 在新时代网络空间安全已经上升至国家安全的高度 高级持续性威胁 Advanced Persistent
  • #PCIE# PCIE基础知识篇(3)

    写在前面 本文章转载自老狼知乎 感谢分享 随着AMD新一代CPU的发布 PCIe 4 0 Gen4 也进入了人们的视线 然而Intel随后宣传PCIe 4 0对消费市场用处不大 AMD则反讽Intel吃不到葡萄说葡萄酸 正在吃瓜群众搬板凳看
  • could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the n

    如果你在创建自定义网络时 docker network create driver bridge my net出现下面的提示 Error response from daemon could not find an available no
  • 【Vue3项目】登录注册--双Token机制

    目录 前言 什么是双Token机制 双Token的实现流程 前言 最近同项目的伙伴告诉我们一个 新词汇 双Token登录机制 emmmmm 确实没了解过 据说是在实现token长期有效的同时 防止token被第三方盗用 提高用户信息的安全性
  • ReactNative系列之十三WebStorm的JSX语法配置及自动补全设置

    1 开发ReactNative常用工具 WebStorm Sublime Atom 2 配置WebStorm的ReactNative语法 a 下载 git clone https github com virtoolswebplayer R
  • ES 搜索20 (function_score 和 field_value_factor 自定义评分)

    自定义评分 设想有个网站供用户发布博客并且可以让他们为自己喜欢的博客点赞 我们希望将更受欢迎的博客放在搜索结果列表中相对较上的位置 同时全文搜索的评分仍然作为相关度的主要排序依据 可以简单的通过存储每个博客的点赞数来实现它 在搜索时 可以将