1.概述

转载:ElasticSearch 中使用衰减函数来完美你的搜索结果

最近的项目在原有的搜索需求增加功能

  • ElasticSearch 7.6 (请注意,大版本不同可能参数不同)

原有搜索:简单的标题+正文 全文索引
新加功能:在原有的基础上,更加完善排序结果。可以由多种因素控制。发布时间(发布太久的了得分需下降)后台给予的权重值(权重值越高越好)热度

调研了一下文档,发现ElasticSearch完美支持这样的需求,只需要自己定义好递减函数即可。

ES 内置了衰减函数(Decay Function)的支持。对于数值、日期和地理位置类型,可以设置一个理想的值,如果实际的值越偏离这个理想值(无论是增大还是减小),就越不符合期望,分数就越低。

它支持如下参数:

  • origin:原点,该字段最理想的值,这个值可以得到满分(1.0)
  • offset:偏移量,与原点相差在偏移量之内的值也可以得到满分
  • scale:衰减规模,当值超出了原点到偏移量这段范围,它所得的分数就开始进行衰减了,衰减规模决定了这个分数衰减速度的快慢
  • decay:衰减值,该字段可以被接受的值(默认为 0.5),相当于一个分界点,具体的效果与衰减的模式有关

  • linear 直线衰减,在 0 分外的值都是 0 分
  • exp 衰减速度先快后慢
  • gauss 衰减速度先慢后快再慢

我的参数配置如下:

{"query":{// 使用得分函数"function_score":{// 查询的关键字"query":{"multi_match":{// 关键字"query":"博客",// title 的权重是 body 的 "10"倍,具体可自行查阅官方文档的计算方式"fields":["title^10","body"]}},// 函数得分如何作用于原始得分(这里是相乘)"boost_mode":"multiply",// 函数的总得分(现在是所有得分累加)"score_mode":"sum","functions":[// 使用高斯函数, 原始日期是 2020-04-27// 距离原始日期 30 天之内的都能得到满分(以前未来日期都算),也就是 1// 距离原始日期 30 ~ 90 天的使用高斯函数得分// 距离原始日期超过 90 天(30+60) 的都得最低分,也就是 0.5{"gauss":{"created_date":{"origin":"2020-04-27","offset":"30d","scale":"60d","decay":0.5}},"weight": 1},// 使用线性函数,所有参数和高斯一致,只不过衰减程度不一样// 值的注意的是线性函数有可能得 0 分{"linear":{"hot_value":{"origin":100,"offset":10,"scale":50,"decay": 0.5}},// 可设置函数的权重"weight": 2}]}}
}

引用文档:

https://www.elastic.co/guide/en/elasticsearch/reference/7.6/query-dsl-function-score-query.html

知乎Live全文搜索之使用Elasticsearch全文搜索

【ElasticSearch】ElasticSearch 中使用衰减函数来完美你的搜索结果相关推荐

  1. python中time函数用法_python中time tzset()函数实例用法

    在时间的设置方面,为了能够跟系统时间有更好的区分,我们有时会借用一些函数方法来实现.就拿tzset()来说是设置时间的一种方法,其内在的变量依靠TZ的控制,如果没有设置TZ则以系统时间为准.接下来我们 ...

  2. python的empty函数_python中numpy.empty()函数实例讲解

    在使用python编程的过程中,想要快速的创建ndarray数组,可以使用numpy.empty()函数.numpy.empty()函数所创建的数组内所有元素均为空,没有实际意义,所以它也是创建数组最 ...

  3. ElasticSearch - function_score (衰减函数 linear、exp、gauss 具体实例)

    阅读本文需要先了解function_score的相关知识,请看 ElasticSearch - function_score 详解 1. 前言 很多变量都可以影响用户对于酒店的选择,像是用户可能希望酒 ...

  4. 【Elasticsearch】在 Elastic Cloud 上的 Elasticsearch 服务中,如何针对日志和指标用例确定热温架构的规模

    1.概述 转载:在 Elastic Cloud 上的 Elasticsearch 服务中,如何针对日志和指标用例确定热温架构的规模 主要是需要翻墙,比较麻烦. 希望深入了解 Amazon Elasti ...

  5. NodeJS同步MySQL上游数据到ElasticSearch数据库中

    NodeJS同步MySQL上游数据到ElasticSearch数据库中 项目地址: https://github.com/Miazzy/xdata-elasticsearchs-service.git ...

  6. ElasticSearch(ES)中的分片查询方式

    原文地址:http://www.bubuko.com/infodetail-836737.html Es查询的时候默认是随机从一些分片中查询数据,可以通过配置让es从某些分片中查询数据 1:_loca ...

  7. Elasticsearch - Elasticsearch 优化(十五)

    一.硬件选择 Elasticsearch 的基础是 Lucene,所有的索引和文档数据是存储在本地的磁盘中 具体的路径可在 ES 的配置文件../config/elasticsearch.yml 中配 ...

  8. oop 类中定义 的函数_WordPress的高级OOP:自定义REST API端点

    oop 类中定义 的函数 This article on advanced OOP for WordPress was originally published by Torque Magazine, ...

  9. pythonaxis函数_Python中numpy.apply_along_axis()函数的用法

    numpy.apply_along_axis(func, axis, arr, *args, **kwargs): 必选参数:func,axis,arr.其中func是我们自定义的一个函数,函数fun ...

最新文章

  1. 为Windows mobile编写设计友好的控件[Writing designer friendly controls for Windows Mobile]
  2. [翻译] - Inside SQL Server 2000's Memory Management Facilities
  3. 【图像】Dog(高斯差分)检测角点
  4. python连接linux服务器读取txt文件_Python文件处理
  5. 怎么查看linux服务器有cpu
  6. 表格里面怎么打多个√_Excel怎样在表格里打√?
  7. Application.Goto 方法
  8. Django:静态文件staticfiles
  9. 电信人的数据应用:销售指引系统
  10. Csdn Blog 开发团队致广大网友的一封信
  11. Spark Streaming三种运行场景
  12. 你必须知道:localStorage、sessionStorage 和 Cookie 区别在什么地方
  13. ABB机器人示教器上人机界面的功能
  14. 多层感知机的从零开始实现( 从D2L 包中抽取函数)
  15. 衣服挂牌 挂牌吊牌(麻绳,五彩绳,尼龙绳等)
  16. ngx之日志切割 、ngx信号
  17. 快速打开 控制面板下网络和 Internet下的网络连接
  18. 马来西亚房产是否值得投资?
  19. js数字转字符串和字符串转数字的方法
  20. 【自然语言处理】Gensim中的Word2Vec

热门文章

  1. 天猫双11:1日到11日0点45分 382个品牌成交额超过1亿元
  2. 果然十三香!苹果全球销量超越小米重回第二,第一还是它
  3. 苹果“炸场”发布会官宣定档10月19日!终于等到你俩
  4. 苏宁易购:公司改选董事 同意聘任张近东为公司名誉董事长
  5. 魅族营销翻车,被骂上热搜,官博致歉并暂停运营两天...
  6. 联想拯救者电竞手机Pro透明版马上就到:一眼就能看到“芯”
  7. 华为Mate 40 Pro屏幕贴膜曝光:双孔曲面屏实锤?
  8. iPhone 12将首次加入屏下指纹?都是为它铺路?
  9. 香橼做空跟谁学发第三枪 跟谁学股价盘后下跌1.37%
  10. Realme首款5G手机真我X50官宣:支持SA/NSA双模5G