mongodb - 如何对 MongoDB 中的嵌套字段进行全文搜索?
问题描述
我通过以下方式将我的本地化存储在 MongoDB 中
db.user.insertMany([
{
"name": {
"en": "Frodo Baggins",
"ru": "Фродо Беггинс"
}
},
{
"name": {
"en": "Bilbo Baggins",
"ru": "Бильбо Беггинс"
}
}
])
我知道我可以用这个在所有字段上应用全文搜索索引
db.user.ensureIndex({ "$**": "text" })
但是我的文档有很多我不想索引的其他信息。有没有办法指定只索引名称字段内容?
解决方案
您可以在 name.en 和 name.ru 上创建复合索引:
db.user.createIndex(
{
"name.en": "text",
"name.ru": "text"
}
)
并使用此查询进行搜索:
db.user.find( { $text: { $search: "Baggins" } })
您甚至可以添加一个分值,并排序:
db.user
.find({ $text: { $search: "Baggins" } }, { score: { $meta: "textScore" } })
.sort({ score: { $meta: "textScore" } });
这将给出如下结果:
{
"_id" : ObjectId("5e8237b3c3ff893c44edd74e"),
"name" : {
"en" : "Frodo Baggins",
"ru" : "Фродо Беггинс"
},
"score" : 1.5
},
{
"_id" : ObjectId("5e8237b3c3ff893c44edd74f"),
"name" : {
"en" : "Bilbo Baggins",
"ru" : "Бильбо Беггинс"
},
"score" : 0.75
}
推荐阅读
- clojure - Clojure 按 id 过滤向量中的嵌套映射
- webpack - “this”上下文在 JS 文件中不可用(Webpack 4)
- reactjs - 为什么 componentDidMount() 是评估用户身份验证的更好地方?
- c - 最后一个元素在 C 中的双向链表实现中效果不佳
- c# - C# mongo db驱动程序随机无法连接到db
- amazon-web-services - AWS SQL Server RDS 命令超时问题
- excel - 如何计算每行中的匹配项与另一行中的值?
- amazon-web-services - 如何使用 python 代码检查 AWS 粘合作业状态?
- distributed-computing - 在 n=3f+1 个副本之间达成共识后,为什么客户端只需要查看具有相同内容的 f+1 个消息?
- flutter - Can't able to maintain the drawer state in flutter