Oracle – search文本 – 检索结果的片段
我目前在Node JS Express和Oracle中构build一个简单的search页面。
我想向用户显示匹配文本的片段(第一个实例会这样做),以添加SQL所find的位的上下文。
例:
search词: 'fish'
结果: 亨利真的很喜欢去钓鱼 ,一旦他注意到…
我不确定最好的方式来处理这个问题 – 我可以检索整个文本块,并在Node JS中执行,但我不太喜欢将整个文本拖到应用程序的想法,只是为了得到片段。
我一直在想, REGEXP_SUBSTR
可以做到这一点…但我不确定是否可以使用正则expression式来检索匹配的单词之前和之后的x
个字符。
我有没有正确的想法,还是以错误的方式去解决?
谢谢
SELECT text , REGEXP_SUBSTR(LOWER(text), LOWER('fish')) AS potential_snippet FROM table WHERE LOWER(text) LIKE LOWER('%fish%');
尝试这个:
select text , SUBSTR( TEXT, INSTR(LOWER(TEXT),'fish', 1)-50,100 ) FROM test WHERE INSTR(LOWER(text),'fish', 1)<>0;
玩位置和长度数字(在我的例子中是50和100)来限制string的长度。
如果需要借助JavaScript提取一些上下文,则可以在正则expression式中使用限制量词:
/\b.{0,15}fish.{0,15}\b/i
看演示
这里,
-
\b
– 匹配单词边界(以便上下文只包含整个单词) -
.{0,15}
– 除换行符以外的任何字符(如果需要包含换行符,则用[\s\S]
或[^]
replace) -
fish
– 关键字
/i
修饰符启用不区分大小写的search。
如果您需要dynamic正则expression式创build,请使用构造函数表示法:
RegExp("\\b.{0,15}" + keyword + ".{0,15}\\b", "i");
另外,如果您需要查找多个匹配,请在i
旁边使用g
修饰符。