Oracle - 搜索文本 - 检索结果片段

时间:2015-09-18 10:37:09

标签: regex node.js oracle search

我目前正在Node JS Express和Oracle中构建一个简单的搜索页面。

我希望向用户显示匹配文本的片段(第一个实例会这样做),以添加SQL找到的上下文。

示例:

搜索字词:' fish'

结果:亨利真的很喜欢 ing,一旦他发出警告......

我不确定解决此问题的最佳方法 - 我可以检索整个文本块并在Node JS中执行,但我不是非常喜欢将整个文本拖到应用程序,只是为了得到一个片段。

我一直在想REGEXP_SUBSTR可以做到这一点......但我不确定我是否可以使用正则表达式来检索x个字符数量匹配词之前和之后。

我是否有正确的想法,或者我是以错误的方式解决这个问题?

由于

SELECT text
     , REGEXP_SUBSTR(LOWER(text), LOWER('fish')) AS potential_snippet
  FROM table
 WHERE LOWER(text) LIKE LOWER('%fish%');

2 个答案:

答案 0 :(得分:1)

试试这个:

select text
     , SUBSTR( TEXT, INSTR(LOWER(TEXT),'fish', 1)-50,100 )
  FROM test
 WHERE INSTR(LOWER(text),'fish', 1)<>0;

使用位置和长度数字(在我的示例中为50和100)来限制字符串的长度。

答案 1 :(得分:1)

如果你需要在JavaScript的帮助下提取一些上下文,你可以在正则表达式中使用限制量词:

/\b.{0,15}fish.{0,15}\b/i

请参阅demo

下面,

  • \b - 在单词边界处匹配(以便上下文仅包含整个单词)
  • .{0,15} - 换行以外的任何字符(如果需要包含换行符,请替换为[\s\S][^]
  • fish - 关键字

/i修饰符可启用不区分大小写的搜索。

如果需要动态正则表达式创建,请使用构造函数表示法:

RegExp("\\b.{0,15}" + keyword + ".{0,15}\\b", "i");

此外,如果您需要查找多个匹配项,请在g旁边使用i修饰符。