文章目录

  • 概述
  • 官网
  • match和phrase match(proximity match)区别
  • 优化proximity match的性能

概述

继续跟中华石杉老师学习ES,第19篇

课程地址: https://www.roncoo.com/view/55


官网

白话Elasticsearch17-match_phrase query 短语匹配搜索

白话Elasticsearch18-基于slop参数实现近似匹配以及原理剖析

白话Elasticsearch19-混合使用match和近似匹配实现召回率(recall)与精准度(precision)的平衡

上面3篇博客我们学习了 短语匹配和近似匹配 , 当近视匹配出现性能问题时,该如何优化呢?

官网说明: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-rescore.html


match和phrase match(proximity match)区别

简单来说

  • match : 只要简单的匹配到了一个term,就可以理解将term对应的doc作为结果返回,扫描倒排索引,扫描到了就ok

  • phrase match : 首先扫描到所有term的doc list; 找到包含所有term的doc list; 然后对每个doc都计算每个term的position,是否符合指定的范围; slop,需要进行复杂的运算,来判断能否通过slop移动,匹配一个doc

一般来讲 ,

  • match query的性能比phrase match和proximity match(有slop)要高很多。因为后两者都要计算position的距离。
  • match query比phrase match的性能要高10倍,比proximity match的性能要高20倍。

但是别太担心,因为es的性能一般都在毫秒级别,match query一般就在几毫秒,或者几十毫秒,而phrase match和proximity match的性能在几十毫秒到几百毫秒之间,所以也是可以接受的。


优化proximity match的性能

优化proximity match的性能,一般就是减少要进行proximity match搜索的document数量。

主要思路就是,用match query先过滤出需要的数据,然后再用proximity match来根据term距离提高doc的分数,同时proximity match只针对每个shard的分数排名前n个doc起作用,来重新调整它们的分数,这个过程称之为rescoring,重计分。因为一般用户会分页查询,只会看到前几页的数据,所以不需要对所有结果进行proximity match操作。

那就是: match + proximity match同时实现召回率和精准度

白话Elasticsearch19-混合使用match和近似匹配实现召回率(recall)与精准度(precision)的平衡

默认情况下,match也许匹配了1000个doc,proximity match全都需要对每个doc进行一遍运算,判断能否slop移动匹配上,然后去贡献自己的分数。

但是很多情况下,match出来也许1000个doc,其实用户大部分情况下是分页查询的,所以可能最多只会看前几页,比如一页是10条,最多也许就看5页,就是50条
proximity match只要对前50个doc进行slop移动去匹配,去贡献自己的分数即可,不需要对全部1000个doc都去进行计算和贡献分数

rescore:重打分

match:1000个doc,其实这时候每个doc都有一个分数了; proximity match,前50个doc,进行rescore,重打分,即可; 让前50个doc,term举例越近的,排在越前面

DSL如下:

GET /forum/article/_search
{"query": {"match": {"content": "java spark"}},"rescore": {"window_size": 50,"query": {"rescore_query": {"match_phrase": {"content": {"query": "java spark","slop": 10}}}}}
}

返回结果

{"took": 3,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": 2,"max_score": 3.2468495,"hits": [{"_index": "forum","_type": "article","_id": "5","_score": 3.2468495,"_source": {"articleID": "DHJK-B-1395-#Ky5","userID": 3,"hidden": false,"postDate": "2019-05-01","tag": ["elasticsearch"],"tag_cnt": 1,"view_cnt": 10,"title": "this is spark blog","content": "spark is best big data solution based on scala ,an programming language similar to java spark","sub_title": "haha, hello world","author_first_name": "Tonny","author_last_name": "Peter Smith","new_author_last_name": "Peter Smith","new_author_first_name": "Tonny"}},{"_index": "forum","_type": "article","_id": "2","_score": 0.7721133,"_source": {"articleID": "KDKE-B-9947-#kL5","userID": 1,"hidden": false,"postDate": "2017-01-02","tag": ["java"],"tag_cnt": 1,"view_cnt": 50,"title": "this is java blog","content": "i think java is the best programming language","sub_title": "learned a lot of course","author_first_name": "Smith","author_last_name": "Williams","new_author_last_name": "Williams","new_author_first_name": "Smith"}}]}
}

白话Elasticsearch20-深度探秘搜索技术之使用rescoring机制优化近似匹配搜索的性能相关推荐

  1. 白话Elasticsearch11-深度探秘搜索技术之基于tie_breaker参数优化dis_max搜索效果

    文章目录 概述 官方文档 例子 tie_breaker 概述 继续跟中华石杉老师学习ES,第十一篇 课程地址: https://www.roncoo.com/view/55 官方文档 https:// ...

  2. 白话Elasticsearch18-深度探秘搜索技术之基于slop参数实现近似匹配以及原理剖析

    文章目录 概述 官网 slop 含义 例子 示例一 示例二 示例三 概述 继续跟中华石杉老师学习ES,第18篇 课程地址: https://www.roncoo.com/view/55 接上篇博客 白 ...

  3. 专访头条搜索:从推荐到搜索,如何构建搜索技术的另一种可能?

    今日头条又将搜索业务往前推进了一步.4 月 30 日,今日头条宣布上线"头条百科"测试版.界面简洁,除了搜索框外,只有一个 Slogan:" 来这里,认识世界!" ...

  4. 陈天奇:深度学习编译技术的现状和未来

    https://www.toutiao.com/a6690418726631637512/ 2019-05-13 16:03:04 传统的深度学习框架采用人工优化算子,然后建立运行时图解释器来解决内存 ...

  5. 豌豆荚工程师谈其新版应用搜索技术

    豌豆荚工程师谈其新版应用搜索技术 豌豆荚工程师谈其新版应用搜索技术 豌豆荚工程师谈其新版应用搜索技术 作者 水羽哲 发布于 2012年12月6日 领域         语言 & 开发     ...

  6. 抖音seo源码,抖音搜索排名,抖音账号矩阵程序开发搭建,抖音seo搜索技术研发搭建部署

    抖音seo源码,抖音搜索排名,抖音账号矩阵程序开发搭建,抖音seo搜索技术研发搭建部署 抖音seo搜索逻辑,作为技术开发公司,我们在在抖音开放平台需要完成注册--申请系统服务商---入驻---关联应用 ...

  7. 白话Elasticsearch27-深度探秘搜索技术之误拼写时的fuzzy模糊搜索技术

    文章目录 概述 官方指导 例子 推荐写法 概述 继续跟中华石杉老师学习ES,第27篇 课程地址: https://www.roncoo.com/view/55 官方指导 https://www.ela ...

  8. 白话Elasticsearch22- 深度探秘搜索技术之match_phrase_prefix实现search-time搜索推荐

    文章目录 概述 match_phrase_prefix 官方说明 例子 总结 概述 继续跟中华石杉老师学习ES,第22篇 课程地址: https://www.roncoo.com/view/55 ma ...

  9. Elasticsearch深度探秘搜索技术如何手动控制全文检索结果的精准度

    为帖子数据增加标题字段 #插入数据 POST /post/_doc/_bulk { "update": { "_id": "1"} } { ...

最新文章

  1. python迭代器面试题_Python面试题之生成器/迭代器
  2. JAVA变量path , classpth ,java_home设设置作用和作用
  3. corosync/openais+pacemaker+drbd+web实现高可用群集
  4. linux下查看无线网卡的命令,lspci命令可看无线网卡 ifconfig看不到 如何操作
  5. Ubuntu中eclipse端口被占
  6. android实现下载的核心代码
  7. PHP网络版CRM客户管理系统
  8. android vmware 分辨率,android 常见分辨率与DPI对照表
  9. 2021年9月计算机二级Office电脑版刷题软件(真题题库)分享
  10. spss 通径分析_【使用SPSS线性回归实现通径分析的方法】【原创资源】
  11. 2.3安装工业相机SDK及测试
  12. 2021计算机专业考研科目,2021北京航空航天大学计算机考研科目
  13. 单节锂电池充电管理芯片,IC电路图
  14. 半导体随机存储器(random access memory)
  15. 视频教程-大数据与数据仓库入门到精通-Hadoop
  16. ios 自带录屏框架replayKit的使用
  17. Longhorn时代,浏览器的终结?——关于Avalon和XAML
  18. (青龙面板)xdd机器人对接诺兰进行短信提交
  19. 第4章 计算机网络自顶向下——网络层:数据平面
  20. 宝塔如何使用一个IP地址建立多个站点

热门文章

  1. nltk 文本预处理
  2. Leetcode 面试题 01.01. 判定字符是否唯一 (每日一题 20211012)
  3. 交通预测论文笔记《Attention Based Spatial-Temporal Graph Convolutional Networks for Traffic Flow Forecasting》
  4. MATLAB应用实战系列(七十七)-【图像处理】COVID-19 防疫应用口罩检测
  5. R语言实战应用-基于R语言的对应分析
  6. 15 分钟搭建一个基于XLNET的文本分类模型——keras实战
  7. K折交叉验证(StratifiedKFold与KFold比较)
  8. Python学习中的点点滴滴
  9. Python3--baby网的数据爬取
  10. QT中Widget去除系统提供工具以及系统默认边框