`

对Lucene PhraseQuery的slop的理解

 
阅读更多

所谓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,表示quick fox 这两项之间最大可以 允许有一个单词的间隔,这样所有“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: 我们主要看lazy quick ,但是由于jumped 是在中间,所以移动的时候还是要把jumped 考虑在内,原句里lazy quick 关系 是: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 ”可以匹配到原句。

 

原文出自:http://www.haogongju.net/art/921633

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics