論理和、論理和、論理和を論理値とし、論理和と論理和のみに変換する必要があります。私のすべての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
ブール論理の意味では機能しますが、実際のブール検索ではそうではありません。たとえば、Facebook上でAND(b OR c)を検索する必要があります。ANDを受け入れるだけなので、 "NOT a"は検索クエリではありません。現実の世界の例では、 "lucene AND(solr OR hadoop)"というクエリでは "-lucene"を検索できませんでした。 – Ivan
ああ、私はつかまえた – mduf