参考:https://www.phpmianshi.com/?id=248

slop的含义

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

词条位置

当一个字符串被分析时,分析器不仅只返回一个词条列表,它同时也返回原始字符串的每个词条的位置、或者顺序信息:

例如:

POST /_analyze
{"analyzer": "standard","text": "区块链比特币"
}

结果:

{"tokens" : [{"token" : "区","start_offset" : 0,"end_offset" : 1,"type" : "<IDEOGRAPHIC>","position" : 0},{"token" : "块","start_offset" : 1,"end_offset" : 2,"type" : "<IDEOGRAPHIC>","position" : 1},{"token" : "链","start_offset" : 2,"end_offset" : 3,"type" : "<IDEOGRAPHIC>","position" : 2},{"token" : "比","start_offset" : 3,"end_offset" : 4,"type" : "<IDEOGRAPHIC>","position" : 3},{"token" : "特","start_offset" : 4,"end_offset" : 5,"type" : "<IDEOGRAPHIC>","position" : 4},{"token" : "币","start_offset" : 5,"end_offset" : 6,"type" : "<IDEOGRAPHIC>","position" : 5}]
}

示例

假设我们有个theme字段,存储的  “区块链,新能源,比特币,军工,医疗保健,医药”,标准分词后结果如下

POST /_analyze
{"analyzer": "standard","text": "区块链,新能源,比特币,军工,医疗保健,医药"
}

结果:

{"tokens" : [{"token" : "区","start_offset" : 0,"end_offset" : 1,"type" : "<IDEOGRAPHIC>","position" : 0},{"token" : "块","start_offset" : 1,"end_offset" : 2,"type" : "<IDEOGRAPHIC>","position" : 1},{"token" : "链","start_offset" : 2,"end_offset" : 3,"type" : "<IDEOGRAPHIC>","position" : 2},{"token" : "新","start_offset" : 4,"end_offset" : 5,"type" : "<IDEOGRAPHIC>","position" : 3},{"token" : "能","start_offset" : 5,"end_offset" : 6,"type" : "<IDEOGRAPHIC>","position" : 4},{"token" : "源","start_offset" : 6,"end_offset" : 7,"type" : "<IDEOGRAPHIC>","position" : 5},{"token" : "比","start_offset" : 8,"end_offset" : 9,"type" : "<IDEOGRAPHIC>","position" : 6},{"token" : "特","start_offset" : 9,"end_offset" : 10,"type" : "<IDEOGRAPHIC>","position" : 7},{"token" : "币","start_offset" : 10,"end_offset" : 11,"type" : "<IDEOGRAPHIC>","position" : 8},{"token" : "军","start_offset" : 12,"end_offset" : 13,"type" : "<IDEOGRAPHIC>","position" : 9},{"token" : "工","start_offset" : 13,"end_offset" : 14,"type" : "<IDEOGRAPHIC>","position" : 10},{"token" : "医","start_offset" : 15,"end_offset" : 16,"type" : "<IDEOGRAPHIC>","position" : 11},{"token" : "疗","start_offset" : 16,"end_offset" : 17,"type" : "<IDEOGRAPHIC>","position" : 12},{"token" : "保","start_offset" : 17,"end_offset" : 18,"type" : "<IDEOGRAPHIC>","position" : 13},{"token" : "健","start_offset" : 18,"end_offset" : 19,"type" : "<IDEOGRAPHIC>","position" : 14},{"token" : "医","start_offset" : 20,"end_offset" : 21,"type" : "<IDEOGRAPHIC>","position" : 15},{"token" : "药","start_offset" : 21,"end_offset" : 22,"type" : "<IDEOGRAPHIC>","position" : 16}]
}

查询我们使用如下命令

GET my_index/_search
{"query": {"bool": {"must": [{"match_phrase":{"theme":{"query":"区块链比特币","slop":0}}}]}},"from": 0,"size": 20
}

我们可以看到查询不到结果

原因分析

和match查询类似,match_phrase查询首先解析查询字符串来产生一个词条列表。然后会搜索所有的词条,但只保留包含了所有搜索词条的文档,并且词条的位置要邻接。

“区块链比特币” 标准分词后都是单个字,如上结果

“区块链,新能源,比特币,军工,医疗保健,医药”标准分词后,也都是单个字,如上结果

我们发现 ,其他关键字都紧邻着,但是“链”的postion=2 和 “比”的positon=6 之间的 position 差了4,但是我们设置的slop为0,要求分词后的位置必须紧邻(不用挪动位置),所以没有搜索到,根据我们刚才的分析,我们试着把slop逐渐增加,发现一直增大到3,才能搜到,也就是需要挪动3次,2挪动3次到5,就跟6紧挨着了,也就匹配到了

总结

1.位置信息可以被保存在倒排索引(Inverted Index)中,像match_phrase这样位置感知(Position-aware)的查询能够使用位置信息来匹配那些含有正确单词出现顺序的文档,且在这些单词之间没有插入别的单词。 我们可以在短语匹配使用slop参数来引入一些灵活性,slop参数告诉match_phrase查询词条能够相隔多远时仍然将文档视为匹配。相隔多远的意思是,你需要移动一个词条多少次来让查询和文档匹配

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

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

elasticsearch中基于slop参数实现近似匹配相关推荐

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

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

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

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

  3. 高效管理 Elasticsearch 中基于时间的索引——本质是在利用滚动模式做数据的冷热分离,热索引可以用ssd...

    高效管理 Elasticsearch 中基于时间的索引 转自:http://stormluke.me/es-managing-time-based-indices-efficiently/ 用 Ela ...

  4. Elasticsearch中基于词项的搜索

    为了方便我们学习,我们导入kibana为我们提供的范例数据. 目前为止,我们已经探索了如何将数据放入Elasticsearch,现在来讨论下如何将数据从Elasticsearch中拿出来,那就是通过搜 ...

  5. dbscan算法中 参数的意义_基于变参数的DBSCAN算法

    安全模型.算法与编程 |34| 基于变参数的 DBSCAN 算法 ◆付泽强 王晓锋 (江南大学物联网工程学院 江苏 214122) 摘要:DBSCAN 算法是一种常用的基于密度的聚类算法,其优点在于性 ...

  6. pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行、并设置keep参数保留重复行中的最后一个数据行

    pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行.并设置keep参数保留重复行中的最后一个数据行 目录

  7. 图解Elasticsearch中的_source、_all、store和index属性

    为什么80%的码农都做不了架构师?>>>    Elasticsearch中有几个关键属性容易混淆,很多人搞不清楚_source字段里存储的是什么?store属性的true或fals ...

  8. 在Elasticsearch中查询Term Vectors词条向量信息

    这篇文章有点深度,可能需要一些Lucene或者全文检索的背景.由于我也很久没有看过Lucene了,有些地方理解的不对还请多多指正. 更多内容还请参考整理的ELK教程 关于Term Vectors 额, ...

  9. 【Elasticsearch】Elasticsearch中数据是如何存储的

    1.概述 转载:Elasticsearch中数据是如何存储的 前言 很多使用Elasticsearch的同学会关心数据存储在ES中的存储容量,会有这样的疑问:xxTB的数据入到ES会使用多少存储空间. ...

  10. 【Elasticsearch】Elasticsearch中的相似度评分介绍

    1.概述 转载:Elasticsearch中的相似度评分介绍 本文要点 相关性得分是一个搜索引擎的核心,了解它的工作原理对创建一个好的搜索引擎至关重要. Elasticsearch 使用了两种相似度评 ...

最新文章

  1. 日期NSDate的使用
  2. 在ABAP XSLT中调用ABAP类的方法
  3. jQuery实现判断li的个数从而实现其他功能
  4. datatable如何生成级联数据_如何把Excel表数据批量生成条形码
  5. sqlite4java下载_使用sqlite4java的UnsatisfiedLinkError,没有sqlite4java-osx-amd64
  6. 怎么看vray渲染进度_3dmax如何渲染光子,为什么会卡光子呢?
  7. TreeView中丢失的图标
  8. 【待填坑】js构造函数和内置对象的区别
  9. 专注于分享,米狗网!
  10. bzoj1854 [Scoi2010]游戏【构图 并查集】
  11. 2021电工杯数学建模B题代码与思路(Python)
  12. 天地图卫星地图_一起看地图谷歌地图高清卫星地图在线_世界这么大,用地图去看看!...
  13. 各自然带代表植被_植被带气候
  14. STM32串口通信程序模拟超市打印机工作-使用接收中断、空闲中断、校验中断
  15. 快手Android一面复盘
  16. 2022到2023基于java+微信小程序毕业设计课题参考
  17. Marshmallow 库
  18. 比游戏还有意思的事情是什么(有自己坚持和梦想的不要看,这篇就是水文)
  19. Eclipse改成中文版本
  20. 【原】 POJ 2388 Who's in the Middle 中位数 解题报告

热门文章

  1. 日赚1.7亿!华为发布2020年度财报!附华为十大5G应用场景
  2. cesium所有示例下载
  3. 格式化U盘提示Windows 无法完成格式化
  4. linux系统可以安装浩辰CAD,浩辰CAD Linux下载
  5. NAS与SAN的区别
  6. Deepin安装向日葵报错
  7. Androidstudio 连接夜神模拟器
  8. aria2 linux 编译,Centos 7 编译安装Aria2
  9. 【csdn学习-Python】CSDN技能树-Python语言学习笔记
  10. Qt之Q_OBJECT