目前,我正在使用正则询问来搜索此字段中的特定objectid子字符串:
{
"resource.fields.value.to": {
"$regex": "671f3db04b00e7efd82a6c5b",
"$options": "i"
}
}
该搜索有效,但很慢,尤其是在大型数据集上。我想通过在此字段上创建索引来优化查询性能。
问题: 如何在此字段上创建一个索引来加快基于正则的搜索?在这种情况下,全文索引会有所帮助,还是有更好的方法?有其他方法来构建我的数据以使查询更有效吗?(不是最佳)
从
$regex
docs
:查询的index使用和性能取决于查询是对病例敏感的还是对病例的敏感。如何创建一个索引来加快此字段的基于正则搜索的搜索?1.
如果您可以将
$regex
字段转换为始终为小写,并且还可以使用较低率的ID进行搜索,那么您可以删除对案例不敏感的部分,而Regex搜索可以使用index。
2.如果您可以使用prefix表达式与案例敏感的查询::“如果正则表达式为“前缀表达式”,可能会发生进一步的优化,这意味着所有潜在匹配都以相同的字符串开头。这允许MongoDB从该范围内构造一个“范围”,并且仅在该范围内与这些值匹配这些值。 3.
Wrt
有其他方法来构建我的数据以使查询更有效吗?(不是最佳)
这可能很明显,但是您的数据结构可以优化以在您拥有的字段上拆分。喜欢:
$regex
注意,我已经丢弃了前缀$regex
,
resource.fields.value.to
,option: "i"
,因为该字段指定了它是为了哪个ID。然后,您可以使用一个前缀正则正式7号或仅使用标准等于{
"resource": {
"fields": {
"value": {
"to": {
"parent": "671f3db04b00e7efd82a6c5b",
"image": "67d00437953155602e87b6fa",
"file": "671f3db04b00e7efd82a6123",
}
}
}
}
}
子句,它将使用该索引 - 该索引需要3个索引:每个字段一个。 (您可能还想考虑稍微延伸到字段,但这取决于您的用法。)
查询然后变为:
parent_
Mongo游乐场