主要知识点:

  • slop的含义(内在原理)
  • slop的用法

 
 

一、slop的含义是什么?

 
 

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

举例如下:一个query string经过几次移动之后可以匹配到一个document,然后设置slop

假如有如下一句话:hello world, java is very good, spark is also very good.

用java spark进行match phrase去搜索是搜不到这句话的。

下面是java spark的移动过程。

 
 

java                is                very                good                spark                is

 
 

java                spark

java                -->                spark

java                                -->                spark

java                                                -->                spark

 
 

这里的slop,就是3,因为java spark这个短语,spark移动了3次,就可以跟一个doc匹配上了(这个正序的话可以简单理解成他们之间有多少个单词)

这种情况下把slop设置的是3就可以搜索到结果,"slop": 3表示这个搜索请求中最多只允许3次移动,但是如果slop设置的是2,spark最多只允许移动2次,此时跟doc是匹配不上的,那个doc是不会作为结果返回的。

 
 

二、slop的用法

GET /forum/article/_search

{

"query": {

"match_phrase": {

"content": {

"query": "spark data",

"slop": 3

}

}

}

}

 
 

那如果是倒序的情况呢,也就是说如果搜索spark,java时的移动次数是多少呢,经过测试最小的移动次数是5,也就是只有把 slop 设置为5才能返回这条结果。

GET /forum/article/_search

{

"query": {

"match_phrase": {

"content": {

"query": "data spark",

"slop": 5

}

}

}

}

 
 

slop=5的原因如下,以下是移动过程,spark,java要交换位置就要移动2次,所以3+2=5次。

spark                is                                best                big                        data

 
 

data                spark

-->                        data/spark

spark                <--data

spark                -->                                data

spark                                                -->                        data

spark                                                                        -->                        data

 
 

 
 

三、relevance score测试

 
 

GET /forum/article/_search

{

"query": {

"match_phrase": {

"content": {

"query": "java best",

"slop": 15

}

}

}

}

执行结果(部分):

 
 

"_id": "2",

"_score": 0.65380025,

"content": "i think java is the best programming language",

"

}

},

{

"_index": "forum",

"_type": "article",

"_id": "5",

"_score": 0.07111243,

"content": "spark is best big data solution based on scala ,an programming language similar to java spark",

 
 

从上可以看出:slop搜索下,关键词离的越近,relevance score就会越高。和match_query比较也可以看出这两种搜索方法对应的两个文档的分数差距也不一样,match_phrase搜索时两文档分数差距较大,这是由于match_phrase加入了位置计分的原因。

 
 

最后说明:加了slop的phrase match,就是proximity match,近似匹配

19.理解slop的更多相关文章

  1. Liferay7 BPM门户开发之19: 理解Service Builder体系

    Service Builder是Liferay为业务开发而设计的模型驱动(model-driven)平台工具,提供一系列的实体类.数据持久化.服务相关的代码自动生成服务.支持Hibernate and ...

  2. [置顶] Effective STL 学习笔记

    看Effective STL 作的一些笔记,希望对各位有帮助. 以下是50条条款及相关解释. 容器 1. 慎重选择容器类型,根据需要选择高效的容器类型. 2. 不要试图编写独立于容器类型的代码. 3. ...

  3. 拼多多、饿了么、蚂蚁金服Java面试题大集合

    自己当初找工作时参加过众多一线互联网公司的Java研发面试,这段时间处于寒冬,然而前几天跳槽找工作,两天面了3家,已经拿了两个offer,觉得可以和大家分享下: 下面为拼多多.饿了么.蚂蚁金服.哈啰出 ...

  4. Linux常用性能工具功能、用法及原理(一)

    Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息. 按实现原理分,可分为基于计数器和跟踪以及剖析.含义如下: 计数器 ...

  5. JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程...]

    类的继承 Java只支持单继承,不允许多重继承- 一个子类只能有一个父类- 一个父类可以派生出多个子类这里写图片描述子类继承了父类,就继承了父类的方法和属性.在子类中,可以使用父类中定义的方法和属性, ...

  6. 【转】Flash:同志们,这些知识点你们知道多少?(一些必备的Flash开发知识点)

    1.理解flash的显示列表                2.理解事件冒泡,理解鼠标事件等        3.理解flash的性能瓶颈和大多数影响性能的地方4.理解帧跑道模型,知道timer和ent ...

  7. JavaScript变量不同类型之间的自动、手动类型转换

    转换成字符型:toString() var str = 123; str.toString();转换成字符串 将str从数值型变成字符型       浮点数:         电脑在运算过程中以正确的 ...

  8. STL学习笔记(三) 关联容器

    条款19:理解相等(equality)和等价(equivalence)的区别 相等的概念是基于 operator== 的,如果 operator== 的实现不正确,会导致并不实际相等等价关系是以&qu ...

  9. SICP 习题解 第二章

    计算机程序的构造和解释习题解答 Structure and Interpretation os Computer Programs Exercises Answer 第二章 构造数据抽象 练习2.17 ...

随机推荐

  1. 【Spark】Stage生成和Stage源代码浅析

    引入 上一篇文章<DAGScheduler源代码浅析>中,介绍了handleJobSubmitted函数,它作为生成finalStage的重要函数存在.这一篇文章中,我将就DAGSched ...

  2. 20170623_oracle基础知识_常见问题

    1 如何配置网络服务?两种连接 Oracle 工具? 1) 打开Net Manager 2) 选择服务命名,点击“+ ”号 3 ) 网络服务名:  remote协议:tcp/ip 主机名:ip地址 端 ...

  3. 安装RPM包或者安装源代码包

    第十一章 安装RPM包或者安装源代码包 在windows下安装一个软件非常轻松,仅仅要双击.exe的文件,安装提示连续"下一步"就可以,然而linux系统下安装一个软件似乎并不那么 ...

  4. What is an ISAPI Extension?

    https://www.codeproject.com/Articles/1432/What-is-an-ISAPI-Extension Introduction Unless you have be ...

  5. 交换排序(2)——冒泡排序(bubble sort)

    冒泡排序算法的运作如下:(从后往前) 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所 ...

  6. SignalR -- server push 利器

    实际上关于SignalR的介绍网上有很多,这里不做过多赘述,我们来看下官方网站的描述. [摘录自http://signalr.net/] What is ASP.NET SignalR ASP.NET ...

  7. 如何为你的Go应用创建轻量级Docker镜像?

    介绍 多什么? 简单来讲,多阶段. 多阶段允许在创建Dockerfile时使用多个from,它非常有用,因为它使我们能够使用所有必需的工具构建应用程序.举个例子,首先我们使用Golang的基础镜像,然 ...

  8. spring基础学习---简单配置文件

  9. C#使用Parallel处理数据同步写入Datatable并使用BulkInsert批量导入数据库

    项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL). 业务流程:选择照片文件夹,分别访问照片-->调用DLL接口传递照片路径-->接收处理返回值-->写入数据 ...

  10. Set-----集合入门

    函数中的集合和  数学中的集合 基本上差不多 集合中每个元素最多只能出现一次  并且 当元素储存到set集合之中 会自动 按照 ascll 进行  从小到大的  排序 大神关于   set   的 详 ...