2013-04-30 107 views
3

有没有办法通过Mongoid使用MongoDB(v 2.4)的全文搜索功能?我试着从google group link得到答案,但不断收到以下错误。使用Mongoid进行全文搜索

在一个标签,我开始的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

你可以发布导致错误的行吗? – MervS 2013-04-30 06:28:34

+0

请参阅更新后的帖子。 – brayne 2013-04-30 18:19:41

回答

2

我只是试着通过mongoid蒙戈2.4文本搜索和碰到了同样的问题,因为你。我玩了一点点,发现了以下解决方案。下面是我做了它的工作

例子:

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

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

您将获得Moped :: BSON ::具有关于找到文件信息的文件。 希望它能帮助你,以及

+0

这不适用于Mongoid 4。我得到以下错误:失败,错误59:“没有这样的命令:'文本',错误的cmd:'{text:\”contacts \“,搜索:\”something \“}'” – Donato 2016-07-27 15:29:51

0

对于我这样一个工作。

这里 Favorite.mongo_session.command(:文本=>“表名”,搜索:“搜索参数”)

确保:文字的价值是表名,而不是场。

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'=> {'$ search'=>“\”#{params [:q]} \“”})

+1

text_search现已弃用 – mymlyn 2015-09-21 16:26:34

+0

@ mymlyn会很高兴评论使用新的方法。 – 2016-07-16 22:38:21

+0

@mymlyn而不是告诉我们这不再是解决方案,告诉我们解决方案实际上是什么。 – Donato 2016-07-27 15:32:32