mongodb - 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);
});
解决方案
感谢@amenadiel 获取此处的原始数据:
https://stackoverflow.com/a/24316510/7948962
来自 MongoDB 文档:
https://docs.mongodb.com/manual/core/index-text/
索引条目
文本索引对索引条目的索引字段中的术语进行标记和提取。文本索引为集合中每个文档的每个索引字段中的每个唯一词干术语存储一个索引条目。该索引使用简单的特定于语言的后缀词干。
这是为了允许您在索引中搜索部分“词干”术语,并让数据库返回所有相关结果。在您的特定场景中,amaz
有点奇怪的标记,因为它与其他单词相比有点不规则,例如talking
,它被标记为单词,talk
或。同样和到。talked
talk
walking
walked
walk
在您的情况下,文本中的单词amazing
将被标记为amaz
. 如果您的列包含诸如 之类的数据amazed
,它也会收到相同的amaz
标记。并且这些结果也将通过搜索返回amaz
。
推荐阅读
- python - 如何检查JSON数组中是否存在值并继续循环
- json - 将jsonb键值转换为键值数组
- java - JAVA 8:更改流内的值
- html - 如何在 div 之间设置不同的 z-Index?
- google-maps - 需要授权我的 Android 应用使用 Google Maps API
- azure-devops - VSTS - System.InvalidOperationException:无法确定恢复 NuGet 包的文件夹。指定 -PackagesDirectory 或 -SolutionDirectory
- java - 增加转置表大小会降低搜索速度
- angular - Angular Material - 带有错误状态的自定义反应表单控件
- java - 使用 stream() 按元素属性对 Java 列表进行排序
- delphi - TGraphicControl 组件上的透明位图