Как динамически изменять текстовый индекс в mongodb для одной коллекции?

#python #mongodb #indexing #full-text-search #eve

#python #mongodb #индексирование #полнотекстовый поиск #eve

Вопрос:

Можно ли динамически изменять поиск по текстовому индексу в одной коллекции в mongodb? Изначально у меня $text есть индекс в first.text поле моей коллекции, но когда пользователь нажимает кнопку, я хочу переключиться, чтобы разрешить только текстовый поиск по second.text полю. Я знаю, что одновременно в коллекции mongodb может быть создан только один текстовый индекс.

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

 {
    first : {
        text : 'search here'
    },
    second : {
        text : 'search ONLY here after a button press'
    },
}
  

Ответ №1:

вы можете использовать on_pre_GET hook и использовать ensureIndex(...) для создания индекса или удаления индекса с помощью dropIndexes(...)

но манипулирование индексами — это серьезное действие, и оно имеет огромные затраты на производительность. MongoDB говорит:

По умолчанию создание индекса блокирует все другие операции с базой данных. При создании индекса для коллекции база данных, содержащая коллекцию, недоступна для операций чтения или записи до завершения построения индекса

вы можете создать ОБЫЧНЫЙ индекс для каждого поля и использовать $regex, например:

?where={"first.text": {"$regex": ".*search.*"}}