MongoDB:在文本字段上创建一个用于有效的正则搜索索引

问题描述 投票:0回答:1

目前,我正在使用正则询问来搜索此字段中的特定objectid子字符串:

{
  "resource.fields.value.to": {
    "$regex": "671f3db04b00e7efd82a6c5b",
    "$options": "i"
  }
}

该搜索有效,但很慢,尤其是在大型数据集上。我想通过在此字段上创建索引来优化查询性能。

问题: 如何在此字段上创建一个索引来加快基于正则的搜索?
在这种情况下,全文索引会有所帮助,还是有更好的方法?
有其他方法来构建我的数据以使查询更有效吗?(不是最佳)

$regex

docs

:查询的index使用和性能取决于查询是对病例敏感的还是对病例的敏感。
mongodb indexing nosql full-text-search
1个回答
1
投票

如何创建一个索引来加快此字段的基于正则搜索的搜索?
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游乐场

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.