在MongoDB和Mongoose中执行全文search的最佳方法

我在Google上search了很多天,我尝试了很多东西,但仍然无法在用户集合上进行全面的全文search。

我试过ElasticSearch,但是很难查询和分页…

我尝试了很多像ElMongo,mongoose全文,Mongoosastic等Mongoose插件…每个人都真的不好logging,我不知道如何执行一个很好的全文search。

所以,我的collections是一个正常的集合:

user = { name: String, email: String, profile: { something: String, somethingElse: String } } 

我有一个简单的POST页面中的searchinput,如果我inputhello world ,我需要的是在整个收集字段上search我的search查询的匹配单词,并获得结果。

这将是非常好的也有处理一个分页,如每页10项或东西的选项…

什么是实现这个最好的解决scheme? 我在Mongoose,NodeJS和ExpressJS上使用MongoDB 2.6。*。

谢谢。

您可以将文本索引添加到Mongoose模式定义中,使您可以在查询查询中使用$text运算符来search包含在文本索引中的所有字段。

要创build一个索引来支持文本search,比如nameprofile.something

 var schema = new Schema({ name: String, email: String, profile: { something: String, somethingElse: String } }); schema.index({name: 'text', 'profile.something': 'text'}); 

或者,如果您想在索引中包含所有string字段,请使用'$**'通配符:

 schema.index({'$**': 'text'}); 

这将使您能够执行分页的文本search查询,如:

 MyModel.find({$text: {$search: searchString}}) .skip(20) .limit(10) .exec(function(err, docs) { ... }); 

对于search查询,您可以使用Elasticsearch插件。 在Elasticsearch中,您可以创build自己的自定义search查询,以便实时search任何特定文本和string,并指定持续时间。

但在此之前,您必须对驻留在MongoDB中的json文档build立索引。 您必须将MongoDB与Elasticsearch服务器连接起来。然后使用Elasticsearch的河streamfunction,您必须在Elasticsearch服务器中对您的数据进行索引,然后只有您可以使用您的自定义查询进行search。