Поиск без учета регистра с помощью Regex - PullRequest
1 голос
/ 02 августа 2020

Я пытаюсь реализовать поиск без учета регистра с помощью регулярного выражения. Пример: / ^ sanford / i (поиск чего-либо, начинающегося с "sanford", без учета регистра.

Для запросов без учета регистра в документации рекомендуется создание индексов с настраиваемыми параметрами сортировки. Это отлично работает, пока не задействовано регулярное выражение.

Проблема: поиск с использованием регулярного выражения (в данном случае "начинается с"), поиск без учета регистра НЕ принимает индекс во внимание.

Это указано в документацию несколько раз, а также можно воспроизвести с помощью команды объяснения.

Подводя итог: он работает, но без эффективного использования индекса. Я был бы рад получить любые подсказки, я не могу избавиться чувства, что мне здесь не хватает чего-то принципиально важного.

Вставка строки с помощью toLowerCase и последующий поиск только строками в нижнем регистре не вариант. Я не могу использовать текстовый индекс, потому что может быть только по одному на коллекцию.

Пример из документации см. здесь, зеленое информационное окно внизу. @ D.SM: Индекс используется, но сканирует все документы. https://docs.atlas.mongodb.com/schema-suggestions/case-insensitive-regex/

Пример документа:

{
  "name": [{
        "family": "Test",
        "given": "Name",
    }],
}

Индекс с сопоставлением:

{ "name" : "name_family", "key" : { "name.family" : 1 }, "host" : "noneofyourbusiness.com", "accesses" : { "ops" : NumberLong(114), "since" : ISODate("2020-07-30T20:25:59.079Z") }, "shard" : "shA", "spec" : { "v" : 2, "key" : { "name.family" : 1 }, "name" : "name_family", "ns" : "noneofyourbusiness.somethingwithaname", "collation" : { "locale" : "de", "caseLevel" : false, "caseFirst" : "off", "strength" : 1, "numericOrdering" : false, "alternate" : "non-ignorable", "maxVariable" : "punct", "normalization" : false, "backwards" : false, "version" : "57.1" } } }
}
...