我想要特定格式的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是0到9999之间的数字
我使用hl.regex.slop = 0.6而我的hl.fragsize = 120及以下是正则表达式 这一点。
\b(?=\s*\d{1,4}s:){50,200}
使用上面的正则表达式,我的片段始终不以ns:
开头请在此建议我,我如何实现最终计划
由于
答案 0 :(得分:1)
您可以通过将每个ns处正在搜索的文本临时拆分为行来大大简化您的方法(需要更简单的正则表达式)。
实施例
130秒:听!听着!然后进行正则表达式搜索,这变得更简单:
(^\d{1,4})(s: .*?)(SEARCHPATTERN)(.*)
然后抓住前一行和下一行(在这种情况下,SEARCHPATTERN是HEAR)。为了更快地找到前一行和后一行(无需回溯和向前搜索),您可以填充一个散列图,其中所有\ d {1,4}行的开头键入其行号。
带行号的hashmap(我的符号只是概念性的)
“130”=&gt; 1
“138”=&gt; 2
“143”=&gt; 3
“144”=&gt; 4
“152”=&gt; 5
你的正则表达式告诉你搜索词是以144开头的行(正则表达式中的组1),你的hashmap告诉你的是第4行,所以你知道你必须得到第3行和第5行正则表达式匹配的组。
结果= <str>line3 + \1 + \2 + <em>\3</em>\4 + line5</str>
注意:我不是solr用户,所以我的正则表达式语法和示例结果字符串应该作为一般的想法。我不知道solr是否有自己的符号。