首页 > 解决方案 > MongoDb 索引全文搜索

问题描述

我有一个名为“posts”的文件,它是这样的:

{ 
    "_id" : ObjectId("5afc22290c06a67f081fa463"), 
    "title" : "Cool", 
    "description" : "this is amazing" 
}

我已经把索引放在标题和描述上:

db.posts.createIndex( { title: "text", description: "text" } )

问题是当我搜索并输入例如“amaz”时,它会返回上面带有“这太棒了”的数据,而只有当我输入“amazing”时它才应该返回数据

 db.posts.find({ $text: { $search: 'amaz' } }, (err, results) => {
     return res.json(results); 
  });

标签: mongodbindexingmongoose

解决方案


感谢@amenadiel 获取此处的原始数据:

https://stackoverflow.com/a/24316510/7948962

来自 MongoDB 文档:

https://docs.mongodb.com/manual/core/index-text/

索引条目

文本索引对索引条目的索引字段中的术语进行标记和提取。文本索引为集合中每个文档的每个索引字段中的每个唯一词干术语存储一个索引条目。该索引使用简单的特定于语言的后缀词干。

这是为了允许您在索引中搜索部分“词干”术语,并让数据库返回所有相关结果。在您的特定场景中,amaz有点奇怪的标记,因为它与其他单词相比有点不规则,例如talking,它被标记为单词,talk或。同样和到。talkedtalkwalkingwalkedwalk

在您的情况下,文本中的单词amazing将被标记为amaz. 如果您的列包含诸如 之类的数据amazed,它也会收到相同的amaz标记。并且这些结果也将通过搜索返回amaz


推荐阅读