正規表現で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が自動的に取得しにいっていると思うけど。