Python中文网

一个关于 编程问题的解答网站.

有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Lucene:将带有ORs的布尔查询转换为只包含ANDs的查询

我需要将一个带and、OR和NOT的布尔查询转换为仅带and和NOT的布尔查询。我所有的ORs都需要转换为ANDs,显然要保持原意

例如:

a AND b AND (c OR d OR e)

应转换为几个单独的查询:

a AND b AND c
a AND b AND d
a AND b AND e

它有相同的逻辑结果,但不使用OR。 我尝试了很多不同的方法,但还没有真正的解决方案。 我知道我可能会用到一些德摩根定律,但还没有找到解决办法

需要注意的是,我需要转换任何类型的查询,而不仅仅是我示例中的查询。我真的要把一切都讲清楚。 其他示例(逗号表示另一个查询):

a OR b > a, b
a AND (b OR c) > a AND b, a AND c
a OR (b AND (c OR d)) > a, b AND c, b AND d
...

谢谢

编辑: 更明确的例子:

lucene AND (solr OR hadoop) > lucene AND solr, lucene AND hadoop
stackoverflow AND (java OR lucene) -solr > stackoverflow AND java -solr, stackoverflow AND lucene -solr

共 (1) 个答案

  1. # 1 楼答案

    听起来您需要将搜索表达式转换为disjunctive normal form。然后,可以将析取的每个词用作单独的搜索,并将搜索结果合并

    尝试在谷歌上搜索“转换为析取范式”的过程和示例