【问题标题】:Lucene Proximity Search for phrase with more than two wordsLucene Proximity 搜索超过两个词的短语
【发布时间】:2014-10-22 20:53:22
【问题描述】:

Lucene 的手册中已经清楚地解释了邻近搜索的含义,包括两个词的短语,例如 "jakarta apache"~10 中的示例 http://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Proximity Searches

但是,我想知道像 "jakarta apache lucene"~10 这样的搜索到底有什么作用?它是否允许相邻的单词最多相隔 10 个单词,或者所有成对的单词都是这样?

谢谢!

【问题讨论】:

    标签: java search lucene proximity


    【解决方案1】:

    斜率(接近)的作用类似于编辑距离(请参阅PhraseQuery.setSlop)。因此,这些条款可以重新排序或添加额外的条款。这意味着接近度将是添加到整个查询中的最大术语数。那就是:

    "jakarta apache lucene"~3
    

    将匹配:

    • “jakarta lucene apache”(距离:2)
    • “jakarta extra words here apache lucene”(距离:3)
    • "jakarta some words apache separator lucene"(距离:3)

    但不是:

    • “lucene jakarta apache”(距离:4)
    • "jakarta too many extra words here apache lucene"(距离:5)
    • “jakarta some words apache进一步分隔lucene”(距离:4)

    有些人被以下的困惑:

    “lucene jakarta apache”(距离:4)

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

    1. jakarta apache lucene(距离:0)
    2. jakarta lucene apache(第一次交换,距离:2)
    3. lucene jakarta apache(第二次交换,距离:4)

    更长但更准确的解释是,每次编辑都允许将术语移动一个位置。交换的第一步将两个术语相互交换。牢记这一点可以解释为什么任何三个术语的集合都可以重新排列成距离不大于 4 的任何顺序。

    1. jakarta apache lucene(距离:0)
    2. 雅加达 [apache,lucene](距离:1)
    3. [jakarta,apache,lucene](全部转置在同一个位置,距离:2)
    4. lucene [jakarta,apache](距离:3)
    5. lucene jakarta apache(距离:4)

    【讨论】:

    • 无法找到在 java 中搜索超过 2 个术语的工作代码示例。所有示例都在 2 个单词搜索上。如果您有任何代码示例,可以分享一下吗?
    • 我从以下链接扩展了示例并添加了第三个术语,但它不起作用。 javacodegeeks.com/2015/09/…
    • “一二三四”和“三四一二”的距离是多少?
    • 查询词默认必须与文档中的顺序一致。例如,"jakarta apache"~10 不会匹配“download apache project jakarta”,但会匹配“download jakarta from apache”。您可以通过parser.setInOrder(false) 关闭邻近订单要求,请参阅文档:lucene.apache.org/core/5_2_1/queryparser/org/apache/lucene/…
    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多