Web SQL Database で全文検索
id:secondlife さんの Google Chrome 拡張ことはじめ - 川o・-・)<2nd life に触発されて、全文検索ライブラリを作った。
Safari か Chrome (dev 版) でこのテストページを開くと自動的にテストしてくれる。コンソールを開いておいたほうが動きがあっておもしろいと思う。
やってることは、Wikipedia から適当に抜き出した 900 ページの冒頭の部分をせっせとインデックスして、さらにいくつかの単語で検索をかけている。何故 1000 じゃなくて 900 かというと、データベースがいっぱいになっちゃうから仕方なく減らした。だいたい1分〜100秒ぐらいで終わると思う。
その次にこっちのデモページにアクセスすると、さっき作ったインデックスを使って検索できる。
ソースは MIT ライセンスで GitHub に置いてある。
インターフェイスはけっこう考えて作ったつもりだけど、とりあえず一つ Chrome Extension を作ってみて、それからまた変える部分を考える。
感想
- うちだとだいたい10件検索するのに17msぐらい。
- 900記事 × 3000文字 = 270万 の (ほぼ) 2-gram トークンの中から逆引きして探しているにしてはよくやっていると思う。
- JSDeferred と JSDeferred-WebDatabase が死ぬほど便利。
- 使ってるほうは便利なんだけど、コードは読みにくいと思う。。。
- Web SQL Database は Web の将来の互換性は心配だけど、Chrome や Safari では無くならないと思う。(Chrome Extension で既に使われてるし)
作り始めた当初の目的は、はてなの本文抽出ライブラリと組み合わせてはてぶ Extension に全文検索機能を付けることだったんだけど、Wikipedia をインデックスしてみて、とてもじゃないが足りないと思った。1記事1万文字ぐらいと仮定すると、300記事ぐらいしか保存できない。twitter なら140文字なのでだいたい2万件ぐらい保存できる。でも140文字ぐらいだったら単に LIKE で検索したほうがいいんじゃないかな?
Extension から使えるデータベースの容量は既に 50MB になってた。ちょっとは使い道があるかも。http://src.chromium.org/viewvc/chrome?view=rev&revision=32884