Ich habe einen Web-Service in Java, der Suchen auf einer Oracle 12c Datenbank durchführt. Das Problem ist, ich habe eine CONTAINS()
Suche:Oracle Database 12c: Wie bekomme ich auch den Ergebnisindex von einer Suche enthält
String query = "select * from sys.my_table WHERE CONTAINS(my_clob_field, '" + searchString + "', 1) > 0";
aber ich mag auch den Index (n) des Suchwortes oder eine Phrase innerhalb der Ergebnisse erhalten.
Derzeit habe ich versucht, jedes der zurückgegebenen Suchergebnisse und durchlaufen sie durch eine Suche REGEX in Java, um die Start- und Stoppindizes zu finden, die benötigt werden, um das Suchergebnis am Frontend zu markieren.
Dies funktioniert für normalen Text in Ordnung, aber wenn die Voraussetzung ist, dass der Benutzer für jede zufällige Anordnung von beliebigen Zeichen suchen kann (dh < # @ (F #> <) $ *> /\./# &!) #} {}] [s fdf) Die Java-Suche muss auch diese exakte Zeichenfolge finden und den Start- und Stoppindex zurückgeben.
Ich entziffere alle Sonderzeichen für die Oracle-Suche, aber für die Java-Suche wird ein ganz anderer Satz von Regeln benötigt, um den Index zu finden. Der Versuch, sie in Übereinstimmung zu bringen, hat sich als Albtraum herausgestellt, und in der Regel findet die Java-Suche nicht die gleichen Vorkommnisse wie die Oracle-Datenbanksuche. Ich glaube, dass der Ansatz, den ich mache, völlig falsch ist, und es sollte einen einfachen Weg geben, um auch die Indizes des Auftretens des Suchworts (oder -satzes) zu erhalten.
TL; DR: Wenn eine CONTAINS()
Suche durchgeführt wird, wie könnte ich auch die Indizes der Suche Wort oder eine Phrase in den zurückgegebenen Suchergebnisse nur eine Oracle-Datenbank-Abfrage mit finden (so habe ich nicht zu sich Sorgen machen, dass die Suchergebnisse nicht mit einem REGEX-Mismatch übereinstimmen)?
'sys.my_table' ??? Erstellen Sie keine eigenen Tabellen im 'SYS' Tablespace. Tu es einfach nicht. Und verwenden Sie 'SYS' oder' SYSTEM' nicht für regelmäßige Arbeit. Erstellen Sie einen normalen Benutzer und legen Sie Ihre Anwendungsdaten in den 'USERS'-Tablespace (oder erstellen Sie einen neuen). Verwenden Sie ** ** nicht ** das Systemkonto oder die Tablespaces für Ihre Anwendungsdaten. –