Javascript 在MongoDB和Mongoose中执行全文搜索的最佳方式
我从几天开始在谷歌上搜索,我尝试了很多东西,但我仍然无法在我的用户集合上执行良好的全文搜索 我尝试了ElasticSearch,但无法查询和分页 我尝试了很多Mongoose插件,比如ElMongo、Mongoose全文、Mongoostic等等。。。每个人的文档都很糟糕,我不知道如何进行良好的全文搜索 因此,我的收藏是一个普通的收藏:Javascript 在MongoDB和Mongoose中执行全文搜索的最佳方式,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我从几天开始在谷歌上搜索,我尝试了很多东西,但我仍然无法在我的用户集合上执行良好的全文搜索 我尝试了ElasticSearch,但无法查询和分页 我尝试了很多Mongoose插件,比如ElMongo、Mongoose全文、Mongoostic等等。。。每个人的文档都很糟糕,我不知道如何进行良好的全文搜索 因此,我的收藏是一个普通的收藏: user = { name: String, email: String, profile: { something: String,
user = {
name: String,
email: String,
profile: {
something: String,
somethingElse: String
}
}
我在一个页面中有一个搜索输入,其中有一个简单的POST
,如果我键入hello world
,我需要的是在整个集合字段中搜索搜索查询的匹配词并获得结果
它将真的很好,也有一些选项来处理分页,如每页10个项目或东西
实现这一目标的最佳解决方案是什么?我将MongoDB 2.6.*与Mongoose、NodeJS和ExpressJS一起使用
谢谢。您可以在Mongoose模式定义中添加一个,该定义允许您在find
查询中使用运算符来搜索文本索引中包含的所有字段
创建索引以支持文本搜索,例如,name
和profile。something
:
var schema = new Schema({
name: String,
email: String,
profile: {
something: String,
somethingElse: String
}
});
schema.index({name: 'text', 'profile.something': 'text'});
或者,如果要在索引中包含所有字符串字段,请使用'$**'
通配符:
schema.index({'$**': 'text'});
这将使您能够执行分页文本搜索查询,如:
MyModel.find({$text: {$search: searchString}})
.skip(20)
.limit(10)
.exec(function(err, docs) { ... });
有关详细信息,请阅读完整的文档。谢谢您的回答。这样做不会降低MongoDB的性能吗?请再问一个问题:我还可以选择要索引的字段吗?@Ayebrazo我更新了anser以显示如何选择要索引的字段。添加任何索引都会增加插入和更新期间的开销,以及增加的存储需求,因此必须始终考虑这一点。经过长时间的搜索,您的答案就是王者!是否有可能进行“wordA和wordB”搜索?并搜索部分单词?@Pumych检查是否区分大小写搜索