関口宏司のLuceneブログ

OSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
スポンサーサイト

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

| スポンサードリンク | - | | - | - |
FieldNormModifier
「長けりゃいいってものじゃない」

この意見には誰もが首肯するところであろう。たとえば超大作と宣伝された映画や小説などを見たり読んだりした後に、やたら長いだけで内容的に満足できずひどくがっかりした、というは経験は多くの人にあるだろう。映画や小説のようなものはエンターテイメントなのでまだいいが、たとえばプログラミングの仕事で調べ物をするとき、検索で引っかかった記事がやたら長いだけで開発のヒントにならなかった、というのは仕事の能率に影響してしまうので、そういう記事は検索結果の表示順で下位にランキングして欲しい。

このような要求を完全に満たすことは難しいが、Luceneでは現実的な解としてランキングを決めるスコア計算の一部分であるlengthNorm()がこの「長けりゃいいってものじゃない」という人の気持ちを代弁するものとして提供されている。このメソッドは、同じ検索キーワードを同じ個数含む記事があるときに、より短いほうの記事のスコアを上昇させる役割がある。短い記事に含まれるほうが、より密度が濃いと考えられるからである(参考:Lucene本 p203)。

しかし先日、次のような顧客に会った:

「長くたっていいじゃないか」

だってにんげんだもの・・・思わずそう下の句をつけたした私であった(もちろん心の中で)。そうだ。私のブログ記事はしばしば技術的なこと以外の内容がだらだらと続き、プロジェクトで忙しいプログラマの不興をかっているのではないかと気になることもしばしばだ。そのため、「長くてもいいんです」というその言葉がこの際どうでもいいことだが、深く心に沁みたものである。

それはともかく、このlengthNorm()は当該フィールドのトークン数を引数に取る関数なので、検索実行時に計算する必要がない。そのためLuceneではフィールドのboost値を掛けた結果をfieldNormとして記録してしまっている。そのため、SimilarityをオーバーライドしてlengthNorm()を書き換えた場合、インデックスを再作成する必要があるのであった。

ところが最近、Luceneのソースを見ているときに、trunkにFieldNormModifierなるクラスがあることを発見した。このソースを読むと、どうやら既存のインデックスのfieldNorm値を書き換えるコマンドラインツールのようである。これは、次のように使う:



$ java org.apache.lucene.index.FieldNormModifier インデックスパス名 Similarityクラス名 フィールド名1 [フィールド名2 ...]



こうすると、引数で指定したインデックスのフィールドのfieldNorm値が、指定したSimilarityのlengthNorm()を使って再計算されて書き換えられる(ただし、boostは指定できないのでlengthNorm()だけで調整する必要がある)。Similarityクラス名を指定するところに代わりに-nを指定すると、fieldNorm値が1.0と記録されるようになるので単に「固定値にしたい」というときに便利である。

なお、FieldNormModifierはcontribに入っているものなので、次のようにビルドする必要がある:



$ pwd
/home/foo/bar/jakarta/lucene/java/trunk
$ cd contrib/miscellaneous
$ ant



上記のようにビルドすると、trunk/build/contrib/miscディレクトリにlucene-misc-2.2-dev.jarファイルができるので、trunk直下でantを実行して作成したlucene-core-2.2-dev.jarファイルとともに用いて実行する(Lucene 2.1と組み合わせては使用できないので注意)。

Luceneを使ったアプリケーションの運用を開始したはいいが、記事の長さはスコアに反映したくないということに後から気がついてしまい、巨大なインデックスを前に途方にくれていたプロジェクトメンバーには朗報かもしれない。
| 関口宏司 | Luceneスコアリング | 13:50 | comments(0) | trackbacks(0) |
off topic: 春
春は出会いの季節だ。そして、別れの季節でもある。

人との出会いや別れもそうであるが、私の今春はPCの利用環境にいろいろな出会いと別れがあり、またこれからも変更が予定されているので、ここ数週間落ち着かない日々を過ごしている。

もう先月の話になってしまったが、先日私はAIR EDGEを解約し、EMOBILEに加入した。AIR EDGEは確か128kbpsだったと思うが、そろそろ速度的に限界だったので、解約は予定の行動であった。解約の2週間後、私は秋葉原のヨドバシカメラに向かった。auのPacketWINを契約するためである。PacketWINでデータ通信するには、WIN対応の携帯端末が必要なのだが、私のau携帯はWIN対応ではないので、携帯端末もWIN対応の端末に機種変更する予定であった。しかしヨドバシカメラを出たときには、私の手にはPacketWIN端末ではなく、EMOBILEの契約書が握られていた。なぜそうなってしまったのだろう。

auはお客様満足度No.1の携帯キャリアである。私の携帯遍歴はJ-PHONE => DoCoMo => auだ。その間のテクノロジーの変化もあるので単純に比較はできないが、現在はauでおおむね満足している。PacketWINの存在を知ったのもauを使用している友人からの「速い」という情報を得ていたからだ。そのため私はPacketWINへの強い意欲を持ってヨドバシカメラのau窓口に向かった。ところが窓口の女性は深刻そうな表情を浮かべ、「auははっきり申しまして、データ通信には強くありません」というのである。そんなことはないでしょう。なにしろauはお客様満足度No.1である。そして友人の話もある。さらにはAIR EDGEを解約してしまったので、無線LANを除けばモバイルでインターネットにつなげない状態であったので、なんとしてもPacketWINを契約させてもらえないと困る。食い下がる私に窓口の女性はPacketWINの料金体系を説明してくれた。確かにモバイルでたくさん使うとかなり高価になりそうな料金テーブルであった。

PacketWINをとりあえず保留にして途方にくれながらヨドバシカメラをふらふらしていると、赤地に白抜きの文字でEMと書いてあるロゴが目に入ったのであった。よく読むとEMOBILEと書いてある。そういえばauの窓口の女性も「データ通信はイーモバイルが強い」とか言っていたな、というのを思い出し覘いてみることにした。

ちょうど当日はEMOBILEの新規加入キャンペーンの最終日で、端末が1円+2ヶ月無料ということもあり加入することにした。まだあまり外でつなげる機会はないが、自宅でつないだときに、無線LANとEMOBILEのどちらでつながっているかわからないくらい速いため、大いに満足している。当初EMOBILEという選択はまるで意識の外であったが、auの窓口での情報もあり加入してしまったのだった。結果的にモバイル環境は充実することとなり、auへの満足度もまた高まることとなった。さすがお客様満足度No.1のキャリアである。




春はまた、引越しの季節でもある。

私の入居しているマンションでも、数世帯の引越しがあり、今月はエレベーターが引越し業者によりしばしば占拠されたりしている。

しかし引越しは人間だけの話ではない。私に関して言えば、今月中に借りているデモサーバを引っ越さなければならない。そのため、これまで開発で使用してきたPentium 4のWindowsマシンをつぶしてLinuxを入れてデモサーバにする計画を立てている。そうすると、開発マシンがなくなってしまうのでしかたなく1台購入することになった。先週Windows Vista BusinessのノートPCを購入し、最近ようやくセットアップが終わって落ち着きつつあるところである。

誰でも経験していることと思うが、Windowsマシンを開発で使えるようにするには非常に時間のかかる作業が必要だ。数日業務が止まってしまうことも珍しくないであろう。特に今回はVistaを初めて導入したので、果たしてこれまでの開発環境が維持できるか不安を抱えながらの数日間を過ごしたものである。結果的にはなんとかVistaで開発環境が動いているようだ。Luceneからはちょっと外れるが、読者の興味のあるところと思うので、参考になりそうな開発環境の部分だけ列挙しておく(製品名やバージョンなど):

・FFFTP
・TeraTerm
・Cygwin
・Flex Builder 2
・Subversion 1.4.3
・PostgreSQL 8.2.3
・EmEditor
・JDK 5.0
・Eclipse 3.2(WTP、TPTP、Tomcatプラグイン)
・Sen 1.2.2.1(CygwinのPerlで辞書のビルドOK)
・Mozilla Thunderbird 1.5

もう少しVistaを運用して大丈夫そうであればPentium 4のWindows XPをつぶしてLinuxサーバにする予定なので、まだまだ落ち着かない日々を過ごさなければならない。

Linuxデモサーバの引越しが終わったら、LuceneのデモのいくつかをSolrで置き換えようかと考えている。そのときはまたここに書こうと思う。
| 関口宏司 | その他(分類不能) | 06:56 | comments(0) | trackbacks(0) |
アンチウィルスソフトを使うときの注意点
先週末にアンチウィルスソフトのためにインデックスファイルが読めなくなったという報告がLuceneメーリングリストに流れていたので、簡単に状況を記しておきたい。

環境はWindowsでLucene 2.1。前の記事でも書いたsegments_NファイルがAccess DeniedでIndexWriterがFileNotFoundExceptionをスローするというもの。

報告者の報告がどうもはっきりしないが、インデックスに索引付けしようとしているファイルのひとつがウィルスに感染していたようだとある。しかしながら、「segments_NファイルがAccess Denied」という状況を考えると、segments_Nファイルの内容がウィルスパターンと酷似しており、アンチウィルスソフトがそのファイルのリードアクセスを不許可にしたのが真の原因のようだ。

このことから得られる教訓は、

  • Luceneインデックスディレクトリはアンチウィルスソフトのチェックからはずす。
  • ウィルス感染の可能性があるファイルをLuceneに登録する場合は、登録する前にその前段でウィルスチェックを終了しておく。もちろん、感染している場合は、Luceneインデックスに登録してはいけない。


である。
| 関口宏司 | Luceneインデックス | 00:38 | comments(0) | trackbacks(0) |
+ Solrによるブログ内検索
+ PROFILE
1234567
891011121314
15161718192021
22232425262728
2930     
<< April 2007 >>
+ 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