我需要将带有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。然后,析取的每一项都可以用作单独的搜索,并组合搜索结果。
尝试在谷歌上搜索“转换为析取范式”,以获取过程和示例。
https://stackoverflow.com/questions/42424038
复制相似问题