文章目录

  • 概述
  • 召回率recall
  • 精准度 precision
  • 分析利弊
  • 方案

概述

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

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


召回率recall

举个例子 ,比如搜索一个java spark,总共有100个doc,能返回多少个doc作为结果,就是召回率,recall


精准度 precision

举个例子 ,比如搜索一个java spark,能不能尽可能让包含java spark,或者是java和spark离的很近的doc,排在最前面,precision


分析利弊

直接用match_phrase短语搜索,会导致必须所有term都在doc field中出现,而且距离在slop限定范围内,才能匹配上

match phrase,proximity match,要求doc必须包含所有的term,才能作为结果返回;如果某一个doc可能就是有某个term没有包含,那么就无法作为结果返回

比如:
java spark --> hello world java --> 就不能返回了
java spark --> hello world, java spark --> 才可以返回

近似匹配的时候,召回率比较低,因为精准度太高了

但是有时可能我们希望的是匹配到几个term中的部分,就可以作为结果出来,这样可以提高召回率。

同时我们也希望用上match_phrase根据距离提升分数的功能,让几个term距离越近分数就越高,优先返回

就是优先满足召回率,意思,java spark,包含java的也返回,包含spark的也返回,包含java和spark的也返回;同时兼顾精准度,就是包含java和spark,同时java和spark离的越近的doc排在最前面 .


方案

此时可以用bool组合match query和match_phrase query一起,来实现上述效果

我们先看下 match query的返回结果

GET /forum/article/_search
{"query": {"bool": {"must": [{"match": {"content": "java spark"}}]}}
}

返回数据

{"took": 3,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": 2,"max_score": 1.8166281,"hits": [{"_index": "forum","_type": "article","_id": "5","_score": 1.8166281,"_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"}}]}
}


再看下 bool组合match query和match_phrase query的情况

GET /forum/article/_search
{"query": {"bool": {"must": [{"match": {"content": "java spark"}}],"should": [{"match_phrase": {"content": {"query": "java spark","slop": 50}}}]}}
}

返回数据

{"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"}}]}
}

白话Elasticsearch19-深度探秘搜索技术之混合使用match和近似匹配实现召回率(recall)与精准度(precision)的平衡相关推荐

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

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

  2. Elasticsearch深度探秘搜索技术基于multi_match语法实现dis_max+tie_breaker

    直接上代码 GET /post/_search {"query": {"multi_match": {"query": "java ...

  3. 23_深度探秘搜索技术_best fields策略的dis_max、tie_breaker参数以及multi_match语法

    目录 一.引入dis_max 实现best fields 的必要性 1.使用bulk批量添加测试数据 2.搜索title或content中包含java或solution的帖子 3.结果分析 二.bes ...

  4. 22_深度探秘搜索技术_手动控制全文检索(match)结果的精准度、基于boost的细粒度搜索条件实现权重控制...

    本文章收录于[Elasticsearch 系列],将详细的讲解 Elasticsearch 整个大体系,包括但不限于ELK讲解.ES调优.海量数据处理等 本博客以例子为主线,来说明在elasticse ...

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

    文章目录 概述 官网 match和phrase match(proximity match)区别 优化proximity match的性能 概述 继续跟中华石杉老师学习ES,第19篇 课程地址: ht ...

  6. [白话解析] 通过实例来梳理概念 :准确率 (Accuracy)、精准率(Precision)、召回率(Recall) 和 F值(F-Measure)

    [白话解析] 通过实例来梳理概念 :准确率 (Accuracy).精准率(Precision).召回率(Recall)和F值(F-Measure) 文章目录 [白话解析] 通过实例来梳理概念 :准确率 ...

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

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

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

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

  9. 白话Elasticsearch17-深度探秘搜索技术之match_phrase query 短语匹配搜索

    文章目录 概述 官网 近似匹配 例子 match query match phrase query term position match_phrase的基本原理 概述 继续跟中华石杉老师学习ES,第 ...

最新文章

  1. Linux下做双向同步
  2. opencv 正脸和侧脸检测
  3. sublime text3的php代码合法检查
  4. 限制IIS站点的内存,避免级联影响
  5. 一元二次方程求根公式的花样变换,你看懂了吗?
  6. 页面乱码及页面传值出现乱码
  7. Linux环境下如何计算CPU占用率
  8. Music Bugs : 不支持wma格式的歌曲播放
  9. 完成端口(Completion Port)详解
  10. 顾客终生价值-CLV
  11. mpeg4 码流格式及判断关键帧
  12. kafka auto.offset.reset / latest / earliest 详解
  13. Quantile g-computation的介绍及R实现
  14. 统信uos 没有通过系统安全验证,无法运行
  15. Python爬虫入门教程15:音乐网站数据的爬取
  16. 联想笔记本小新air14,键盘如何设置不用按Fn直接按F1~12、?
  17. houdini 求出曲线的法向 切线以及副法线
  18. 何恺明新作来了!更快更有效的训练FLIP
  19. 迅雷创始人程浩:流量、资本红利已成过去式,中国互联网下一个十年属于……
  20. Docker入门(1)

热门文章

  1. 08-Web APIs
  2. 安利这三款录音转文字免费软件给你
  3. linux驱动源码阅读之情景分析法实践指南
  4. java毕业设计——基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文+程序源码)——蚁群算法路由选择可视化动态模拟
  5. keycloak的access_token解析 用于后端接口鉴权
  6. 模型构建器 空间位置选择_如何在2020年选择最佳网站构建器(比较)
  7. 【CBIR】基于内容的图像检索技(CBIR)术相术介绍
  8. 计算机技术员结构化面试题库,技术员结构化面试问题-20210409012110.docx-原创力文档...
  9. Mac隐藏终端的用户名和主机名
  10. 慕课软件工程(习题集)