#mongodb #indexing #mongodb-indexes
Вопрос:
Я новичок в MongoDB, и до сих пор мне это нравится. Единственные проблемы, с которыми я сталкиваюсь,-это производительность при использовании регулярного выражения без учета регистра для поиска строковых полей. Мне было интересно, может ли кто-нибудь подсказать мне, как лучше всего индексировать мои поля в зависимости от обстоятельств, с которыми я сталкиваюсь?
контекст
У меня есть несколько строковых полей (имя файла, путь к файлу, расширение), и мне нужно иметь возможность регулярного поиска и сортировки по всем этим полям.
Я провел много исследований, и, похоже, индекс сортировки очень помогает в этом. Однако при сопоставлении вы теряете возможность использовать регулярные выражения. Я видел способы обойти регулярное выражение «StartsWith» с использованием $gte
и $lt
, но мне нужна возможность использовать подстановочные знаки в середине строки.
С обычным индексом в поле (например, расширение), an explain()
показывает, что mongo не будет использовать индекс при использовании $regex
, а производительность очень низкая (почти 5 минут). Однако, если я заставлю поиск использовать индекс hint()
, производительность значительно увеличится (в секундах).
вопрос
Каков был бы лучший способ индексировать мои строковые поля без потери поиска по подстановочным знакам без учета регистра в середине строки (с использованием или без использования $regex
)?
Должен ли я использовать обычный индекс и программно заставить монго использовать индекс с помощью hint()
?
Как насчет использования $text
индекса?