文章目录

  • 概述
  • 官网
  • slop 含义
  • 例子
    • 示例一
    • 示例二
    • 示例三

概述

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

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


接上篇博客 白话Elasticsearch17-match_phrase query 短语匹配搜索


官网

https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-queries.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase.html


slop 含义

官网中我们可以看到

A phrase query matches terms up to a configurable slop (which defaults to 0) in any order. Transposed terms have a slop of 2.

slop是什么呢?

query string,搜索文本,中的几个term,要经过几次移动才能与一个document匹配,这个移动的次数,就是slop 。

  • slop的phrase match,就是proximity match,近似匹配

  • 如果我们指定了slop,那么就允许搜索关键词进行移动,来尝试与doc进行匹配

  • 搜索关键词k,可以有一定的距离,但是靠的越近,越先搜索出来,proximity match


例子

一个query string经过几次移动之后可以匹配到一个document,然后设置slop .

假设有个doc

hello world, java is very good, spark is also very good.

我们使用 match_phrase query 来搜索 java spark ,是肯定搜索不到的, 因为 match_phrase query 会将java spark 作为一个整体来查找。

如果我们指定了slop,那么就允许java spark进行移动,来尝试与doc进行匹配

这里的slop,就是3,因为java spark这个短语,spark移动了3次,就可以跟一个doc匹配上了 。

slop的含义,不仅仅是说一个query string terms移动几次,跟一个doc匹配上。一个query string terms,最多可以移动几次去尝试跟一个doc匹配上

slop,设置的是3,那么就ok

GET /forum/article/_search
{"query": {"match_phrase": {"title": {"query": "java spark","slop":  3}}}
}

就可以把刚才那个doc匹配上,那个doc会作为结果返回

但是如果slop设置的是2,那么java spark,spark最多只能移动2次,此时跟doc是匹配不上的,那个doc是不会作为结果返回的。


示例一

我们那我们的测试数据来验证下

GET /forum/article/_search
{"query": {"match_phrase": {"content": {"query": "spark data","slop": 3}}}
}

分析一下slop

data经过了3次移动才匹配到 spark data ,所以 slop设置为3即可,当然了设置成比3大的数字,肯定也是可以查询到的,这里的slop设置为3 ,可以理解为至少移动3次。


示例二

如果我们搜索data spark 呢? 会不会匹配得到呢? 答案是 : 可以

来分析一下


示例三

slop搜索下,关键词离的越近,relevance score就会越高 .

GET /forum/article/_search
{"query": {"match_phrase": {"title": {"query": "java blog","slop": 5}}}
}

返回结果:

{"took": 2,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": 3,"max_score": 0.81487787,"hits": [{"_index": "forum","_type": "article","_id": "2","_score": 0.81487787,"_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"}},{"_index": "forum","_type": "article","_id": "1","_score": 0.31424814,"_source": {"articleID": "XHDK-A-1293-#fJ3","userID": 1,"hidden": false,"postDate": "2017-01-01","tag": ["java","hadoop"],"tag_cnt": 2,"view_cnt": 30,"title": "this is java and elasticsearch blog","content": "i like to write best elasticsearch article","sub_title": "learning more courses","author_first_name": "Peter","author_last_name": "Smith","new_author_last_name": "Smith","new_author_first_name": "Peter"}},{"_index": "forum","_type": "article","_id": "4","_score": 0.31424814,"_source": {"articleID": "QQPX-R-3956-#aD8","userID": 2,"hidden": true,"postDate": "2017-01-02","tag": ["java","elasticsearch"],"tag_cnt": 2,"view_cnt": 80,"title": "this is java, elasticsearch, hadoop blog","content": "elasticsearch and hadoop are all very good solution, i am a beginner","sub_title": "both of them are good","author_first_name": "Robbin","author_last_name": "Li","new_author_last_name": "Li","new_author_first_name": "Robbin"}}]}
}

可以看到

得分最高的

次之

最后

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

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

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

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

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

  3. 白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索

    文章目录 概述 官网 示例 构造模拟数据 普通查询 使用 multi_match + most fileds查询 best fields VS most fields 概述 继续跟中华石杉老师学习ES ...

  4. 白话Elasticsearch10-深度探秘搜索技术之基于dis_max实现best fields策略进行多字段搜索

    文章目录 概述 TF/IDF 链接 示例 DSL 普通查询 dis_max 查询 best fields策略-dis_max 概述 继续跟中华石杉老师学习ES,第十篇 课程地址: https://ww ...

  5. 白话Elasticsearch14-深度探秘搜索技术之基于multi_match 使用most_fields策略进行cross-fields search弊端

    文章目录 概述 官网 示例 概述 继续跟中华石杉老师学习ES,第十四篇 课程地址: https://www.roncoo.com/view/55 官网 https://www.elastic.co/g ...

  6. 白话Elasticsearch12-深度探秘搜索技术之基于multi_match + best fields语法实现dis_max+tie_breaker

    文章目录 概述 官网 示例 概述 继续跟中华石杉老师学习ES,第十二篇 课程地址: https://www.roncoo.com/view/55 官网 https://www.elastic.co/g ...

  7. 白话Elasticsearch08-深度探秘搜索技术之基于boost的细粒度搜索条件权重控制

    文章目录 概述 boost 示例 概述 继续跟中华石杉老师学习ES,第八篇 课程地址: https://www.roncoo.com/view/55 boost https://www.elastic ...

  8. 18_ElasticSearch 基于slop参数实现近似匹配

    18_ElasticSearch 基于slop参数实现近似匹配 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) ...

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

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

最新文章

  1. HTTP协议与TCP/IP协议的关系
  2. 二分图 crf的军训
  3. 【thinkPHP框架】Failed opening required 'header.php' include_path='.;c:\php5\pear 终级解决方案...
  4. 一个openMP编程处理图像的示例
  5. 只能由中文、字母、数字、下划线组成的字符串
  6. java rsa 私钥解密_Java RSA 加密解密中 密钥保存并读取,数据加密解密并保存读取 问题...
  7. dcp9020cdn硒鼓!错误_显示硒鼓错误的解决办法
  8. 在 vi 中替换字符串
  9. 视频教程-HTML5基础知识实战演练教程-HTML5/CSS
  10. 杰理之ANC降噪三种类型【篇】
  11. 基于深度学习技术的AI输入法引擎
  12. Segmentation Fault错误原因总结
  13. 波士顿房价预测(一)
  14. Eclipse中如何调出Servers,这里教你一遍成功。
  15. 学python吧-Python为什么这么厉害? 不想成为专业码农? 来学习Python吧!
  16. 全球与中国医疗高温灭菌设备市场深度研究分析报告
  17. C语言编程求小球自由落体高度
  18. 苹果7防水吗_苹果手机防水是真的吗?事实很残酷,但还可以抢救一下
  19. 跨考计算机不受歧视的学校,这几所学校不歧视本科出身,值得考虑!
  20. edge microsoff 连不上网_网站还原错误怎么办

热门文章

  1. 包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解
  2. Leetcode 141.环形链表 (每日一题 20210617)
  3. NLP-基础知识-005(专家系统)
  4. 卷积核个数和输入输出通道数的关系
  5. 遗传算法与直接搜索工具箱学习笔记 -----从直接搜索算法开始
  6. MATLAB中使用streamline函数绘制正负点电荷及它们构成的电偶极子的电场线分布图
  7. Python安装模块出错(ImportError: No module named setuptools)解决方法
  8. LeetCode-剑指 Offer 15. 二进制中1的个数
  9. Excel宏的易错点
  10. gradle本地、远程仓库配置--转