2017-02-23 12 views
0

論理和、論理和、論理和を論理値とし、論理和と論理和のみに変換する必要があります。私のすべてのORは、明らかに元の意味を維持して、ANDに変換する必要があります。例えばLucene:論理和を論理和と論理和のみに変換する

:同じ論理の結果を持っている

a AND b AND c 
a AND b AND d 
a AND b AND e 

を、それは論理和を使用していません。

a AND b AND (c OR d OR e) 

は、いくつかの分離のクエリに変換する必要があります。 私は多くの異なるアプローチを試しましたが、実際の解決策はまだありません。 私はデ・モルガンの法則を使うかもしれないが、まだ解決法を見つけていないことを知っている。

私の例だけでなく、あらゆる種類のクエリを変換する必要があることに注意することが重要です。私は本当にすべてをカバーしなければならない。 他の例(カンマは別のクエリを意味します):

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 
... 

ありがとう!

EDIT: より明確例:

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 

に遭遇するたびに、あなたはあなたがそうNOTと

E = NOT NOT E 
E = NOT NOT (a OR b) 
E = NOT (NOT a AND NOT b) 

のANDに変換したり、操作することができます」例は以下のように変換されます:

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 OR c)を検索する必要があります。ANDを受け入れるだけなので、 "NOT a"は検索クエリではありません。現実の世界の例では、 "lucene AND(solr OR hadoop)"というクエリでは "-lucene"を検索できませんでした。 – Ivan

+0

ああ、私はつかまえた – mduf

関連する問題