关于利用text索引查询相似标题

将文章的信息保存在Mongo中 想对文章去重 通过文章标题来判断 如下所示

全球需求共振,扫地机器人走进千家万户【国君机械 深度】
服务机器人行业深度报告:全球需求共振,扫地机器人走进千家万户
全球需求共振,扫地机器人走进千家万户 ——服务机器人行业

可爱智能机器人,暑假给宝贝们一个最贴心的陪读老师!早教学习赢在起跑线!
爱优优仔智能机器人,暑假给宝贝们一个最贴心的陪读老师!早教学习赢在起跑线!
可爱优优仔智能机器人,暑假给宝贝们一个最贴心的陪读老师!早教学习赢在起跑线!

上述的文章认为是重复的文章 通过对文章标题创建text索引 可以找到重复的文章 如下所示

db.post.createIndex({title: 'text'})

> db.post.find({$text: {$search: '服务机器人行业深度报告:全球需求共振,扫地机器人走进千家万户'}}, {score: {$meta: 'textScore'}}).sort({score: {$meta: 'textScore'}})
{ "_id" : ObjectId("5b2f809152993004aaabdacc"), "title" : "服务机器人行业深度报告:全球需求共振,扫地机器人走进千家万户", "score" : 2 }
{ "_id" : ObjectId("5b2f809252993004aaabdacd"), "title" : "全球需求共振,扫地机器人走进千家万户 ——服务机器人行业", "score" : 1.3333333333333333 }
{ "_id" : ObjectId("5b2f809152993004aaabdacb"), "title" : "全球需求共振,扫地机器人走进千家万户【国君机械 深度】", "score" : 1.25 }

> db.post.find({$text: {$search: '暑假给宝贝们一个最贴心的陪读老师!早教学习赢在起跑线!'}}, {score: {$meta: 'textScore'}}).sort({score: {$meta: 'textScore'}})
{ "_id" : ObjectId("5b2f836652993004aaabdad6"), "title" : "可爱智能机器人,暑假给宝贝们一个最贴心的陪读老师!早教学习赢在起跑线!", "score" : 1.3333333333333333 }
{ "_id" : ObjectId("5b2f836652993004aaabdad7"), "title" : "爱优优仔智能机器人,暑假给宝贝们一个最贴心的陪读老师!早教学习赢在起跑线!", "score" : 1.3333333333333333 }
{ "_id" : ObjectId("5b2f836652993004aaabdad8"), "title" : "可爱优优仔智能机器人,暑假给宝贝们一个最贴心的陪读老师!早教学习赢在起跑线!", "score" : 1.3333333333333333 }

但是有个别情况下 并不能查出标题相似的文章来 如下所示

中国民族语文翻译局彝文智能翻译软件发布会在四川西昌举行
中国民族语文翻译局彝文智能翻译软件发布会在西昌邛海宾馆举行
昨天,中国民族语文翻译局彝文智能翻译软件发布会在四川西昌举行

# 为什么第二个查不出来
> db.post.find({$text: {$search: '中国民族语文翻译局彝文智能翻译软件发布会在四川西昌举行'}}, {score: {$meta: 'textScore'}}).sort({score: {$meta: 'textScore'}})
{ "_id" : ObjectId("5b2f80cd52993004aaabdad3"), "title" : "中国民族语文翻译局彝文智能翻译软件发布会在四川西昌举行", "score" : 1.1 }
{ "_id" : ObjectId("5b2f80ce52993004aaabdad5"), "title" : "昨天,中国民族语文翻译局彝文智能翻译软件发布会在四川西昌举行", "score" : 0.75 }

6月5号做单止盈情况表
6月7号做单止盈情况表
6月8号做单止盈情况表

# 为什么只能查出1一个来呢?
> db.post.find({$text: {$search: '6月5号做单止盈情况表'}}, {score: {$meta: 'textScore'}}).sort({score: {$meta: 'textScore'}})
{ "_id" : ObjectId("5b2f80ad52993004aaabdace"), "title" : "6月5号做单止盈情况表", "score" : 1.1 }

为什么有些明明非常相似的标题 却查不出来呢?

阅读 2.2k
1 个回答

因为MongoDB对中文的支持需要安装第三方分词引擎RLP(Rosette Linguistics Platform)。这个引擎并不是免费的,所以对中文的支持也只在MongoDB企业版中支持。具体请参考文档:https://docs.mongodb.com/manu...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进