有没有办法通过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.
答案 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的值是表名而不是字段。