Verbesserung
Wichtig
Detail
Fehlerbehebung
Wichtig
Detail
Detail
#27440
Schnellsuche: Suche nach Phrasen und Termen mit (Lucene-) Steuerzeichen funktioniert nicht
Hintergrund
Der eingegebene Suchtext besteht aus Termen. Terme sind durch Leerzeichen getrennt. Es gibt 2 Arten von Termen: Worte und Phrasen. Eine Phrase sind mehrere Worte in doppelten Anführungszeichen. Steuerzeichen im eingegeben Text werden in der Schnellsuche automatisch escaped, und werden somit als Teil des gesuchten Textes interpretiert.
Problem
(1) Enthält der gesuchte Term ein von Lucene reserviertes Steuerzeichen (z.B. "+" oder "-"), werden keine Treffer gefunden: Die Suche nach der Rechnungsnummer **FDR-2023-0002** liefert keine Treffer, sollte aber die Rechnung finden.
(2) Wird nach einer Phrase gesucht, werden immer alle Objekte als Suchergebnis geliefert, obwohl sie den gesuchten Text nicht enthalten: Die Suche nach **"FDR-2023-0002"** liefert genauso alle Objekte wie eine Suche nach **"einem beliebigen String"**.
Test
- TL Demo starten
- Strukturen / Typendemo: Generieren
- Objekt A0 umbenennen in **xyz-abcz**
- Schnellsuche nach **xyz**: 1 Treffer -> korrekt.
- Schnellsuche nach **bcz**: 1 Treffer -> korrekt.
- Schnellsuche nach **xyz-abcz**: 0 Treffer -> falsch, 1 erwartet.
- Schnellsuche nach **"xyz-abcz"**: N Treffer -> falsch, 1 erwartet.
Bisherige Erkenntnisse
AbstractSearchCommand.getQueryConfiguration(String)
ruft
Query.getFullTextQuery(String searchText, boolean isAnd, boolean exactMatch)
mit dem Parameter
exactMatch = false
Dadurch wird die Query um einen führenden und schließenden '*' Character erweitert. Möglicherweise wird diese Erweiterung nicht korrekt interpretiert (=Bug in Lucene)?
Ändert man den Aufruf:
exactMatch=true
funktionieren obige Testfälle 1, 3 und 4 aber 2 nicht mehr, weil dann keine Substrings mehr gefunden werden.