使用Mongoid进行全文搜索

时间:2013-04-30 03:34:27

标签: ruby mongodb mongoid

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

在一个标签中,我开始使用mongod:~$ mongod --setParameter textSearchEnabled=true 导致错误的行: Article.mongo_session.command({:text => {:search => 'Ruby'}})

如果有人能指出在Ruby中执行MongoDB runCommand的方法会很棒,这样我就可以直接运行命令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 个答案:

答案 0 :(得分:11)

对于任何发现这一点的人来说,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'=&gt; {'$ search'=&gt;“\”#{params [:q]} \“”})

答案 1 :(得分:2)

我刚刚通过mongoid尝试了mongo 2.4文本搜索并遇到了与你相同的问题。我玩了一点,发现了以下解决方案。以下是我的工作方式

示例:

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

此处'text'键应指向集合名称。

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

答案 2 :(得分:1)

基于Durran Jordan回答有关'Mongo 2.4与Moped的全文搜索?'的问题在此链接中: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'}})

答案 3 :(得分:0)

对我来说这个有用了。

下面 Favorite.mongo_session.command(:text =&gt;'table_name',search:'search parameter')

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