19_ElasticSearch 使用match和近似匹配实现召回率与精准度的平衡
19_ElasticSearch 使用match和近似匹配实现召回率与精准度的平衡
更多干货
- 分布式实战(干货)
- spring cloud 实战(干货)
- mybatis 实战(干货)
- spring boot 实战(干货)
- React 入门实战(干货)
- 构建中小型互联网企业架构(干货)
- python 学习持续更新
一、概要
1.召回率
比如你搜索一个java spark,总共有100个doc,能返回多少个doc作为结果,就是召回率,recall
2.精准度
比如你搜索一个java spark,能不能尽可能让包含java spark,或者是java和spark离的很近的doc,排在最前面,precision
3.需求
- 但是有时可能我们希望的是匹配到几个term中的部分,就可以作为结果出来,这样可以提高召回率。
- 同时我们也希望用上match_phrase根据距离提升分数的功能,让几个term距离越近分数就越高,优先返回
- 就是优先满足召回率,意思,java spark,包含java的也返回,包含spark的也返回,包含java和spark的也返回;
- 同时兼顾精准度,就是包含java和spark,同时java和spark离的越近的doc排在最前面
4.问题分析
- 直接用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 --> 才可以返回
- 近似匹配的时候,召回率比较低,精准度太高了
二、平衡召回率与精准度
此时可以用bool组合match query和match_phrase query一起,来实现上述效果
1、查询语法说明
GET /forum/article/_search {"query": {"bool": {"must": {"match": { "title": {"query": "java spark" --> java或spark或java spark,java和spark靠前,但是没法区分java和spark的距离,也许java和spark靠的很近,但是没法排在最前面}}},"should": {"match_phrase": { --> 在slop以内,如果java spark能匹配上一个doc,那么就会对doc贡献自己的relevance score,如果java和spark靠的越近,那么就分数越高"title": {"query": "java spark","slop": 50}}}}} }
例子一
先使用 match查询
GET /forum/article/_search {"query": {"bool": {"must": [{"match": {"content": "java spark"}}]}} }
match查询结果
{"took": 5,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 2,"max_score": 0.68640786,"hits": [{"_index": "forum","_type": "article","_id": "2","_score": 0.68640786,"_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","followers": ["Tom","Jack"]}},{"_index": "forum","_type": "article","_id": "5","_score": 0.68324494,"_source": {"articleID": "DHJK-B-1395-#Ky5","userID": 3,"hidden": false,"postDate": "2017-03-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","followers": ["Jack","Robbin Li"]}}]} }
例子二 使用 match和 match_phrase 组合查询
GET /forum/article/_search {"query": {"bool": {"must": [{"match": {"content": "java spark"}}],"should": [{"match_phrase": {"content": {"query": "java spark","slop": 50}}}]}} }
match和 match_phrase 组合查询结果:
{"took": 5,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 2,"max_score": 1.258609,"hits": [{"_index": "forum","_type": "article","_id": "5","_score": 1.258609,"_source": {"articleID": "DHJK-B-1395-#Ky5","userID": 3,"hidden": false,"postDate": "2017-03-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","followers": ["Jack","Robbin Li"]}},{"_index": "forum","_type": "article","_id": "2","_score": 0.68640786,"_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","followers": ["Tom","Jack"]}}]} }
相关文章
1_ElasticSearch使用term filter来搜索数据
2_ElasticSearch filter执行原理 bitset机制与caching机制
3_ElasticSearch 基于bool组合多个filter条件来搜索数据
4_ElasticSearch 使用terms搜索多个值
5_ElasticSearch 基于range filter来进行范围过滤
6_ElasticSearch 控制全文检索结果的精准度
7_ElasticSearch term+bool实现的multiword搜索原理
8_基于boost的搜索条件权重控制
9_ElasticSearch 多shard场景下relevance score不准确
10_ElasticSearch dis_max实现best fields策略进行多字段搜索
11_ElasticSearch 基于tie_breaker参数优化dis_max搜索效果
12_ElasticSearch multi_match语法实现dis_max+tie_breaker
13_ElasticSearch multi_match+most fiels策略进行multi-field搜索
14_ElasticSearch 使用most_fields策略进行cross-fields search
15_ElasticSearch copy_to定制组合field进行cross-fields搜索
16_ElasticSearch 使用原生cross-fiels 查询
17_ElasticSearch phrase matching搜索
18_ElasticSearch 基于slop参数实现近似匹配
日志管理ELK
19_ElasticSearch 使用match和近似匹配实现召回率与精准度的平衡相关推荐
- 白话Elasticsearch19-深度探秘搜索技术之混合使用match和近似匹配实现召回率(recall)与精准度(precision)的平衡
文章目录 概述 召回率recall 精准度 precision 分析利弊 方案 概述 继续跟中华石杉老师学习ES,第19篇 课程地址: https://www.roncoo.com/view/55 召 ...
- 混淆矩阵介绍以及评价指标(准确率,精确率,召回率,特异度,假警报率,G-mean,F1_score,KS值)
混淆矩阵 混淆矩阵(Confusion Matrix),可以理解为就是一张表格.混淆这个名字还是很有内涵的,咳咳. 混淆矩阵是判断分类好坏程度的一种方法.另外还有ROC曲线和AUC曲线. 以分类模型中 ...
- 召回率和精确率(recall and precision)
#记性不好写博客以记之 召回率(recall) 公式:Recall = TP /TP+FN 定义:所有的正样本中,我们识别出来的比例.召回率又叫查全率.击中的概率. 精准率(precision) 公式 ...
- 召回率(Recall),精确率(Precision),交除并(Intersection-over-Union(IoU)
简介 做一下记录,方便查看 召回率和精准率 混淆矩阵 True Positive(真正, TP):将正类预测为正类数. True Negative(真负 , TN):将负类预测为负类数. False ...
- 精确率、召回率、F1 值、ROC、AUC
首先我们来思考一个问题,如何评估一个机器学习模型效果的好坏呢? 1.性能度量 机器学习首先要建模,对于模型性能的好坏(即模型的泛化能力),我们必须有个评判的标准.为了了解模型的泛化能力,我们需要用某个 ...
- 一文看懂分类模型的评估指标:准确率、精准率、召回率、F1等
2019-11-21 21:59:23 机器学习模型需要有量化的评估指标来评估哪些模型的效果更好. 本文将用通俗易懂的方式讲解分类问题的混淆矩阵和各种评估指标的计算公式.将要给大家介绍的评估指标有:准 ...
- 准确率,精准率,召回率,真正率,假正率,ROC/AUC
最近在看到这些词得时候老是混淆,看了之后还很容易遗忘,于是查了些资料把他们记录下来. 我们在设计深度学习网络模型的时候经常要对其进行评估,评估就要用到这些东西,在接介绍这个率,那个率之前,我先来介 ...
- auc计算公式_图解机器学习的准确率、精准率、召回率、F1、ROC曲线、AUC曲线
机器学习模型需要有量化的评估指标来评估哪些模型的效果更好. 本文将用通俗易懂的方式讲解分类问题的混淆矩阵和各种评估指标的计算公式.将要给大家介绍的评估指标有:准确率.精准率.召回率.F1.ROC曲线. ...
- 模型评估指标_精准率、召回率、F1-score、ROC曲线、AUC曲线
一.分类结果混淆矩阵 1.T.F.P.N辨析 P(Positive).N(Negative)针对的是预测值的结果. P表示对样本的预测结果为正例, N表示对样本的预测结果为反例. T(True).F( ...
最新文章
- 云炬随笔20160914
- 关于AJAX访问数据库不能及时获得更新数据的问题
- poj/OpenJ_Bailian - 2528 离散化+线段树
- java document select_javasript 操作option select
- 【一起学OpenFOAM】04 OpenFOAM的学习资源
- java main 声明_Java中main方面面试题
- Mac OS 看机起动JIRA
- 安卓应用安全指南 5.5.3 处理隐私数据 高级话题
- 电子仿真软件MultiSIM
- 班级html网页设计实例,静态网页班级网站设计.doc
- python爬取12306_爬虫12306返回数据怎么解析
- 计算机网络有那些参考文献,计算机网络参考文献
- 音创ktv点歌系统服务器,音创ktv点歌系统家庭版
- App推广渠道如何统计的解决方案
- 物联网芯片型号处理器集锦资料介绍
- 河北省谷歌高清卫星地图下载
- ubuntu18.04 升级内核后,进入系统页面卡在“started gnome display manager“的解决方案
- java 实现ps功能_JS实现在线ps功能详解
- 基于深度卷积神经网络的人脸识别考勤系统-VGG-PYTHON-QT(1)
- android界面设计所用中文什么字体,手机软件中的字体是什么字体,ui界面设计用什么字体...