索引って結局何なの?
「索引」っていうのがあちこちにあるような気がするけど、同じものなのか別の物なのかさっぱりわからなかったので調べてみました。
まず索引の種類は2つ、全文検索用の索引と、ビューの索引というのがあるようです。
- 全文索引
全文検索の索引を作るのは、「データベースのプロパティ」の中の虫眼鏡マーク。
または検索バーの「索引の作成」ボタン。
またはシステム管理クライアントのファイルタブでDBを選択して「全文索引」。
全文検索っていうのは、アスキー用語辞典のフルテキスト検索 で引いても出てくるように、登録している文書の中の単語をリストアップした索引を予め作っておいて、検索が実行されるとその索引を引いて、該当する単語が含まれている文書を高速ピックアップする検索方法の総称、みたい。
この全文検索用の索引を作っておかないと、検索したい単語と文書の内容をいちいち照らし合わせた上で一致するものを引いてくるので、
・遅い
・変なところで一致しているのも引っ張ってくる。(XPを検索したいのにeXPlorerを持ってきたり。でもこれはこれで便利なときもあるのですけど)
・and orとかの条件を指定して検索できない
ということになります。
全文検索用の索引を作っておけば、
・検索が速い。
・一致する単語だけをちゃんと取ってくる。
・and orとかの条件も指定できる。
といういいことがありますが、そのかわり、
・「\」とか「@」とかの特殊記号で検索しようとすると、「検索条件が理解できません」とか言い出す。
・単語の一部に含むものを抽出したいときはワイルドカードを使わないとだめ。
(たとえばaddnewlineを調べたいときに、addnewでは出てこないです。addnew*とかやらないと。索引ファイルは単語の区切り(空白とか)を元に作っているので、)
・文書が更新されるのに合わせて、索引の方も定期的に更新しないとだめ。
ということになります。
この全文検索用の索引って、英語だと単語の切れ目のスペースで分割するのでわりと正確に単語単位で索引されるけど、日本語では誰でも知ってる通り単語の切れ目を判定するのってすごく難しいから、索引作成エンジンのかしこさ次第でだいぶ結果が変わってくるみたいな。
その辺は全文検索一般の話で、以下のリンクの辺りが参考になります。
http://www2.osk.3web.ne.jp/~nkon/search/genri.html
正直、Notesの索引では句読点で分割したりもしてないみたいだから、索引無しと同じぐらいの精度なのではないかしらという気がしないでもないです。
でもandとか使えるのは大きいですよね。
ちなみにWebクライアントから検索したいときは、全文索引ファイルは必須のようです。
全文検索用の索引を作成すると、DBと同じフォルダに、「DBのファイル名.ft」という名前の付いたフォルダが出来ます。これが索引ファイル。
- ビュー索引
ビューの索引は、ビューに文書を一覧表示する用とかにNotesが使うために作るワークみたいなので、そのDBのnsfファイルの中に出来ます。
だからデータがたくさんあるDBにビューも大量にあったりすると、データ容量から推定した以上にずっとnsfファイルが巨大になったり。
これはビューを開いたときに勝手に出来るみたいですが、ビューのプロパティの「詳細」タブで更新タイミングや削除タイミングを設定できます。
データベースのコピーを取ったときにはこの索引ファイルはコピーされないので、コピー後のDBのファイルサイズの方がずっと小さい場合があります。
ビュー開いていくと索引が作られるから、いずれ同じ程度のサイズになりますが。
あと、既に大量にデータが入ってるDBの設計を置換したら、最初の1回目開くときにすごく時間がかかったけど、2回目以降は今まで通りにサクサク開けるというのは、Notesがこの索引を裏でがんばって作ってるせいらしいです。
「索引が壊れたからDBが開けなくなった」とかそういう話で言われる索引は、こっちのビュー索引のことのようです。
全文索引ファイルはファイル自体が別になってるし、壊れても最悪検索がうまくいかなくなるぐらいで、作り直せば問題ないのではないかな?という気がします。確信は無いですが。
この2つの違いを踏まえた上でシステム管理ヘルプのUpdate と Updallタスクを読むと、どういう動きなのかなんとなく見えてくる・・気も。
目次に戻る