如果我想在下面进行MongoDB文本搜索,可以调整什么
var items = [{
title: 'Fender Jazz Bass Guitar 4 String Barely used'
}, {
title: 'Mark Bass'
}, {
title: 'Fender Telecaster'
}, {
title: 'Fender Double Fat Strat'
}];
db.collection('items').createIndex({ title: 'text'}, function(){});
// Using MongooseJS to query
Items.find({ $text: { $search: 'Fender Jazz Bass Guitar 4 String' }})
// After query this it does not return Fender Jazz Bass Guitar 4 String as the top most search result
我希望结果数组的第一个元素是Fender Jazz Bass Guitar 4 String Barely used
这甚至可能吗?还是我需要另一个更复杂的搜索引擎?
答案 0 :(得分:1)
默认情况下,文本搜索不会按匹配分数的顺序返回匹配的文档,请参阅documentation。您需要使用$ sort阶段中的$meta
表达式按textScore
排序。
Item.find({ $text: { $search: 'Fender Jazz Bass Guitar 4 String' }}, {score: {$meta: "textScore"}}).sort({score:{$meta:"textScore"}})
排序后,包含Fender Jazz Bass Guitar 4 String Barely used
的文档应显示为结果中的第一个元素。
答案 1 :(得分:0)
在Mongo中使用文本搜索可以搜索单词(在您的情况下,搜索是针对任何文本索引字段,包含' Fender' OR' Jazz' OR' Bass&#39 ;或者'吉他' 4'或'字符串')
如果您想要专门显示短语,请使用短语约定转义字符串
{ $text: { $search: "\"Fender Jazz Bass Guitar 4 String\"" } }
<强>词强> 要匹配短语而不是单个字词,请将短语括在转义双引号中(\&#34;)
如果短语搜索选项不是您正在寻找的内容,那么我不知道如何轻松完成您所寻求的目标。可以找到有关构建搜索词组here
的更多信息*编辑链接到MongoDB文档并澄清短语
答案 2 :(得分:0)
您正在寻找的是根据它们与您的关键字的相关性对结果进行排序。为此,mongodb文本搜索生成元评分.Meta评分是根据输入的关键字的文档的加权平均得分。您可以然后对此元评分进行排序。
这可以这样做:
db.yourcollectioname.find({ $text: { $search:"keywords" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } })
要了解成功运行mongodb文本搜索查询需要遵循的所有步骤,请参阅以下文章:http://codewhoop.com/article/MongoDb%20Text%20Search%20in%20fields%20of%20document
我发现这篇文章非常有用。希望你也觉得它很有用:)