我需要将带有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。我尝试了很多不同的方法,但还没有真正的解决方案。我知道我也许可以使用一些德摩根定律,但还没有找到解决方案。
需要注意的是,我需要转换任何类型的查询,而不仅仅是我的示例中的查询。我真的要把所有的东西都包起来。作为其他示例(逗号表示另一个查询):
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发布于 2017-02-24 10:00:15
听起来您需要将搜索表达式转换为disjunctive normal form。然后,析取的每一项都可以用作单独的搜索,并组合搜索结果。
尝试在谷歌上搜索“转换为析取范式”,以获取过程和示例。
发布于 2017-02-24 03:14:48
每当你遇到一个
E = a OR b 然后,您可以将OR运算转换为NOTs的AND
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)https://stackoverflow.com/questions/42424038
复制相似问题