1

我想对我的收藏进行全文搜索。因为我使用的是 mongo 2.4,所以我想用 mongodb 的text 命令来做

在 mongo 的控制台中执行此操作的方法是(根据 mongo 的官方文档。)

db.collection.runCommand( "text", { search: <string> })

它返回预期的结果。

现在,我想在 ruby​​/rails 中实现相同的目标。我在用mongo gem version 1.8.4

根据他们的更改日志/历史记录 ,支持新的 MongoDB 2.4 索引类型

但是我怎样才能text command用 ruby​​ 在一个集合上运行。

我浏览了这篇博文。但它没有帮助

更新:

我试过,

  command = BSON::OrderedHash.new
  command['find'] = collection
  command['text'] = {'search' => 'string'}
  result = @db.command(command)

但它给

Database command 'find' failed: (ok: '0.0'; errmsg: 'no such cmd: find'; bad cmd: '{"find"=>"project", "text"=>{"search"=>"string"}}').

更新 2:

php也存在类似情况。我正在寻找 ruby​​ 的等价物。

4

3 回答 3

2

你只需要在 Ruby 1.8 中使用 BSON::OrderedHash。如果您运行的是 Ruby 1.9 或更高版本,您可以使用以下语法在文本索引上创建/查询。

require 'mongo'
include Mongo

client = MongoClient.new
db = client['my_database']
coll = db['my_collection']

# create a text index
coll.ensure_index({:field_name => Mongo::TEXT})

# run a text query
db.command({:text => 'my_collection', :search => 'search string'})
db.command({:text => 'my_collection', :search => 'search string', :filter => {:foo => 'bar'}})
于 2013-04-09T05:40:33.710 回答
1

我这里没有工作 mongodb 安装,但以下应该可以解决问题:

command = OrderedHash.new
command['text'] = <collectionname>
command['search'] = <string>
result = @db.command(command)

希望这可以帮助。

于 2013-04-01T10:54:44.487 回答
1

我用了,

  command = {}
  command["text"] = collection_name
  command["search"] = "search_string"
  result = @db.command(command)

看起来它有效。不过我会等待其他答案。

于 2013-04-01T11:47:33.007 回答