正規表現でfind

自分で単語を切ってindexを作れというdocumentもあるが http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo
(これ同じように日本語のindexで作って、Ruby driverとjsのコンソール両方で試したけど日本語でちゃんと探せたのでmecabとか使って同じ事やるのもいいかも)

日本語で数万件程度なら、正規表現でfindでも十分そうという事がわかった。


先にこんな風に540文字のテキストデータの入ったdocumentを何万件かinsertしておく

require 'rubygems'
require 'mongo'

m = Mongo::Connection.new('localhost', 27017)
db = m.db('bigdata')

for i in 0...10000 do
  db['test'].insert({:text => '今日はBIG丼でさんざんな目にあった' * 30})
  puts "#{i}" if i%100 == 0
end


探す

p db['test'].find({:name => /B.*/}).first

3万件入れておいて、1万件返ってくる正規表現のfindのqueryを投げた。
0.5秒ぐらいで返ってきた。
返ってきてるのはcursorなので、10000件分のデータが飛んできているわけではなくてeachとかで回すと都度mongo driverが自動的に取得しにいっていると思うけど。

まあwikiとかのバックエンドにMongoDBを使うなら検索は日本語正規表現findで十分そうだ。