我需要将带有AND,OR和NOT的布尔查询转换为仅AND和NOT。我的所有OR都需要转换为AND,显然保持原有的含义。
例如:
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。 我尝试了很多不同的方法,但还没有真正的解决方案。 我知道我可以使用一些De Morgan定律,但还没有找到解决方案。
重要的是要注意我需要转换任何类型的查询,而不仅仅是我的示例中的查询。我必须真正涵盖这一切。 作为其他示例(逗号意味着另一个查询):
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
答案 0 :(得分:1)
听起来您需要将搜索表达式转换为disjunctive normal form。然后,每个分离项可以用作单独的搜索,并将搜索结果组合在一起。
尝试谷歌搜索“转换为析取正常形式”的流程和示例。
答案 1 :(得分:0)
每当遇到
时E = a OR b
然后你可以将OR运算转换为AND的NOTs
E = NOT NOT E
E = NOT NOT (a OR b)
E = NOT (NOT a AND NOT b)
所以你的例子将被转换如下:
E = a AND b AND (c OR d OR e)
E = a AND b AND NOT NOT (c OR d OR e)
E = a AND b AND NOT (NOT c AND NOT d AND NOT e)