【Lucene词汇解释】positionIncrement用法

  positionIncrement:这个字段决定当前token相对于上一个token的位置(当前token的位置就是上一个token位置的值与positionIncrement的值的和),它的作用主要体现在短语查询(phrase search).
  一般它的默认值是1.但是可以把它设置为0或者大于1的值,起作用分别如下:

  1. 当设置为0的时候是一个词有多个词干的情况下(这里指英文).短语查询对短语中的两个词之间的其它词的数量是有严格要求的,如果想进行严格匹配就可能限制为0,即两个词必须紧紧相连.这样如果不认为一个词产生的若干词干是在同一位置,就相当于认为他们是不同的词了,从而导致无法正确的匹配.举个例子说明,如果在建立索引的过程中出现了bound to这个句子,我们在对bound处理的时候会提取出两个词干,一个是bound本身,一个是bond.这个时候如果不进行特殊处理,保持positionIncrement的值不变,则由于提取出了两个词干导致先提取出的词干与to的位置间隔不为1,而是2.这样在我们进行短语查询”bound to”(假设先提出的词干是bound),由于在建立好的索引中boundto之间的相对距离为2,所以将不会返回结果,这样就导致了一种可能错误的结果,即用户希望查询时任何一个词干匹配成功都返回结果,而此时却不能实现.但是如果在处理bound产生的两个词干时把positionIncrement的值设置为0,则就会防止这种现象出现,因为两个词干中的任何一个与to的距离都是1;
  2. 当设置为大于1的值的时候是两个词中间有一个或多个停用词的情况下.在建立索引的过程中,两个词中间的停用此被去掉了,如果不进行特殊处理,则可能导致原本是被其它词分隔开的两个词的距离为1,因为这两个词之间的其它词都是停用词(a,an,the,are之类的)被过滤掉了.在这种情况下可能会出现在短语查询时本来是不应该匹配的却出现了返回结果,举个例子说明:如果在建立索引的过程中,如果有这样一段话:my name is steven,name steven在建立索引的过程中,由于is是停用词被过滤掉了,如果不进行特殊处理,则导致第一对namesteven之间的相对距离是1,这样在查询”name steven”,会出现两个匹配,但是我们并不想要这个匹配,而只想要第二个匹配,这样就出现了错误的结果,导致结果不准切多;这个时候如果在处理第一对namesteven时把positionIncrement的值设置为2,则就不会出现这种结果了;

  综上所述,当设置为0时候是为了增加有效的匹配,使得返回的结果更准;在设置为大于1,是为了减少错误的匹配,同样也是为了返回结果更加可信.


来源:http://hi.baidu.com/lewutian

posted @ 2011-11-25 14:58  爱开卷360  阅读(1077)  评论(1编辑  收藏  举报