主要知识点:

  • 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. CodeForces 16B Burglar and Matches(贪心)

    B. Burglar and Matches time limit per test 0.5 second memory limit per test 64 megabytes input stand ...

  2. ios10--拳皇动画

    /** 图片的两种加载方式: 1> imageNamed: a. 就算指向它的指针被销毁,该资源也不会被从内存中干掉, b. 放到Assets.xcassets的图片,默认就有缓存, c. 图片 ...

  3. 51Nod 1301 集合异或和 —— 异或DP

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1301 参考博客:https://blog.csdn.net/qq_ ...

  4. PCB 挺有意思的基数排序----C#代码实现

    今天在头条看一个很有意思的排序算法[基数排序],以前所学习的排序算法都是基于数值对比的方式排序的,而这个算法挺有意思的非常独特.但从网上看到的例子通常是对个位,十位处理,并转为对应的桶索引的方式实现, ...

  5. E20171011-hm

    Rendering engine  渲染引擎; 引擎; 绘图引擎; interactive   adj. 互动的; 互相作用的,相互影响的; [计] 交互式的; defer   vt. 使推迟; 使延 ...

  6. DOM对象,控制HTML元素(1)

    1:getElementsByName(name)方法 它是通过元素的name属性来查询元素,而不是通过id属性.getElementById()方法是通过元素的id属性来获取元素的. 注意: 该方法 ...

  7. codevs1258 关路灯(☆区间dp)

    1258 关路灯  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master     题目描述 Description 多瑞卡得到了一份有趣而高薪的工作.每天早晨他必须 ...

  8. printf的字符型

    参  数 说  明 %s 按实际宽度输出一个字符串 %ms m指定宽度(不足时左补空格,大于时按实际宽度输出) %-ms 左对齐,不足时右补空格 %m.ns 输出占m个字符位置,其中字符数最多n个,左 ...

  9. 【洛谷4933】大师(DP)

    题目: 洛谷4933 分析: (自己瞎yy的DP方程竟然1A了,写篇博客庆祝一下) (以及特斯拉电塔是向Red Alert致敬吗233) 这里只讨论公差不小于\(0\)的情况,小于\(0\)的情况进行 ...

  10. Java. How to use headless browsers for crawling web and scraping data from website.--转

    https://www.linkedin.com/pulse/java-how-use-headless-browsers-crawling-web-scraping-data-taluyev/ Di ...