Лучший индекс MongoDB для полей с возможностью регулярного выражения

#mongodb #indexing #mongodb-indexes

Вопрос:

Я новичок в MongoDB, и до сих пор мне это нравится. Единственные проблемы, с которыми я сталкиваюсь,-это производительность при использовании регулярного выражения без учета регистра для поиска строковых полей. Мне было интересно, может ли кто-нибудь подсказать мне, как лучше всего индексировать мои поля в зависимости от обстоятельств, с которыми я сталкиваюсь?

контекст

У меня есть несколько строковых полей (имя файла, путь к файлу, расширение), и мне нужно иметь возможность регулярного поиска и сортировки по всем этим полям.

Я провел много исследований, и, похоже, индекс сортировки очень помогает в этом. Однако при сопоставлении вы теряете возможность использовать регулярные выражения. Я видел способы обойти регулярное выражение «StartsWith» с использованием $gte и $lt , но мне нужна возможность использовать подстановочные знаки в середине строки.

С обычным индексом в поле (например, расширение), an explain() показывает, что mongo не будет использовать индекс при использовании $regex , а производительность очень низкая (почти 5 минут). Однако, если я заставлю поиск использовать индекс hint() , производительность значительно увеличится (в секундах).

вопрос

Каков был бы лучший способ индексировать мои строковые поля без потери поиска по подстановочным знакам без учета регистра в середине строки (с использованием или без использования $regex )?

Должен ли я использовать обычный индекс и программно заставить монго использовать индекс с помощью hint() ?

Как насчет использования $text индекса?