• [转]对Lucene PhraseQuery的slop的理解


    [http://myzhangjl.blog.sohu.com/95911870.html]

    所谓PhraseQuery,就是通过短语来检索,比如我想查“big car”这个短语,那么如果待匹配的document的指定项里包含了"big car"这个短语,这个document就算匹配成功。可如果待匹配的句子里包含的是“big black car”,那么就无法匹配成功了,如果也想让这个匹配,就需要设定slop,先给出slop的概念:slop是指两个项的位置之间允许的最大间隔距离,下面我举例来解释:

       我的待匹配的句子是:the quick brown fox jumped over the lazy dog.

       例1: 如果我想用“quick fox”来匹配出上面的句子,我发现原句里是quick [brown] fox,就是说和我的“quick fox”中间相差了一个单词的距离,所以,我这里把slop设为1,表示quickfox这两项之间最大可以允许有一个单词的间隔,这样所有“quick [***] fox”就都可以被匹配出来了。

       例2:如果我想用“fox quick”来匹配出上面的句子,这也是可以的,不过比例1要麻烦,我们需要看把“fox quick”怎么移动能形成“quick [***] fox”,如下表所示,把fox向右移动3次即可:

       fox quick      
    1    fox|quick      
    2    quick fox   
    3    quick    fox

        例3:如果我想用“lazy jumped quick”该如何匹配上面的句子呢?这个比例2还要麻烦,我们要考虑3个单词,不管多少个单词,slop表示的是间隔的最大距离,详细起见,我们分别来看每种组合:(我的待匹配的句子是:the quick brown fox jumped over the lazy dog.)

    • lazy jumped:原句是jumped [over] [the] lazy,就是说它们两个之间间隔了2个词,如下所示:需要把lazy向右移动4位
       lazy jumped         
    1    lazy|jumped         
    2    jumped lazy      
    3    jumped    lazy   
    4    jumped       lazy 
    •   lazy jumped quick:我们主要看lazyquick,但是由于jumped是在中间,所以移动的时候还是要把jumped考虑在内,原句里lazyquick的关系是:quick [brown] [fox] [jumped] [over] [the] lazy ,quick lazy中间间隔了5个词,所以如下图所示,把lazy向右移动8次
        lazy

    jumped

    quick                 

    1

      

    lazy|jumped

    quick

      

      

      

      

      

     

    2

      

    jumped

    lazy|quick

      

      

      

      

      

     

     3 

      

    jumped

    quick

     lazy 

      

      

      

      

     

    4

      

    jumped

    quick

      

    lazy 

      

      

      

     

     5 

      

    jumped

    quick

      

      

    lazy 

      

      

     

    6

      

    jumped

    quick

      

      

      

    lazy 

      

     

    7

      

    jumped

    quick

      

      

      

      

    lazy 

     

    8

      

    jumped

    quick

                   lazy 
    •  最后是jumped qucik,这里不详细画表格了,大家可以自己试试,应该是把jumped向右移动4次。

       综合以上3种情况,所以我们需要把slop设为8才令“lazy jumped quick”可以匹配到原句。

  • 相关阅读:
    常用模块(一)
    面向对象进阶:反射以及内置方法
    面向对象三大特性之多态、封装与装饰器
    面向对象的三大特性之继承
    python之面向对象
    python之内置函数
    python之迭代器,生成器以及列表推导式
    比较好用的linux命令
    使用redission实现分布式信号量以及遇到的一些坑
    linux一些命令
  • 原文地址:https://www.cnblogs.com/jacobz/p/2258827.html
Copyright © 2020-2023  润新知