RONDHUIT REPORT Vol.5 – LUCENE 2.9 NEW FEATURES

Lucene 2.9 の新機能
2009 年 10 月 23 日
株式会社 ロンウイット
コンサルタント
アッタチョー トウンポン

はじめにれている。ドキュメントをインデックスに追加する

2009 年 9 月 26 日に最新版の「Apache Lucene 2.9」

とき、Lucene は新しいセグメントを作成し、必要にがリリースされた。本書はパフォーマンス向上等を応じてマージする。

目的として追加された一部の新機能を紹介する。
ソートに使用される FieldCache は、フィールド値をApache Lucene についてキャッシュする為の構造である。例えば、int、long、Lucene は、Java で書かれた高機能なオープンソース

String 等の基本データ型を格納・解釈することがでのテキスト全文検索エンジン・ライブラリである。

きる。

検索対象になるファイルを解析し、「インデックス」を作成する。インデックスを使用することによってLucene のほとんどのアプリケーションでは、インデ検索処理を高速化する。

ックスの更新時においてセグメントの変更がない。
つまり、多くのメモリ上の内部構造の変更がないの

現在の Lucene 2.9 はバーション 3.0 がリリースされである。 そのため、インデックスの更新後の検索でる前の最後のマイナーリリースである。バーションは、インデックス情報のメモリへのリロードを極力3.0 では Java 1.4 から Java 1.5 へ移行し、非推奨の少なくすることを目指すことで GC を抑止し、総合的機能を削除することを予定している。

なパフォーマンス向上に寄与することができるのである。

残念ながら Lucene 2.9 は 2.4.1 からの非互換な部分

New Features

が あ る 。 詳 し く は 、 CHANGES.txt の 「 Change inbackwards compatibility policy」で確認できる。

Lucene 2.9 の新しい機能を以下に紹介する。

過去の Lucene アプリケーション資産がある場合は、ドロップインを試みるより、Lucene 2.9 がある状態● 高速な IndexReader の取得

で再コンパイルする方がいいだろう。

Lucene 2.9 では IndexWriter.getReader()というメソッドが導入された。これによりほぼリアルタイム

Quick Backgroundにインデックス更新後の検索ができるようになった。

これから紹介する Lucene 2.9 の新機能について、まIndexReader.reopen()も併用することができる。さず簡単な知識を説明しよう。

らに IndexWriter.setMergedSegmentWarmer() を使用することによって、セグメントを"暖めて"おくこLucene のインデックスデータベースは、たくさんのとも可能である。

区分された"セグメント（Segment）"からなる。これ
らのセグメントには Terms、ポジション、ストアされ● 数値の範囲検索たテキスト等の情報がそれぞれのファイルに格納さ
Copyright © RONDHUIT Co.,Ltd.
1

RONDHUIT REPORT Vol.5 – LUCENE 2.9 NEW FEATURES

Lucene 2.9 の NumericRangeQuery により数値フィールドの範囲検索が高速化された。

この過程で生み出される Token はこれまでの Lucene
では固定の属性を保持するクラスであった。すなわ

これまで（Lucene 2.4 以前）は、フィールド値の種ち、Term テキスト、オフセット情報、位置増分、ペ類が多いフィールドを範囲検索すると、ディスク I/Oイロードなどである。2.9 では TokenStream がが増え、検索時間がかかってしまうという問題があ

AttributeSource のサブクラスとなった。

った。Lucene 2.9 ではインデックス上にトライ木構

AttributeSource は拡張可能な属性をサポートする造を展開し、範囲検索のスピードを向上させることが実行時のキャストが不要でそのため性能的にも優ができた。

れている。また、Token の再利用を促進している点でも GC を押さえることに貢献しており、やはりパフォーマンス向上に一役買っている。また、インデック
スに登録するデータをカスタマイズできるようにする将来構想「フレキシブルインデクシング（LUCENE-1458）」をも視野に入れた機能となっている。
● Collector
Lucene 2.9では、HitCollectorを非推奨にし、代わりにCollectorを使うようになった。

● 新しい QueryParser
contrib/queryparser ディレクトリの下に新しくより柔軟な QueryParser フレームワークが追加された。

Lucene 2.9のCollectorでは、collect()メソッドとこれまでの QueryParser はクエリの字句解析・構文score()メソッドが分別された為、collect()が呼ば解析を行うための部分が、JavaCC で書かれたソースれるときのスコア計算をスキップすることができるから生成された Java プログラムであったため、拡張ようになり、スコアが不要な場面では検索時間を高できる部分に制限があった。新しい QueryParser フ

速化できる。

レームワークでは、カスタマイズ可能な拡張プログ
ラマチック・コントロールを提供し、QueryNode と呼CollectorはドキュメントIDを引数にするcollect()ばれる中間の表現と構文(syntax)を分離している。

メソッドを持ち、Luceneがヒットしたドキュメントを見つけると呼ばれる。Collectorを実装したアプリ

なお、この新しい QueryParser は、3.0 で Lucene Core

ケーションは、必要時応じてScorerのscore()メソッに採用される予定である。

ドを呼び出すことができる。

● 新しい Attribute ベースの TokenStream API●地理空間情報

Tokenizer と TokenFilter のベースクラスである

地理空間情報は、Geo-Spatial(Geography-Spatial)

TokenStream が新しくなった。インデクシング時や検という機能である。この機能は、地理や地図を検索索時には、テキストを分析し、Token に変形する必要する為に使われている。つまり、距離に基づいた情がある。Tokenizer は、Reader からもらったテキス報や場所等を簡単に検索することができる機能であトを Token に分割し TokenFilter に渡す。

る。たとえば、家から 10km 以内にあるレストランをTokenFilter は、Tokenizer が作った Token を正規化

検索したいとき、Geo-Spatial は緯度経度情報を利用したり加工したり、といったことを行う。
Copyright © RONDHUIT Co.,Ltd.
2

RONDHUIT REPORT Vol.5 – LUCENE 2.9 NEW FEATURES

して位置が条件にマッチするレストランを表示できが可能である。また、図のような「多色タグ」でのる。

ハイライトが標準で装備されている。さらにスロップを考慮したフレーズ単位のタグ付けも行っている。

緯度/経度の Geo コードシステムとして Geohash（http://en.wikipedia.org/wiki/Geohash）が使われており、インデックスサイズ削減の為文字列を後ろから徐々に取り除くことが可能である。
● より使いやすくなった日本語サポート
最後に、弊社関口が「非 ASCII 言語圏のユーザにとって Lucene がより使いやすくなる」ための機能をLucene 2.9 に提供したので簡単に紹介しよう。
CharFilter

まとめ

これまでの Lucene は Reader からの文字列データを以上紹介した Lucene 2.9 の新機能は一部であり、すTokenizer が ト ー ク ナ イ ズ し 、 そ の 後 、 複 数 のべての変更内容については、CHANGES.txt を参照してTokenFilter が Token を変形したり切り捨てる、といいただきたい。

ったフィルタリングを行っていた。しかしこの方法
では Token 単位のフィルタリングに限定されてしま

Lucene 2.9 は、以前のバーションより多くの新しいうため、文字単位のフィルタリング（例：半角カタ機能が追加され、よりいっそうの高性能化と多くのカナを全角カタカナに正規化する）を行うためであ不具合修正がほどこされている。っても TokenFilter として実装する必要があった。
参考文献

新しい CharFilter フレームワークは、Reader をTokenizer に渡す前に文字単位のフィルタリングを

http://www.lucidimagination.com/行うことを可能にした。さらに CharFilter ではオリLucene in Action, 2nd Edition

ジナルのオフセット情報を記憶してオフセット自動

http://lucene.jugem.jp/

補正を行える仕組みを内蔵している。これにより、"ﬆ "（1 文字）を"st"（2 文字）にマッピング（正規化）してもハイライトがずれないようになっている。

（株）ロンウイットについて
ロンウイットはオープンソースの全文検索エンジン
Lucene /Solr を企業システムに導入する支援サー

FastVectorHighlighter
当初は contrib/highlighter2（略称：H2）として提ビス事業を展開している。

案されていたが、コミット間際になって Mark Miller

お問い合わせ先氏によって FastVectorHighlighter と名付けられた。

〒100-0005

名前の通り、Lucene の TermVector 機能を利用して巨

東京都千代田区丸の内 1-1-3 AIG ビル B1F

大な文書であっても高速にスニペットを返せるハイ

電話：03-5288-5927

ライタである。また CJK のような単語間がスペース

メール：sales@rondhuit.com

で分かち書きされない言語圏で多用される N-gram のホームページ：http://www.rondhuit.com/

Analyzer を使用している場合でも正確なハイライト
Copyright © RONDHUIT Co.,Ltd.
3

FAX：03-5288-5928