zoukankan      html  css  js  c++  java
  • 19.理解slop

    主要知识点:

    • 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设置的是2spark最多只允许移动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加入了位置计分的原因。

       

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

  • 相关阅读:
    vue之过滤器的用法
    数组方法
    vue指令之 v-fo循环和 v-show 以及key值的用法
    清除浮动的几种方式
    cookie和session的区别
    layui添加新增弹出框
    layui如何实现图片上传功能
    css中设置背景图片平铺整个页面
    在vue中使用样式的方法
    windows最小最大化当前窗口和关闭当前窗口
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8526461.html
Copyright © 2011-2022 走看看