我们在百度搜索中,可以看到与自己搜索度内容越相关度,排在越前面,这个需求可以在mongodb中很简单度实现,mongodb的全文索引不仅可以返回相匹配的查询结果,而且可以告诉你查询结果与你的查询条件多么的匹配
全文索引相似度
$meta操作符:{score:{$meta:'textScore'}}
写在查询条件后面可以返回返回结果的相似度,与sort一起使用,可以达到很好的实用效果。
查找
> db.test2.find()
{ "_id" : ObjectId("5b677bc820eccd3c60a316d9"), "article" : "aa bb cc dd ee" }
{ "_id" : ObjectId("5b677bcb20eccd3c60a316da"), "article" : "aa bb cc dd rr gg" }
{ "_id" : ObjectId("5b677bd220eccd3c60a316db"), "article" : "aa bb cc dd hh " }
{ "_id" : ObjectId("5b677bf320eccd3c60a316dc"), "article" : "aa bb cc" }
{ "_id" : ObjectId("5b677bf920eccd3c60a316dd"), "article" : "aa bb cc dd" }
有5条数据,用相似度匹配下
 
> db.test.find({$text:{$search:'aa bb'}},{score:{$meta:'textScore'}})
{ "_id" : ObjectId("5b677d6720eccd3c60a316e1"), "article" : "aa bb ff hh rr", "score" : 1.2 }
{ "_id" : ObjectId("5b677d5e20eccd3c60a316e0"), "article" : "aa bb dd ee", "score" : 1.25 }
{ "_id" : ObjectId("5b677d5a20eccd3c60a316df"), "article" : "aa bb cc", "score" : 1.3333333333333333 }
{ "_id" : ObjectId("5b677d4820eccd3c60a316de"), "article" : "aa bb", "score" : 1.5 }
后面返回个score,相似度最高的是1.5, aa bb,其他是1.25,1.2,这个结果不仅能够表明相似度,而且可以用来排序
> db.test.find({$text:{$search:'aa bb'}},{score:{$meta:'textScore'}}).sort({score:{$meta:'textScore'}})
{ "_id" : ObjectId("5b677d4820eccd3c60a316de"), "article" : "aa bb", "score" : 1.5 }
{ "_id" : ObjectId("5b677d5a20eccd3c60a316df"), "article" : "aa bb cc", "score" : 1.3333333333333333 }
{ "_id" : ObjectId("5b677d5e20eccd3c60a316e0"), "article" : "aa bb dd ee", "score" : 1.25 }
{ "_id" : ObjectId("5b677d6720eccd3c60a316e1"), "article" : "aa bb ff hh rr", "score" : 1.2 }
可以看到1.5排在最前面,运用这个,可以在自己的博客实现相似度查询
 
 
05-11 15:21