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

にとって。たとえば、ユーザーが「聞く」という用語を検索した場合、1つの典型的なハイライトフラグメントは次のようになります。

<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: みんな、SHH。シーッ。

次に、より簡単になる正規表現検索を実行します。

(^\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 に答える