Luceneを使ってきて、今回初めてHighlighterの機能を試そうとしてうまく行かず、重要な事実に初めて気がついた。知らなかったのだが、表題の通りだ。Luceneでは元文書を一つのTokenizer、複数のフィルターで処理してTermを取得するのだが、このTokenizerの選択が元文書のオフセット位置に影響してしまう。次の二つのテストを見てみる。両者ともに入力は「吾輩は猫である」だ。前者では、NGramTokenizerのみを使用している。後者ではWhitespaceTokenizerの後にNGramFilterを使用している。}入力文には空白が無いので、どちらも同じ結果かと思いきや、結果は以下だ。0:7後者では、常に取得位置が0,7になってしまっている。WhitespaceTokenizerが0,7位置しか返していないせいだ。この状態でHighlighterを使うと、当然ながら常に0.7の範囲をハイライトしてしまう。TokenizerとTokenFilterの違いがなぜあるのか理解できなかったのだが、ここに来て重大な違いのあることがわかった。Cookbookの例をアレンジしてみた。longの場合はfacet用ディレクトリは不要のようだ。以下のようなエラーが発生した。Luceneでクエリ時にJOINを行う例である。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。