在查询如:title:"市场 价格"~5的时候,意思是title包括市场和价格并且市场和价格之前的距离不能大于5.如果查询title:"市场 价格 市场"~5,说明市场后面有价格,价格后面还要有市场,否则没有结果。
主要代码如下:
进入PhraseWeight.score()方法:
接着进入Scorer.score()方法中:
在这个方法可以看到matchLength和slop进行比较了。pq的heap(父类的属性)里面存放的是每个term所在field中的位置和该field属于哪个文档的信息:如heap[0]=d:0 o:0 p:7 c:0表示offset为0的term在dicid为0的文档中的当前查询field中的第7个位置,在该field中该term剩余count数量为0,即freq的大小,heap[1]=d:0 o:1 p:11 c:0。