Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在MongoDB和Mongoose中执行全文搜索的最佳方式_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 在MongoDB和Mongoose中执行全文搜索的最佳方式

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,

我从几天开始在谷歌上搜索,我尝试了很多东西,但我仍然无法在我的用户集合上执行良好的全文搜索

我尝试了ElasticSearch,但无法查询和分页

我尝试了很多Mongoose插件,比如ElMongo、Mongoose全文、Mongoostic等等。。。每个人的文档都很糟糕,我不知道如何进行良好的全文搜索

因此,我的收藏是一个普通的收藏:

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检查是否区分大小写搜索