4

有没有办法通过 Mongoid 使用 MongoDB (v 2.4) 的全文搜索功能?我尝试了来自google group 链接的答案,但不断收到以下错误。

在一个选项卡中,我这样启动了 mongod:~$ mongod --setParameter textSearchEnabled=true 导致错误的行: Article.mongo_session.command({:text => {:search => 'Ruby'}})

如果有人能指出一种runCommand在 Ruby 中执行 MongoDB 的方法,那就太好了,这样我就可以直接运行命令db.collection.runCommand( "text", { search: <string> })

failed with error 13111: "exception: wrong type for field (text) 3 != 2"

See https://github.com/mongodb/mongo/blob/master/docs/errors.md
for details about this error.
4

4 回答 4

12

对于任何发现这一点的人,Mongoid 4.0 允许像这样进行全文搜索:

Model.text_search('query')

您可以像往常一样链接:

Listings.in(category: sections).where(listing_type: 'Website').text_search(params[:q]).to_a 

索引也很简单:

index({name: "text", description: "text"}, {weights: {name: 10, description: 2}, name: "TextIndex"})

编辑:2017 年 7 月

如下所述,不推荐使用 text_search。我一直在使用 where() 像这样:

Model.where('$text' => { '$search' => "\"#{params[:q]}\"" })

于 2014-11-16T22:33:36.553 回答
2

我刚刚通过 mongoid 尝试了 mongo 2.4 文本搜索,并遇到了与您相同的问题。我玩了一点,找到了以下解决方案。这是我如何使它工作的

例子:

User.mongo_session.command(text: 'users', search: 'search string')

这里的“文本”键应该指向集合名称。

您将获得 Moped::BSON::Document,其中包含有关已找到文档的信息。希望它也能帮助你

于 2013-05-03T16:09:59.450 回答
1

基于 Durran Jordan 对“使用 Moped 进行 Mongo 2.4 全文搜索?”的问题的回答。在此链接中:https://groups.google.com/forum/?fromgroups=#!topic/mongoid/hJRbaNMy6w4,我建议您更改命令:

 Article.mongo_session.command({:text => {:search => 'Ruby'}})

对此:

 Article.with(database: "text").mongo_session.command({:text => {:search => 'Ruby'}})
于 2013-05-06T16:58:48.823 回答
0

对我来说,这个工作。

这里 Favorite.mongo_session.command(:text =>'table_name', search:'search parameter')

确保 :text 的值是表名而不是字段。

于 2013-08-05T05:52:22.883 回答