Sagen wir, wir haben einen Lucene-Index mit einigen indizierten Dokumenten, die mit StopAnalyzer.ENGLISH_STOP_WORDS_SET
indiziert wurden. Ein Benutzer gibt zwei Abfragen ein:
foo:bar
baz:"there is"
Angenommen, die erste Abfrage liefert einige Ergebnisse, weil es Dokumente gibt, die der Abfrage entsprechen.
Die zweite Abfrage liefert 0 Ergebnisse. Der Grund dafür ist, dass bei der Analyse von baz:"there is"
die Abfrage als nichtig endet, da sowohl there als auch is Stoppwörter sind (technisch gesehen wird dies in eine leere BooleanQuery
umgewandelt, die keine Klauseln hat). Soweit so gut.
Jedoch verhalten sich alle folgenden kombinierten Abfragen genau gleich wie die Abfrage +foo:bar
, das heißt, sie bringen einige Ergebnisse zurück - trotz des zweiten AND
-Teils, der keine Ergebnisse liefert.
Man könnte argumentieren, dass bei einem UND beide Bedingungen erfüllt sein müssen, aber das sind sie nicht.
Es scheint widersprüchlich zu sein, da ein einzelner Abfragebestandteil je nach Kontext unterschiedliche Auswirkungen auf die Gesamtabfrage hat. Gibt es hierfür eine logische Erklärung? Kann dies auf irgendeine Weise angegangen werden, bevorzugt ohne die QueryAnalyzer
selbst zu schreiben? Kann dies als Lucene-Bug klassifiziert werden?
Falls dies eine Rolle spielt, tritt das beobachtete Verhalten unter Lucene v3.0.2 auf.
Diese Frage wurde auch in der Lucene Java-Benutzer-Mailingliste veröffentlicht, bisher sind keine Antworten eingegangen.