Lucene Proximity搜索超过两个单词的短语

时间:2014-08-28 21:19:21

标签: java search lucene proximity

Lucene的手册已经解释了接近搜索具有两个单词的短语的含义,例如"jakarta apache"~10示例 http://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Proximity Searches

但是,我想知道像"jakarta apache lucene"~10这样的搜索究竟做了什么?它是否允许相邻单词最多相隔10个单词,或者所有单词对是否相同?

谢谢!

1 个答案:

答案 0 :(得分:9)

slop(proximity)就像编辑距离(参见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)

简单的解释是,交换术语需要两次编辑,所以:

  1. jakarta apache lucene(距离:0)
  2. jakarta lucene apache(第一次交换,距离:2)
  3. lucene jakarta apache(第二次交换,距离:4)
  4. 更长但更准确的解释是,每次编辑都允许将一个术语移动一个位置。交换的第一步将两个术语相互转换。记住这一点可以解释为什么任何一组三个术语都可以重新排列成距离不大于4的任何顺序。

    1. jakarta apache lucene(距离:0)
    2. jakarta [apache,lucene](距离:1)
    3. [jakarta,apache,lucene](全部换位于同一位置,距离:2)
    4. lucene [jakarta,apache](距离:3)
    5. lucene jakarta apache(距离:4)