2012-10-12 76 views
2

我想solr突出显示特定格式。正则表达式片段获取高亮

下面是字符串格式,我需要提供突出显示功能

130s: LISTEN! LISTEN! 138s: [THUMP] 143s: WHAT IS THAT? 144s: HEAR THAT? 
152s: EVERYBODY, SHH. SHH. 156s: STAY UP THERE. 163s: [BOAT CREAKING] 165s: 
WHAT IS THAT? 167s: [SCREAMING] 191s: COME ON! 192s: OH, GOD! 193s: AAH! 
249s: OK. WE'VE HAD SOME PROBLEMS 253s: AT THE FACILITY. 253s: WHAT WE'RE 
ATTEMPTING TO ACHIEVE 256s: HERE HAS NEVER BEEN DONE. 256s: WE'RE THIS CLOSE 
259s: TO THE REACTIVATION 259s: OF A HUMAN BRAIN CELL. 260s: DOCTOR, THE 200 
MILLION 264s: I'VE SUNK INTO THIS COMPANY 264s: IS DUE IN GREAT PART 266s: 
TO YOUR RESEARCH. 

用户搜索后,我想提供用户片段如下格式

Previous Line of Highlight + Line containing Highlight + Next Line of 
Highlight 

有关。例如。用户搜索项听到的,然后一个典型的重头戏片段 应该有如下上述

<str>143s: WHAT IS THAT? 144s: <em>HEAR</em> THAT? 152s: EVERYBODY, SHH. 
SHH.</str> 

是我的最终计划,但现在我想获得片段, 与NS启动:其中n是numner 0到9999之间

我使用hl.regex.slop = 0.6和我的hl.fragsize = 120以下是 的正则表达式。

\b(?=\s*\d{1,4}s:){50,200} 

使用上述正则表达式我的片段始终不与NS启动:

请建议我在此,我怎么能取得最终的计划

感谢

回答

1

您也许能够大大简化你的方法(要求更简单的正则表达式),方法是每隔ns将搜索的文本暂时分割成几行。

示例

130s:LISTEN!听!
138s:[THUMP]
143s:这是什么?
144s:听到这个?
152s:EVERYBODY,SHH。 SHH。

然后执行正则表达式的搜索,这得到更简单的:

(^\d{1,4})(s: .*?)(SEARCHPATTERN)(.*)

然后抓住前一行和下面的行(在本情况下是searchPattern是HEAR)。为了更快地找到上一行和下一行(无需向后搜索和向前搜索),可以使用键入其行号的所有\ d {1,4}行开头填充散列表。

散列映射与行号(我的符号是概念性只)

“130”=> 1
“138”=> 2
“143”=> 3
“144”=> 4
“152”=> 5

你的正则表达式告诉你,搜索词在144行(正则表达式组1)的行上,你的hashmap告诉你是第4行,所以你知道你必须得到第3行和第5行除了由正则表达式匹配的组。

结果= <str>line3 + \1 + \2 + <em>\3</em>\4 + line5</str>

注:我不是一个Solr的用户,所以我的正则表达式语法和示例结果字符串应该被视为一般的想法。我不知道solr是否有自己的符号。

+0

谢谢@DWright,我会试试这个,让你知道! – meghana