【问题标题】:Nested BooleanQuery?嵌套布尔查询?
【发布时间】:2011-02-19 00:22:33
【问题描述】:

我正在使用 BooleanQuery 来组合多个查询。我发现如果我将 BooleanQuery 添加到 BooleanQuery,则不会返回任何结果。添加的 BooleanQuery 是 MUST_NOT 之一,例如 -city_id:100。

但正如 lucene 的规范所说,BooleanQuery 可以嵌套,我认为这意味着添加这样的 BooleanQuery 是可以的。现在我要从 BooleanQuery 中获取所有要添加的子句,然后将它们一一添加到容器 BooleanQuery 中。

我有点困惑。有人可以帮忙吗?非常感谢!

【问题讨论】:

    标签: lucene


    【解决方案1】:

    Lucene 不支持一元 NOT 运算符。但是您可以通过与MatchAllDocsQuery 进行与运算来获得此类查询的结果。

    【讨论】:

    • 啊,看来可以了。谢谢。但这不是令人困惑吗?我将 BooleanQuery 添加到 BooleanQuery,但我仍然需要检查要添加的查询是否有 AND 一些查询。此外,在这种情况下 ANDing MatchAllDocsQuery 是否会破坏性能?
    • 您可以在此线程上阅读有关布尔查询特性的信息。 search-lucene.com/m/8x64lENo571 本质上,NOT 只是抑制文档。您需要另一个积极的设置才能使用它。我不知道 MatchAllDocsQuery 的实现细节,但 gettig 所有文档应该足够快。附加的 ANDing 操作应该很快,并且在内部它对 bitset 的操作。
    • 对上一条评论中的断句表示歉意。
    猜你喜欢
    • 2018-04-28
    • 2018-08-13
    • 2017-08-31
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多