Ich muss eine boolesche Abfrage mit ANDs, ORs und NOTs nur in ANDs und NOTs umwandeln. Alle meine ORs müssen in ANDs konvertiert werden, wobei natürlich die ursprüngliche Bedeutung beibehalten wird.Lucene: boolesche Abfragen mit ORs nur in ANDs umwandeln
Zum Beispiel:
a AND b AND (c OR d OR e)
Sollte auf mehrere getrennte Anfragen umgewandelt werden:
a AND b AND c
a AND b AND d
a AND b AND e
, die die gleiche logische Ergebnis ist, aber es ist nicht OPs verwendet wird. Ich habe viele verschiedene Ansätze ausprobiert, aber noch keine echte Lösung. Ich weiß, dass ich vielleicht De Morgans Gesetze gebrauchen könnte, aber ich habe noch keine Lösung gefunden.
Es ist wichtig zu beachten, dass ich jede Art von Abfrage konvertieren muss, nicht nur die in meinem Beispiel. Ich muss wirklich alles abdecken. Als weitere Beispiele (comma eine weitere Abfrage Bedeutung):
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
...
Dank!
EDIT: klare Beispiele:
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
In einer booleschen Logik würde es funktionieren, aber in meiner tatsächlichen Verwendung, die Boolesche Suche ist, würde es nicht funktionieren. Ich muss zum Beispiel nach einem AND (b OR c) auf Facebook suchen, und es wird nur ANDs akzeptieren, also ist "NOT a" keine Suchanfrage. In einem realen Beispiel, die Abfrage "Lucene AND (Solr OR hadoop)", konnte ich nicht nach "-lucene" und so weiter suchen, verstanden? – Ivan
oh ich sehe, ich habs – mduf