猫鼬,nodejs,全文搜索
Posted
技术标签:
【中文标题】猫鼬,nodejs,全文搜索【英文标题】:Mongoose, nodejs, full text search 【发布时间】:2014-11-17 08:35:47 【问题描述】:我正在尝试使用 Mongoose 和 nodejs 设置一个简单的关键字全文搜索,这是目前的代码:
var db = mongoose.createConnection('localhost', config.mongoDbName)
, ContSchema = Schema(
'idUser': String,
'title': String,
'category': String,
'slug': String,
'description': String
)
.index(
'title':'text',
'description':'text'
)
, ContModel = db.model('Cont', ContSchema);
db.on('error', function (err)
console.error.bind(console, 'Mongoose connection error:' + err);
);
db.once('open', function ()
process.stdout.write('Connection to mongodb db done...');
);
然后我做搜索查询:
var getAllBy = function (limit, offset, keywords)
var sort
, find
, findScore;
if (!!keywords)
find = '$text':'$search':keywords;
findScore = 'score':'$meta':'textMatchScore';
sort = 'score':'$meta':'textMatchScore';
else
sort = '_id':'desc';
return new RSVP.Promise(function (resolve, reject)
ContModel.find(find, findScore).limit(limit).skip(offset).sort(sort).exec(function (err, data)
if (err)
reject(err);
else
resolve(data);
);
);
它不起作用,它在控制台中返回此错误:MongoError: Can't canonicalize query: BadValue bad sort specification
我实际上无法找到真正的问题,你能帮帮我吗?
谢谢
【问题讨论】:
您使用的是哪个版本的 MongoDB?此处使用的文本搜索语法仅适用于 2.6 版本 @Neil Lunn MongoDB shell 版本:2.6.4 仅供参考,您可以使用较新的外壳并连接到较旧的服务器。所以这确实是我要问的“服务器版本”。 @NeilLunn sec 我找不到如何检查服务器版本:D @NeilLunn running mongod: 2014-09-23T10:24:47.624+0200 [initandlisten] db version v2.6.4 这是正确的信息吗? :D 【参考方案1】:这里你的关键字不正确,查看$meta
运算符下的正确语法,目前只有“textScore”:
find = '$text':'$search':keywords;
findScore = 'score':'$meta':'textScore';
sort = 'score': '$meta':'textScore'
【讨论】:
似乎有什么进展,谢谢,但现在看看我明白了:MongoError: Can't canonicalize query: BadValue unsupported $meta operator: textMatchScore @sbaaaang 所以就像我说的,检查服务器版本db.serverStatus().version
会这样做。但我主要看到你没有改变任何东西。 $meta 关键字是“textScore”而不是“textMatchScore”
是的,抱歉没有注意到更改,我复制粘贴了您的完整代码,出现相同的错误
我从 mongo shell db.serverStatus().version = 2.6.4 确认
@sbaaaang 如果您更改了代码,怎么会出现同样的错误?该错误指定了此处使用的错误值。以上是关于猫鼬,nodejs,全文搜索的主要内容,如果未能解决你的问题,请参考以下文章