2017.12.15 Friday
スポンサーサイト
一定期間更新がないため広告を表示しています
| スポンサードリンク | - | | - | - |
関口宏司のLuceneブログOSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
2006.03.29 Wednesday
はじめてのLucene全文検索プログラム
子供のころ、日曜日の夕方になるとしばしば不安感に襲われたことを思い出す。
それは「月曜日からまた学校が始まる」ということのほかに、あるテレビ番組も原因のひとつだったように思う。 それは「サザエさん」である。 思えばフシギな番組であった(今でも続いているが・・・)。何がフシギかというと、カツオとタラちゃん、ワカメとタラちゃんは兄弟(姉弟)ではない、ということだ。 これは子供心にとても理解しがたい事実であった。あの三人はどうみても兄弟であろう。しかしどうだ。実際はサザエ・カツオ・ワカメが兄弟姉妹の関係なのだ。 カツオとワカメは小学生のようだが、彼らの姉は結婚して子供もいるのである。サザエさんとその下の二人はとても歳が離れているのだ。サザエさんが生まれた後、十年ほど経ってからカツオとワカメが相次いで生まれた計算だ。 そのとき波平と舟の間に何があったのだろう。小学生のころはそんなことは考えなかったと思うが、今はとても気になる。 ・・・そういうことなので、タラちゃんにとってカツオはお兄さんではなく、ワカメはお姉さんではなく、おじさん、おばさんであり、カツオやワカメから見てタラちゃんは弟ではなく甥、ということを子供のころに学習した。 また、作者の「長谷川町子」という名前、子供のころはこの苗字も最初はなんと読むのかさっぱりわからなかった(ほかにも「東海林さだお」もよくわからなかった)。そんなことがあり、「サザエさん」は子供のころの教材であった。 もっとも、無垢な子供のころはなんでも教材になるものだ。 そういうわけで、Luceneの入門用プログラムにもサザエさんをコンテンツに選択する。サザエさんのコンテンツは、次のようなものである:
上記のように、contentsという文字列配列に、サザエさんファミリーの人間関係を表した短い文を設定している。ここではこのひとつひとつがドキュメントである。 ドキュメントは、全文検索の対象となるオブジェクトで、この例で言えばひとつの要素contents[i]がひとつのHTMLファイルなりPDFファイルの代わりである。 入門用プログラムなので、全文検索対象となるドキュメントは、HTMLやPDFではなくこのような簡単な文字列にしよう、ということだ。 上記のようなコンテンツに対し、検索質問の文字列も次のような文字列配列で用意する:
プログラムでは、contentsのドキュメントでインデックスを作成し、次に検索質問語であるqueriesの分だけforループをまわし、インデックスを検索する。 ではプログラムを紹介する前に、実行結果を先に見ておこう。それは、次のようになる:
実行結果は、queries[0]の"カツオ"を検索したときにcontents[]のドキュメントのうち6件がヒットし、その内容を表示している。以下、queries[1]の検索結果の表示、queries[2]の検索結果の表示、・・・と続く。 プログラムの全体は、次のようである:
プログラムのメインストリーム(main()の中)は、最初にmakeIndex()を呼んでインデックスを作成し、次にqueries[]の大きさだけforループをまわしてqueries[]要素を引数にしてsearchIndex()を呼んで検索を実行している。 makeIndex()では、IndexWriterのインスタンスを作成し、addDocument()でDocumentをインデックスに登録している。Documentはcontents[]の要素である。 FieldはDocumentを構成する要素で、ここでは次のようにDocumentにadd()している:
ここで、FIELD_CONTENTはフィールド名、contents[i]はフィールドの文字列である。Field.Store.YESはフィールドの文字列をインデックスに登録することを示し、Field.Index.TOKENIZEDはフィールド文字列をアナライザーで分析しながら単語を索引付けすることを示している。 searchIndex()では、IndexSearcherインスタンスを作成し、search()メソッドで全文検索を実行している。検索結果はHitsオブジェクトで返るので、ヒット件数(hits.length())とその内容を表示している。 コメント
コメントする
この記事のトラックバックURL
トラックバック機能は終了しました。
トラックバック
lucene
基本的には解凍するだけです。
コンパイル時も、実行時も 、 lucene-core-2.0.0.jar,lucene-demos-2.0.0.jar,lucene-ja.jarにパスが通っている必要があるようです。
lucene/src/org/apache/lucene/demo/IndexJFilesでは、
ソース中で
St
| 研究開発 | 2009/02/25 6:33 PM |
|
+ Solrによるブログ内検索
+ PROFILE
+ LINKS
+ Lucene&Solrデモ
+ ThinkIT記事
+ RECOMMEND
+ RECOMMEND
Lucene in Action (JUGEMレビュー »)
Erik Hatcher,Otis Gospodnetic,Mike McCandless FastVectorHighlighterについて解説記事を寄稿しました。
+ RECOMMEND
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ MOBILE
+ SPONSORED LINKS
|
(C) 2024 ブログ JUGEM Some Rights Reserved.
|
PAGE TOP |