fc2ブログ

Solr3.1のハイライト処理について、「ヒットしたキーワードより前の部分が6文字固定になってしまう」

Solr3.1のハイライト処理について、「ヒットしたキーワードより前の部分が6文字固定になってしまう」という問題が発覚。

「今日は朝から良い天気です。」の場合、「天気」で検索すると、「は朝から良い<em>天気</em>です。」になってしまう。
(hl.fragsizeの値には関係ない。)

という件で悩んでいたところ、なんとあの「Apache Solr入門」の著者@johtaniさんから回答を頂きました。
ありがとうございます!感謝感謝です!!

← 愛読させて頂いております。
以下が問題の箇所のようです。

SimpleFragListBuilder.java
public static final int MARGIN = 6;

int st = phraseInfo.getStartOffset() - MARGIN < startOffset ?
startOffset : phraseInfo.getStartOffset() - MARGIN;
int en = st + fragCharSize;
if( phraseInfo.getEndOffset() > en )
en = phraseInfo.getEndOffset();
startOffset = en;


stがハイライトの先頭、startOffsetが処理を行う文書の先頭のようです。
ハイライトの先頭が文書の先頭よりある程度近い場合は、思い切って文書の先頭からスニペットとするように、以下のように改造します。
(ここでは、文書の先頭から20+6文字以内にヒットした場合は先頭からスニペットとする、とします。)

public static final int MARGIN = 6;

int st = phraseInfo.getStartOffset() - MARGIN < startOffset ?
startOffset : phraseInfo.getStartOffset() - MARGIN;
int en = st + fragCharSize;

if( st - startOffset < 20 )
st = startOffset;

if( phraseInfo.getEndOffset() > en )
en = phraseInfo.getEndOffset();
startOffset = en;


単語の切れ目で分割するのが望ましいのですが、それでは折角の高速ハイライターの意味がなくなってしまいます。
しかしながら、(猿知恵ですが)これでせめて先頭だけでも切れ良くしておきます。


追伸:@shinobu_aoki さん、いつも相談に乗っていただき、ありがとうございます。
スポンサーサイト



コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
リンク
exabugsをフォローしましょう