Lucene Proximity搜索超过两个单词的短语
Lucene的手册解释了邻近搜索有两个单词的短语的含义,例如http://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Proximity Searches
的"jakarta apache"~10
例子
但是,我想知道像"jakarta apache lucene"~10
这样的搜索到底是做什么的? 它是否允许相邻单词最多相隔10个单词,或者所有单词对是否相同?
谢谢!
PhraseQuery.setSlop
(邻近)的工作方式类似于编辑距离(请参阅PhraseQuery.setSlop
)。 因此,这些条款可以重新排序或添加额外的条款。 这意味着接近度将是添加到整个查询中的最大术语数。 那是:
"jakarta apache lucene"~3
将匹配:
- “jakarta lucene apache”(距离:2)
- “jakarta extra words here apache lucene”(距离:3)
- “jakarta一些单词apache分开lucene”(距离:3)
但不是:
- “lucene jakarta apache”(距离:4)
- “jakarta这里有太多额外的词语apache lucene”(距离:5)
- “jakarta一些单词apache进一步分离lucene”(距离:4)
有些人对此感到困惑:
“lucene jakarta apache”(距离:4)
简单的解释是,交换术语需要两次编辑,因此:
- jakarta apache lucene(距离:0)
- 雅加达lucene apache(第一次交换,距离:2)
- lucene jakarta apache(第二次交换,距离:4)
更长但更准确的解释是每次编辑都允许一个术语移动一个位置。 交换的第一步将两个术语相互转换。 记住这一点可以解释为什么任何三个术语都可以重新排列成距离不大于4的任何顺序。
- jakarta apache lucene(距离:0)
- 雅加达[apache,lucene](距离:1)
- [jakarta,apache,lucene](全部换位于同一位置,距离:2)
- lucene [雅加达,阿帕奇](距离:3)
- lucene jakarta apache(距离:4)