Solr3.1のハイライト処理について、「ヒットしたキーワードより前の部分が6文字固定になってしまう」
Solr3.1のハイライト処理について、「ヒットしたキーワードより前の部分が6文字固定になってしまう」という問題が発覚。
「今日は朝から良い天気です。」の場合、「天気」で検索すると、「は朝から良い<em>天気</em>です。」になってしまう。
(hl.fragsizeの値には関係ない。)
という件で悩んでいたところ、なんとあの「Apache Solr入門」の著者@johtaniさんから回答を頂きました。
ありがとうございます!感謝感謝です!!
← 愛読させて頂いております。
「今日は朝から良い天気です。」の場合、「天気」で検索すると、「は朝から良い<em>天気</em>です。」になってしまう。
(hl.fragsizeの値には関係ない。)
という件で悩んでいたところ、なんとあの「Apache Solr入門」の著者@johtaniさんから回答を頂きました。
ありがとうございます!感謝感謝です!!
← 愛読させて頂いております。
以下が問題の箇所のようです。
SimpleFragListBuilder.java
stがハイライトの先頭、startOffsetが処理を行う文書の先頭のようです。
ハイライトの先頭が文書の先頭よりある程度近い場合は、思い切って文書の先頭からスニペットとするように、以下のように改造します。
(ここでは、文書の先頭から20+6文字以内にヒットした場合は先頭からスニペットとする、とします。)
単語の切れ目で分割するのが望ましいのですが、それでは折角の高速ハイライターの意味がなくなってしまいます。
しかしながら、(猿知恵ですが)これでせめて先頭だけでも切れ良くしておきます。
追伸:@shinobu_aoki さん、いつも相談に乗っていただき、ありがとうございます。
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 さん、いつも相談に乗っていただき、ありがとうございます。
スポンサーサイト