Lucene
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Lucene(ルシーン)とは、Javaで記述された全文検索ソフトウェアである。あらかじめ蓄積した大量のデータから、指定したキーワードを探し出す機能を持つ。Javaのクラスライブラリとして提供される。
目次 |
[編集] 概要
1000万ドキュメントくらいの規模まで1台のマシンで対応できる。 それ以上を複数のマシンで分散検索できるようにするHadoopというサブプロジェクトがある。
検索エンジン(ライブラリ)だけの提供であり、ウェブアプリとしての機能はSolr、クローラーの機能はNutchというサブプロジェクトで開発されている。
日本語のデータをインデックスするためには、CJKAnalyzerかJapaneseAnalyzerを使う。 CJKAnalyzerはbi-gram方式である。 JapaneseAnalyzerを使うには、形態素解析エンジンを組み込む必要があり、オープンソースのSen(MeCabのJava実装)を使う。 また、ベイシステクノロジー社から販売されているJLAでも日本語のデータを形態素解析してインデックスできる。
2007年1月にApacheのトップレベルプロジェクトになり、現在はPMC(Project Management Committee)での開発スタイルをとっている。
[編集] Tips
[編集] CJKAnalyzerとJapaneseAnalyzerの比較
日本語を検索対象とするうえで、bi-gramのCJKAnalyzerと形態素解析のJapaneseAnalyzerがある。 それぞれ長所と短所がある。
以下、それぞれの長所と短所の比較の表。 ベンチマークは Lucene 2.1 と Sen 1.2.2.1 にて、UTF-8で97バイトのタイトルと、2,914バイトの本文があるデータを10,000回追加して計測。 maxBufferedDocs と mergeFactor はそれぞれ 1,000。 全てのデータが同一のデータという偏ったデータであることに注意。 数値結果は、より優れた方を1とした、相対比で表記。
比較項目 | CJKAnalyzer | JapaneseAnalyzer |
---|---|---|
検索もれ | なし (ただし不必要な情報も増える) |
あり |
インデックス追加時間 | 1 | 5.77 |
検索時間 | 2.673 | 1 |
インデックスファイルサイズ | 1.419 | 1 |
インデックス追加時間は CPUの速度/HDDの速度 の比で決まり、よりCPUが速い場合は、JapaneseAnalyzerが相対的に速くなる。また、文章数が多く、かつ、上記とは異なり全ての文章が異なる場合、CJKAnalyzerでのインデックスファイルサイズはJapaneseAnalyzerよりも、よりさらに大きくなる。
[編集] maxBufferDocsとmergeFactor
Lucene 2.1 ではmaxBufferDocsとmergeFactorという2つのインデックス作成のチューニングパラメータがある。 maxBufferDocsの分だけメモリにため、まとめて書き出される。 mergeFactorの分のDocumentで1つのcfsファイルにまとめられる。 デフォルトは、maxBufferDocs = 10, mergeFactor = 10であり、 一般的には、maxBufferDocs = mergeFactor でよい。
オフィシャルのJavadocでは、バッチモードの場合は、mergeFactor > 10 に、 インタラクティブモードの場合は、mergeFactor < 10 にすると良いと書いてある。 [1]
mergeFactor = 10 の場合は、100 Documentで、cfs ファイルが 10個できると、 それらが1つのcfsにまとめられる。さらに、1000 Document時も同じく10個のcfsファイルが1つにまとめられる。 ただし、Lucene 2.1 では、mergeFactor = 100や1000 の場合、IndexWriter.optimize() するまで、cfsのマージが行われない。
ただし、IndexWriter.optimize() で1つのcfsにマージする際、 n=Document数としたとき、その時間はO(n²)に比例するため、100万Document以上の大規模インデックスの場合、 長くなりすぎてしまう。(将来のバージョンではこの部分が変わる可能性がある)。 結果として、mergeFactor=10 のデフォルトの方が速くなるので、 小規模~大規模、どのパターンでも、デフォルトから変更せずに、深夜に IndexWriter.optimize() を走らせるだけの方がより良いことが多い。
[編集] 書籍
- Apache Lucene 入門 ~Java・オープンソース・全文検索システムの構築 - ISBN 4774127809
- Lucene In Action - ISBN 1932394281
[編集] 外部リンク
|
|
---|---|
Top level Projects | Apache HTTP Server - ActiveMQ - Ant - APR - Axis - Axis2 - Beehive - Cayenne - Cocoon - Commons - CXF - Directory - DB - Excalibur - Felix - Forrest - Geronimo - Gump - Hadoop - Harmony - HiveMind - HttpComponents - iBATIS - Jackrabbit - James - Lenya - Maven - Mina - MyFaces - ODE - OFBiz - OpenEJB - OpenJPA - POI - mod_perl - Roller - Santuario - ServiceMix - Shale - SpamAssassin - STDCXX - Struts - Synapse - Tapestry - Tcl - Tiles - Tomcat - Turbine - Velocity - WebWork 2 - Wicket - WSIF - XMLBeans |
Apache Jakarta Project | BCEL - BSF - Cactus - ECS - JCS - JMeter - ORO - Regexp - Slide - Taglibs |
Apache Commons | Attributes - BeanUtils - Betwixt - Chain - CLI - Codec - Collections - Configuration - Daemon - DBCP - DBUtils - Digester - Discovery - EL - Email - FileUpload - IO - JCI - Jelly - Jexl - JXPath - Lang - Launcher - Logging - Math - Modeler - Net - Pool - Primitives - Proxy - SCXML - Transaction - Validator - VFS |
Apache DB | Derby - Torque - DdlUtils - OJB - JDO |
Apache Portals | Jetspeed 1 - Jetspeed 2 - Graffito - Pluto - WSRP4J |
Apache Lucene | Lucene Java - Solr - Nutch - Hadoop - Lucene4c - Lucy |
Apache XML | AxKit - Xalan - Xerces |
Apache XML Graphics | Batik - FOP |
Apache Logging | Log4j - Log4Cxx - Log4Perl - Log4PLSQL |
Apache Incubator | XAP - River - Graffito - Tuscany - Log4Net - Abdera - CeltiXfire - FtpServer - Heraldry - Ivy - JuiCE - Kabuki - Lokahi - Lucene.Net - mod_ftp - NMaven - Woden - WSRP4J - Yoko - Log4PHP - Qpid - TripleSoup - UIMA - wadi |
License: Apache License - Website: www.apache.org |