ES 搜索21 (function_score查询 关键字 functions 和 weight 滤集提升权重分)

2023-11-14

过滤集提升权重 

回到 忽略 TF/IDF 里处理过的问题,我们希望根据每个度假屋的特性数量来评分, 当时我们希望能用缓存的过滤器来影响评分,现在 function_score 查询正好可以完成这件事情。

到目前为止,我们展现的都是为所有文档应用单个函数的使用方式,现在会用过滤器将结果划分为多个子集(每个特性一个过滤器),并为每个子集使用不同的函数。

functions是一个数组,裡面放著的是将要被使用的加强函数列表,我们在裡面使用了3个filter去过滤数据,并且每个filter都设置了一个加强函数,并且还使用了一个会应用到所有文档的field_value_factor加强函数

可以为列表裡的每个加强函数都指定一个filter,这样做的话,只有在文档满足此filter的要求,此filter的加强函数才会应用到文挡上,也可以不指定filter,这样的话此加强函数就会应用到全部的文挡上

一个文档可以一次满足多条加强函数和多个filter,如果一次满足多个,那麽就会产生多个加强score

因此ES会先使用score_mode定义的方式来合併这些加强score们,得到一个总加强score,得到总加强score之后,才会再使用boost_mode定义的方式去和old_score做合併
 

GET 127.0.0.1/mytest/doc/_search
{
    "query": {
        "function_score": {
            "query": {
                "match_all": {}  //match_all查出来的所有文档的_score都是1
            },
            "functions": [
                //第一个filter(使用weight加强函数),如果language是java,加强score就是2
                {
                    "filter": {
                        "term": {
                            "language": "java"
                        }
                    },
                    "weight": 2
                },
                //第二个filter(使用weight加强函数),如果language是go,加强score就是3
                {
                    "filter": {
                        "term": {
                            "language": "go"
                        }
                    },
                    "weight": 3
                },
                //第三个filter(使用weight加强函数),如果like数大于等于10,加强score就是5
                {
                    "filter": {
                        "range": {
                            "like": {
                                "gte": 10
                            }
                        }
                    },
                    "weight": 5
                },
                //field_value_factor加强函数,会应用到所有文档上,加强score就是like值
                {
                    "field_value_factor": {
                        "field": "like"
                    }
                }
            ],
            "score_mode": "multiply", //设置functions裡面的加强score们怎麽合併成一个总加强score
            "boost_mode": "multiply" //设置old_score怎麽和总加强score合併
        }
    }
}

过滤 vs. 查询

首先要注意的是 filter 过滤器代替了 query 查询, 在本例中,我们无须使用全文搜索,只想找到 city 字段中包含 Barcelona 的所有文档,逻辑用过滤比用查询表达更清晰。过滤器返回的所有文档的评分 _score 的值为 1 。 function_score 查询接受 query 或 filter ,如果没有特别指定,则默认使用 match_all 查询。

评分模式 score_mode

每个函数返回一个结果,所以需要一种将多个结果缩减到单个值的方式,然后才能将其与原始评分 _score 合并。评分模式 score_mode 参数正好扮演这样的角色, 它接受以下值:

multiply

函数结果求积(默认)。

sum

函数结果求和。

avg

函数结果的平均值。

max

函数结果的最大值。

min

函数结果的最小值。

first

使用首个函数(可以有过滤器,也可能没有)的结果作为最终结果

在本例中,我们将每个过滤器匹配结果的权重 weight 求和,并将其作为最终评分结果,所以会使用 sum 评分模式。

不与任何过滤器匹配的文档会保有其原始评分, _score 值的为 1 。

 

其实weight加强函数也是可以不和filter搭配,自己单独使用的,只是这样做没啥意义,因为只是会给全部的文档都增加一个固定值而已

  • 不过就DSL语法上来说,他也像其他加强函数一样,是可以直接使用而不用加filte

GET 127.0.0.1/mytest/doc/_search
{
    "query": {
        "function_score": {
            "query": {
                "match_all": {}
            }
        },
        functions: [
            {
                "weight": 3
            }
        ]
    }
}

 

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

ES 搜索21 (function_score查询 关键字 functions 和 weight 滤集提升权重分) 的相关文章

  • es or查询

    跨索引查询 SearchRequest request new SearchRequest index1 index2 想实现类似于 select from table where a 1 and b 1 or startTime gt 2
  • ElasticSearch系列18:Mapping 设计指南

    点击上方 方才编程 即可关注我 本文导读 ElasticSearch 的 mapping 该如何设计 才能保证检索的高效 想要回答这个问题 就需要全面系统地掌握 mapping 各种参数的含义以及其适用的场景 ps 本文基于ElasticS
  • ES性能优化原理揭秘!初看一脸懵逼,看懂直接跪下。。。

    目录 1 一道面试题的引入 2 性能优化的杀手锏 Filesystem Cache 3 数据预热 4 冷热分离 5 ElasticSearch 中的关联查询 6 Document 模型设计 7 分页性能优化 1 一道面试题的引入 如果面试的
  • ElasticSearch讲解——基础概念

    一 什么是ElasticSearch ElasticSearch以下简称为ES ES是一款基于Lucene的搜索服务器 它提供了一个分布式多用户能力的全文搜索引擎 并且基于RESTful web接口对外提供检索服务能力 Elasticsea
  • 亿流量大考(4):自研ES+HBase+纯内存的高性能毫秒级查询引擎

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 前情回顾 上篇文章 亿流量大考 3 不加机器 如何抗住每天百亿级高并发流量 聊了一下系统架构中 百亿流量级别高并发写入场景下 如何承载这种高并发写入 同时如何在高
  • ES的嵌套查询和嵌套聚合

    1 想要实现嵌套查询和嵌套聚合 首先需要在索引里面设置某个属性是嵌套类型 一般是List type nested 2 API的demo 嵌套查询 使用场景 需要根据list中的两个字段以and的关系进行查询 构造布尔查询 BoolQuery
  • 【elasticsearch】elasticsearch节点异常崩溃问题处理

    一 前言 今天对es集群做扩容节点操作 新增了一台节点 启动节点后 没过15分钟 监控报警节点es服务端口异常 第一次看日志并没有发现太明显的错误 于是并没有做操作 直接将该节点重新启动 结果不到10分钟时间 节点又崩溃了 看来得排查下问题
  • 解决ES6.6.0开启锁定内存后不能重新,报错“memory locking requested for elasticsearch process but memory is not locked”

    错误原因就是我们在配置文件里开启了 bootstrap memory lock true 不需要次需求的话 改成false就好 如果需要开启 按照下面来 亲测可行 root localhost 234 grep Ev etc elastic
  • ES查询不存在的索引,索引未创建导致查询报错

    ES查询不存在的索引 索引未创建导致查询报错 项目中的一个es索引是根据时间建立的 在对其操作时候 因时间原因此索引为创建 查询时候报如下错误 Elasticsearch exception type index not found exc
  • ES 搜索22 (function_score 支持的衰减函数 linear、exp 和 gauss)

    衰减函数 很多变量都可以影响用户对于酒店的选择 像是用户可能希望酒店离市中心近一点 但是如果价格足够便宜 也愿意为了省钱 妥协选择一个更远的住处 如果我们只是使用一个 filter 排除所有市中心方圆 100 米以外的酒店 再用一个filt
  • 【拆盲盒啦】摸鱼时间到! iPhone 12、AirPods Pro、罗技鼠标等你拆~

    喜迎开学季 C 站开豪礼 最高可开 iphone 12 盲盒开出的不只是一份礼物 更是对于一切美好的期待 拆开一个盲盒 就像开始一场未知的爱丽丝梦游仙境 为 两点一线 朝九晚九 的生活 埋下一刻期待的种子 去收获一份未知的惊喜 这次 价格再
  • 剖析ElasticSearch的评分计算过程

    剖析elasticsearch的评分计算过程 es搜索结果是怎样的排序的 准备测试数据 搜索 剖析参数含义 结论 es搜索结果是怎样的排序的 es的排序准则的相关度 根据搜索 关键词 计算关键词在一个文档中的得分 得分越高结果越靠前 那么计
  • ES设置常规数据字段属性

    index 是否可被搜索 示例如下 PUT es 0001 mappings properties name type keyword index false POST es 0001 doc name James GET es 0001
  • ES学习——介绍

    前言 在了解Elasticsearch之前 我们应该先了解下 什么是搜索引擎 目前有哪些主流的搜索引擎 搜索引擎搜索的质量应该如何评价 简介 什么是ES es全称为Elasticsearch 是一个高度可扩展且开源的全文检索和分析引擎 它可
  • ES 搜索7 (多词查询)

    多词查询 如果我们一次只能搜索一个词 那么全文搜索就会不太灵活 幸运的是 match 查询让多词查询变得简单 GET my index my type search query match title BROWN DOG 上面这个查询返回所
  • Function Score 多个function java写法

    背景 我们在使用 ES 查询的时候 除了 bool 查询 还会经常用到 function score 查询 简单来说 function score 就是对打分结果进行算法重排 鉴于网上基本上都是DSL写法 我找了好久没有找到JAVA应该怎么
  • ELK 性能优化实践

    点击上方蓝色 方志朋 选择 设为星标 回复 666 获取独家整理的学习资料 一 背景介绍 近一年内对公司的 ELK 日志系统做过性能优化 也对 SkyWalking 使用的 ES 存储进行过性能优化 在此做一些总结 本篇主要是讲 ES 在
  • ES 搜索3 (查找多个精确值)

    查找多个精确值 term 查询对于查找单个值非常有用 但通常我们可能想搜索多个值 如果我们想要查找价格字段值为 20 或 30 的文档该如何处理呢 不需要使用多个 term 查询 我们只要用单个 terms 查询 注意末尾的 s terms
  • _update_by_query

    POST your index update by query script source ctx source new field updated value query match your field your value
  • 小白成功搭建Elasticsearch 只需五步(包含配置xpack)

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

随机推荐

  • python mock库介绍

    python mock库介绍 Mock是什么 Mock这个词在英语中有模拟的这个意思 因此我们可以猜测出这个库的主要功能是模拟一些东西 准确的说 Mock是Python中一个用于支持单元测试的库 它的主要功能是使用mock对象替代掉指定的P
  • 后缀表达式

    include
  • IKD树:激光雷达SLAM中高效的点云数据结构与编程

    IKD树 激光雷达SLAM中高效的点云数据结构与编程 激光雷达同步定位与地图构建 Simultaneous Localization and Mapping SLAM 在机器人领域具有广泛的应用 在实际应用中 激光雷达获取的点云数据往往十分
  • 动态规划:什么是动态规划?

    一 什么是动态规划 动态规划 Dynamic Programming 简称Dp 是一种算法思想 将原 大 问题化解成子问题 再根据子问题的解得出原问题的解 1 1 什么是最优子结构和重复子问题 1 2 什么是状态转移方程 跟最优子结构的关系
  • FinOps 应用入门指南

    入门指南介绍 什么是 FinOps FinOps 是一种云成本管理和优化的解决方案 并为组织 企业 团队提供了系统化的方法论 其中每个人都应该对自己的云资源成本负责 FinOps 是 Finance 和 DevOps 的合成词 强调业务团队
  • EISeg标注环境配置以及使用方式

    一 背景 EISeg官方网站github官网 二 搭建环境 1 创建并激活虚拟环境 conda create n eiseg python 3 8 conda activate eiseg 设置清华源 下载会更快 pip config se
  • 销售订单创建BAPI

    READ TABLE IT OUTPUT INTO WA OUTPUT WITH KEY SEL X IF SY SUBRC NE 0 MESSAGE E000 CL WITH 请选择需要创建的数据 ENDIF gt 表头 DATA GS
  • Mybatis中实现批量更新的几种方式

    一 概述 mybatis中实现批量插入是很简单的 相比大家都知道 这里就不赘述 本文主要讲述如何实现批量更新 下面介绍本文要讲的几种方式主要是在xml中实现 不包含需要改动代码逻辑的方法 这里 除了网上说的普通情况 还有适合mysql和or
  • Windows系统MySQL5.7.26 版本的下载,安装、卸载

    MySQL5 7版本的下载 安装 使用 下载 Mysql基本参数配置 初始化 安装 下载 官网地址 https dev mysql com downloads mysql 下载到相应目录 这里我放在C data bank 下载到此目录里后
  • 工业相机与镜头选型方法(含实例)

    一 相机介绍及选型方法 1 工业相机介绍 工业相机与我们手机上面的相机或者我们单反相机不同 工业相机它能够使用各种恶劣的工作环境 比如说高温 高压 高尘等 工业相机主要有面阵相机和线阵相机 线阵相机主要用于检测精度要求很高 运动速度很快的场
  • Python中的groupby分组

    写在前面 之前我对于groupby一直都小看了 而且感觉理解得不彻底 虽然在另外一篇文章中也提到groupby的用法 但是这篇文章想着重地分析一下 并能从自己的角度分析一下groupby这个好东西 OUTLINE 根据表本身的某一列或多列内
  • jq中的css样式如何写,jq怎么写css样式

    方法如下 一般要在页面初始化的时候就要加载样式 所以使用ready 方法 语法格式为 document ready function 当DOM已经加载 并且页面 包括图像 已经完全呈现时 会发生ready事件 本教程操作环境 windows
  • centos7 安装frp内网穿透

    一 安装服务端 找一台云服务器 下载frp wget https github com fatedier frp releases download v0 35 1 frp 0 35 1 linux amd64 tar gz 解压 tar
  • 医学图像识别:基于cnn的病变细胞识别 完整代码数据 视频讲解

    项目代码讲解请看视频 医学图像识别 基于cnn的病变细胞识别 哔哩哔哩 bilibili 结果 from keras preprocessing image import ImageDataGenerator load img img to
  • RBAC简介(*)

    一 RBAC是什么 1 RBAC模型概述 RBAC是Role Based Access Control的英文缩写 意思是 基于角色的访问控制 RBAC实际上就是针对产品去挖掘需求时所用到的Who 角色 What 拥有什么资源 How 有哪些
  • PYQT制作动态时钟

    所有代码 import sys from PyQt5 QtCore import Qt QTimer QRect from PyQt5 QtGui import QPixmap QTransform QPainter QImage from
  • android沉浸式状态栏以及状态栏颜色更改

    版本要求 沉浸式状态栏效果是在android 4 4的时候出现的 所以只有Android4 4及以后的版本才能使用沉浸式效果 实现方式 大体上可以分为两种思路 1 修改状态栏的颜色使之与标题栏的背景色保持一致 以达到沉浸式效果 2 修改状态
  • MongoDB 数据库创建删除、表(集合)创建删除、数据增删改查

    数据库使用 开启 mongodb 服务 要管理数据库 必须先开启服务 开启服务使用 mongod dbpath D mongodb 管理 mongodb 数据库 mongo 一定要在新的 cmd 中输入 清屏 cls 查看所有数据库列表 s
  • Java—面向对象——作用域

    一 基本使用 1 在java编程中 主要的变量就是属性 成员变量 和局部变量 2 局部变量一般是指在成员方法中定义的变量 3 java中作用域的分类 全局变量 也就是属性 作用域为整个类体 局部变量 也就是除了属性之外的其他变量 作用域为定
  • ES 搜索21 (function_score查询 关键字 functions 和 weight 滤集提升权重分)

    过滤集提升权重 回到 忽略 TF IDF 里处理过的问题 我们希望根据每个度假屋的特性数量来评分 当时我们希望能用缓存的过滤器来影响评分 现在 function score 查询正好可以完成这件事情 到目前为止 我们展现的都是为所有文档应用