我需要將帶有AND,OR和NOT的布爾查詢轉換爲AND和NOT。我所有的ORs都需要轉換爲AND,顯然保持了原來的意思。Lucene:將帶有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
在布爾邏輯意義上,它會工作,但在我實際使用的是布爾搜索,它不會。例如,我需要在Facebook上搜索AND(b或c),它只接受AND,所以「NOT a」不是搜索查詢。在現實世界的例子中,查詢「lucene AND(solr OR hadoop)」,我無法搜索「-lucene」等等,知道了嗎? – Ivan
哦,我明白了,我陷入了困境 – mduf