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

为了。例如,用户搜索词 hear ,然后一个典型的高亮片段应该如下所示

<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 开头:

请就此提出建议,我怎样才能实现最终计划

谢谢

4

1 回答 1

1

您可以通过将您正在搜索的文本在每个 ns.

例子

130s:听!听!
138s:[砰]
143s:那是什么?
144s:听到了吗?
152s:每个人,嘘。嘘。

然后进行正则表达式搜索,这会变得更简单:

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

然后抓取前一行和下一行(在本例中 SEARCHPATTERN 为 HEAR)。为了更快地找到前一行和后一行(无需回溯和向前搜索),您可以使用所有 \d{1,4} 行开头键入其行号来填充哈希图。

带有行号的哈希图(我的符号只是概念性的)

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

您的正则表达式告诉您搜索词位于以 144 开头的行(正则表达式中的第 1 组),您的哈希图告诉您这是第 4 行,因此您知道除了匹配的组之外,您还必须获取第 3 行和第 5 行正则表达式。

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

注意:我不是 solr 用户,所以我的正则表达式语法和示例结果字符串应该作为总体思路。我不知道 solr 是否有自己的符号。

于 2012-12-14T04:44:33.170 回答