転置インデックスで学ぶ検索エンジンの中身アプリ

学生の頃から情報検索っぽい研究をやっていたくせに,転置インデックスてこんなものなんだ,ということを知るまで検索エンジンが正直怖かった.転置インデックスの概要を理解したら急に甘く見はじめるようになった(それはそれでいかんのだけど).

位置情報を持たせたり,転置インデックスの圧縮をした状態で説明されると急にアッーてなるけれど,一番単純な例を見るとすぐに理解できる.

というわけで転置インデックスってこんな感じなんですよー.という一例を体験するプログラムをつくってみた.またJavaScript+TinySegmenter.工藤様毎度ありがとうございます.

これを見ると,転置インデックスって基本的にこういう構造でデータを持つのかということが納得できると思います.Termをkey,Posting listをvalueとすればRDBではなくてBerkley DBとかで十分じゃん.あぁだからQDBMなんだ.と僕が思いました.もちろんRDBMを使ってもいいし,それこそYAMLでじうぶん.

とりあえずクイックツアーを用意してみました.転置インデックスって何?という方は先に操作して体験してみてくださいませ.

超適当なクイックツアー

インデックスを追加してみよう
  1. sample1ボタンを押してください.サンプル文書が入力されます.
  2. add indexボタンを押して,インデックスに追加してください.
  3. sample2からsample5まで同様にインデックスに追加してください
  4. 記録された文書は一部省略されていますが,クリックすると全文を確認することができます.
検索してみよう
  1. キーワードを入力して検索してみましょう
  2. ためしに「豚」と入力してみてください
    • 全ての文書がヒットしましたね
  3. 次に「豚は」と入力してみてください
    • 「我輩が豚である」が検索結果から減りましたね
  4. こんな感じでいろいろ試してみてください
  5. スペースを入れて検索するとAND検索ができます
    • スペース入れなくてもTinySegmentされてるわけですが

TODO

  • 位置情報を持っていないので,連接判定していない
  • OR検索できない
  • ストップリストを手動でできると,ストップリストを使ったときの連接判定等,ちょっと変わった中身の挙動が確認できるかも


ご意見,ご要望ぜひぜひお願いします


不具合?いいえ仕様です(2008-09-22追記)

  • スペース区切りのAND検索しようとすると検索結果が更新されない