#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.*"}}