Mongodb 变量查询的索引策略是什么?
最常见的用例可能是一个用户表,其中包含名称、lname、电子邮件和电话 我可能会搜索包含“paul”的姓名,电子邮件包含2@yahoo" 我可能会搜索电话=01234567890 我可能会搜索电子邮件=”foo@bar.com" 我的理解是,在mongo中,索引是按顺序工作的 姓名:1、姓名:1、电子邮件:1、电话:1对上述任何查询都不起作用Mongodb 变量查询的索引策略是什么?,mongodb,Mongodb,最常见的用例可能是一个用户表,其中包含名称、lname、电子邮件和电话 我可能会搜索包含“paul”的姓名,电子邮件包含2@yahoo" 我可能会搜索电话=01234567890 我可能会搜索电子邮件=”foo@bar.com" 我的理解是,在mongo中,索引是按顺序工作的 姓名:1、姓名:1、电子邮件:1、电话:1对上述任何查询都不起作用 对于这样的搜索表,最好的索引策略是什么?因此,您需要先创建索引定义,然后才能运行查询。在Atlas Data Explorer的“集合”视图中创建第一个搜
对于这样的搜索表,最好的索引策略是什么?因此,您需要先创建索引定义,然后才能运行查询。在Atlas Data Explorer的“集合”视图中创建第一个搜索索引定义可能很棘手 以下是我推荐的基于这些文档的索引定义:
{
"mappings": {
"fields": {
"email": {
"analyzer": "lucene.keyword",
"type": "string"
},
"phone": {
"analyzer": "lucene.keyword",
"type": "string"
},
"name": {
"analyzer": "lucene.keyword",
"type": "string"
},
"lname": {
"analyzer": "lucene.keyword",
"type": "string"
}
}
}
}
对于电子邮件和姓名字段上的contains样式查询,我建议如下:
{
$search: {
index: 'default',
compound: {
must: [{
wildcard: {
query: '*paul*',
path: 'name'
}
},{
wildcard: {
query: '*2@yahoo*',
path: 'email'
}
}]
}
}
}
应该是一个闪电般快速的查询,即使是对于一个大的索引,并且是您描述的多个子句之一。如果您还有任何问题,请告诉我。有很多功能,例如突出显示,也应该很有帮助。请注意,此查询是一个单子句。如果您想要多个子句,请将此子句嵌入
composite
操作符如图所示。您应该看看MongoDB Atlas Search。您可以通过通配符索引轻松完成这项工作。您想要一个示例查询吗。@不错,是的,这看起来就像我要找的!如果您想要自动完成等功能,您可以通过Atlas Search实现所有这些功能。所以,请继续如果下面的方法是正确的,请告诉我。我还添加了您建议的查询。这对您来说非常有效。如果您经常更新文档,您需要确定最终的一致性。对于大多数搜索查询,这是可以的。数据应能相对快速地复制。这太棒了,谢谢。我将试一试,但它看起来正是我想要的