関口宏司のLuceneブログ

OSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
<< CJKAnalyzerを使って強調表示を行う | main | NGramTokenizerとEdgeNGramTokenFilter >>
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | | - | - |
deprecatedとなったQueryFilter
ここ数回にわたってLucene 2.2の新機能を紹介してきたが(まだ紹介していない機能は別の回にまわす)、今回はLucene 2.2でdeprecatedとなった機能であるQueryFilterについて説明しよう。

QueryFilterはインデックスのドキュメントを「篩(ふるい)」にかけるFilterの一種で、同じFilterの一種であるCachingWrapperFilterのように、以前作成したBitSetオブジェクトを保存するキャッシュを内蔵するFilterである。Filter(抽象クラス)、QueryFilterおよびCachingWrapperFilterの関係はLucene 2.1までは図Aのようであった。

Lucene 2.1まで

Lucene本のP207-211にはそれぞれのFilterについて説明があるが、本を書いた当時は同じキャッシュのコードがQueryFilterとCachingWrapperFilterにあったため、美しくないなと感じた記憶がある。

Lucene 2.2でこの部分にリファクタリングが入り、QueryFilterはCachingWrapperFilterのサブクラスとなってQueryFilterそれ自身からはキャッシュのコードが取り除かれた。さらにQueryFilterはdeprecatedにマークされ、QueryWrapperFilterというFilterが新規に追加されて、Filterクラスは全体として図Bのようになった。

Lucene 2.2から

これにより、Lucene 2.2からは次のようなプログラムをコンパイルするとdeprecatedの警告メッセージが表示されるようになった:



Query q = ...;
Filter filter = new QueryFilter( q );



メッセージは警告なので無視してもかまわない。以前のプログラムは同じキャッシュの性能効率で動作することが保証されている。

警告メッセージが出ないよう以前のプログラムを直す場合は、QueryFilterを使っている部分をQueryWrapperFilterとCachingWrapperFilterを組み合わせた形で次のようにプログラミングすればよい:



Query q = ...;
Filter filter = new CachingWrapperFilter( new QueryWrapperFilter( q ) );



こうすれば、警告メッセージも出ず、プログラムも以前と同じ性能で動作する。

ところでFilterクラス群がこのように落ち着く前に、図Cのように単純にQueryFilterからキャッシュ機能を取り除く案が提案されていた:

キャッシュ機能のないQueryFilter

http://issues.apache.org/jira/browse/LUCENE-857

この案では、キャッシュのコードの冗長部分をただ単にQueryFilterから取り除いただけである。したがって、Lucene 2.1以前のQueryFilterを使ったプログラムがLucene 2.2でもキャッシュが効くようにするには次のようにプログラミングしなければならない:



Query q = ...;
Filter filter = new CachingWrapperFilter( new QueryFilter( q ) );



しかしこの案ではLucene 2.1以前のQueryFilterを使ったプログラムは警告メッセージも出ずにコンパイルできてしまい、気づかずにLucene 2.2にアップグレードしてしまった場合はキャッシュが効かなくなるので性能が格段に落ちてしまう。

そこで最終的に落ち着いた案は図Bのような形である。これにより、以前のプログラムをコンパイルするとdeprecatedの警告が表示され、新しい使い方にスムーズに移行を促すことができ、警告をとりあえず無視して運用しても性能を落とすことがなくなる。

コミッターのちょっとした気遣いが光ったissueといるといえるだろう。
| 関口宏司 | Luceneクラス解説 | 06:36 | comments(0) | trackbacks(0) |
スポンサーサイト
| スポンサードリンク | - | 06:36 | - | - |









トラックバック機能は終了しました。
+ Solrによるブログ内検索
+ PROFILE
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< March 2024 >>
+ LINKS
検索エンジン製品 - 比較のポイント
商用検索エンジンを購入した企業担当者は読まないでください。ショックを受けますから・・・
>>製品比較 10のポイント
+ Lucene&Solrデモ
+ ThinkIT記事
+ RECOMMEND
Apache Solr入門 ―オープンソース全文検索エンジン
Apache Solr入門 ―オープンソース全文検索エンジン (JUGEMレビュー »)
関口 宏司,三部 靖夫,武田 光平,中野 猛,大谷 純
+ RECOMMEND
Lucene in Action
Lucene in Action (JUGEMレビュー »)
Erik Hatcher,Otis Gospodnetic,Mike McCandless
FastVectorHighlighterについて解説記事を寄稿しました。
+ RECOMMEND
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ MOBILE
qrcode
+ SPONSORED LINKS