先决条件一个表的字段:让MongoDB中搜索文本
数据库与收藏已经创建职位,它的架构如下:
module.exports = function(mongoose){
var Schema = mongoose.Schema;
var postSchema = new Schema({
postID: String,
title: String,
description: String
});
mongoose.model('post', postSchema, 'posts');
postSchema.index({title: 'text'});
};
节点的路由器通过API处理:
apiRouter.get('/api/searchPosts', function(req, res, next){
postModel.find(
{ $text : { $search : req.query.text } },
{ score : { $meta: "textScore" } }
)
.sort({ score : { $meta : 'textScore' } })
.exec(function(err, posts) {
if(posts){
res.json({
posts : posts
});
} else {
res.send('Post does not exist');
}
});
});
我在努力实现什么:
我想在我的帖子表称为冠军全文检索的字段。
我的堆栈:
MongoDB的,的NodeJS(与猫鼬),角
我的方法:
如在先决条件提到的,我已经添加了行:
postSchema.index({title: 'text'});
此外,我已经在终端运行下面的命令一次收藏已创建:
db.posts.createIndex({"title":"text"})
问题:
当我访问该从URL,它的工作原理开始,但几个星期后,它停止工作(我得到“后不存在'不作任何改变!)。为了让它恢复正常工作,我必须删除收集并重新创建一个,然后运行命令:
db.posts.createIndex({"title":"text"})
然后开始工作几周,等等。
我做错了什么?我没有看到这几周发生的事情的趋势。我一直在这个问题上坚持了几个星期,所以如果有人可以帮助,它将不胜感激。
感谢, 傻眼
我会在那里做什么,而不是返回'Post不存在',我会从那个错误(我认为是实际的错误)返回一些东西。也许你正在得到一个超时或类似的东西。任何mongo日志检查等? –
重要的建议与错误。我已经参与了不到一年的发展,所以请原谅这个noob错误。 '错误'是:错误是:MongoError:$文本查询所需的文本索引 - 但我已经这样做了。不知何故,mondoDB本身已经忘记了我已经运行了这个命令。我会看看日志中是否有任何内容。 –
嘿@AndreiNeagu - 我在下面发布了我的答案。感谢您的建议。如果未来的观众再次突破,我会保持这篇文章的更新。 –