【问题标题】:How to use MultiFieldQueryParser along with boost factor?如何使用 MultiFieldQueryParser 和提升因子?
【发布时间】:2013-06-06 05:49:12
【问题描述】:

我在 Lucene 中根据三个字段对文档进行了索引:titleaddresscity。现在我想构建我的查询,比如 C A B 以便我可以按如下方式检索文档:

C 必须出现在文档的 title 字段中,并且 AB 必须出现在匹配文档的 addresscity 字段中。在这两个字段中存在 A 的文档应该获得更高的分数或更高的提升。这里的ABC可以是单个词或词组。

我是 Lucene 的新手。我没有任何构建此类复杂查询的经验。在这种情况下,我已经阅读了Boost factor in MultiFieldQueryParser 的帖子 但是这篇文章没有回答我的问题。所以如果有人请帮我解决这个问题,我将非常感激。

【问题讨论】:

  • 您的想法是否类似于:+title: C +(address: A B city: A B)^2 其中2 是提升级别?

标签: lucene


【解决方案1】:

title:C AND (address:A^2 OR city:A^2 OR address:B OR city:B)

【讨论】:

    【解决方案2】:

    不要沉迷于阅读有关 MultiFieldQueryParser 的内容,这并不是您真正需要的。标准 QueryParser 语法将满足您的目的。

    请参阅 Lucene QueryParser syntax documentation

    这样的查询:

    +title:C +((address:A city:A)^2 address:B city:B)
    

    应该做得很好。

    稍微解释一下:

    +title:C - 需要匹配标题:C。不会返回不符合此条件的结果。

    +(....) - 要求匹配内部包含的子查询。只要在括号中包含的任何一个可选查询中找到匹配项,就可以满足。

    (address:A city:A)^2 - 您更喜欢 A 上的匹配项,这两个查询通过 ^2 得到了更大的提升。

    【讨论】:

    • 这里如果我使用 MultiFieldQueryParser 结果会出错吗?你能澄清一下吗?
    • 是的,MultiFieldQueryParser 旨在针对字段列表执行整个查询。因此,它不适合您的情况。如上所述,StandardQueryParser 将很好地满足您的目的。
    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 2012-02-09
    • 1970-01-01
    • 2015-08-21
    • 2015-03-20
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多