Oracle Database 12c:如何从包含搜索中获取结果索引

Joh*_*ohn 9 java regex database oracle

我有一个Java服务,可以在Oracle 12c数据库上执行搜索.问题是我有一个CONTAINS()搜索:

String query = "select * from sys.my_table WHERE CONTAINS(my_clob_field, '" + searchString + "', 1) > 0";
Run Code Online (Sandbox Code Playgroud)

但我也想得到结果中搜索词或短语的索引.

目前我尝试过的是获取每个返回的搜索结果并通过它们在Java中执行REGEX搜索,以找到在前端突出显示搜索结果所需的开始和停止索引.

这适用于常规文本,但如果要求用户可以搜索任何字符的任意随机排列(即#<@(F#> <)$*> /\ ./#&!)#} {}] [ s fdf)Java搜索还需要找到确切的字符串并返回开始和停止索引.

我为Oracle搜索排除了任何特殊字符,但是Java搜索需要一组完全不同的规则才能找到索引.试图让它们匹配已经证明是一场噩梦,通常Java REGEX搜索找不到Oracle数据库搜索找到的相同事件.我相信我采取的方法是完全错误的,并且应该有一些简单的方法来获取hte搜索词(或短语)出现的索引.

TL; DR:当执行一个CONTAINS()搜索,我怎么可能发现仅使用Oracle数据库查询返回的搜索结果中的搜索词或短语的指标(所以我不担心失去搜索结果正则表达式匹配)?

aar*_*ler 1

也许您正在寻找类似REGEXP_INSTR()的东西?如果不匹配,它将返回零,否则返回匹配子字符串的第一个字符(或后面的第一个字符)的位置。

select 
  mytab.*,
  regexp_substr(my_clob_field, searchString),
  regexp_instr(my_clob_field, searchString)
from sys.my_table mytab
WHERE CONTAINS(my_clob_field, '" + searchString + "', 1) > 0
Run Code Online (Sandbox Code Playgroud)