我正在尝试使用索引和$ text
进行mongo文本搜索我的模型是
var authorSchema = new mongoose.Schema(
{
authorId : Number,
Description : String,
firstName : String
});
authorSchema.index({ firstName: 'text'});
我正在使用名字
创建索引当我按下图所示进行搜索时
router.route('/search')
.get(function(req,res){
Authors.find({ $text : { $search : req.params.search }},{"_id":0,"firstName":1},function(err,authors){
res.send(authors);
})
})
搜索似乎没有提供预期的结果,即
我在集合中有两个文件,第一个名字是kumar和sam kumar *当我搜索kumar搜索时将获得这两个文件 *当我搜索sam kumar时,我将再次得到两个似乎不正确的文件,搜索只是sam kumar
我做错了什么
请说当我搜索整个名字搜索时,如何只返回单个文档
,我怎样才能完成搜索答案 0 :(得分:0)
看起来您正在尝试查找短语,在您的情况下 sam kumar 并尝试查找包含完整短语的文档。
在这种情况下,用双引号(“)
包装你的短语e.g。
var phrase = "\"" + req.params.search + "\"";
Authors.find({ $text : { $search : phrase }},{"_id":0,"firstName":1},function(err,authors){
res.send(authors);
这应该会回报你的期望。
这里是说明如何搜索短语的文档。 请参阅https://docs.mongodb.org/manual/reference/operator/query/text/#phrases
以上snipes假设您正在搜索完整的短语 sam kumar 。但是,如果要匹配文档中任何位置存在 sam 和 kumar 字样的所有文档,则需要计算文本分数并过滤分数为1的文档或更多。
请参阅https://docs.mongodb.org/manual/tutorial/text-search-in-aggregation/#match-on-text-score以供参考。