2017-02-23 55 views
0

我需要將帶有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 

回答

1

聽起來像您需要將搜索表達式轉換爲disjunctive normal form。然後,每個析取項可以作爲單獨的搜索使用,並將搜索結果合併。

嘗試谷歌搜索「轉換爲析取正常形式」的過程和示例。

0

每當你遇到一個

E = a OR b 

那麼你可以轉換或操作一個與組合這些

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) 
+0

在布爾邏輯意義上,它會工作,但在我實際使用的是布爾搜索,它不會。例如,我需要在Facebook上搜索AND(b或c),它只接受AND,所以「NOT a」不是搜索查詢。在現實世界的例子中,查詢「lucene AND(solr OR hadoop)」,我無法搜索「-lucene」等等,知道了嗎? – Ivan

+0

哦,我明白了,我陷入了困境 – mduf