Начиная с версии 2.4, MongoDB начал поддерживать текстовые индексы для поиска внутри строкового содержимого. В текстовом поиске используются методы определения основ для поиска указанных слов в строковых полях путем удаления таких слов, как a, an, the и т. Д. В настоящее время MongoDB поддерживает около 15 языков.
Включение текстового поиска
Первоначально текстовый поиск был экспериментальной функцией, но, начиная с версии 2.6, конфигурация включена по умолчанию. Но если вы используете предыдущую версию MongoDB, вы должны включить текстовый поиск с помощью следующего кода —
>db.adminCommand({setParameter:true,textSearchEnabled:true})
Создание текстового указателя
Рассмотрим следующий документ под коллекцией сообщений, содержащий текст сообщения и его теги:
{ "post_text": "enjoy the mongodb articles on tutorialspoint", "tags": [ "mongodb", "tutorialspoint" ] }
Мы создадим текстовый индекс в поле post_text, чтобы мы могли искать внутри текста наших сообщений —
>db.posts.ensureIndex({post_text:"text"})
Использование текстового указателя
Теперь, когда мы создали текстовый индекс в поле post_text, мы будем искать все посты, имеющие слово tutorialspoint в их тексте.
>db.posts.find({$text:{$search:"tutorialspoint"}})
Приведенная выше команда вернула следующие документы результатов, имеющие слово tutorialspoint в своем тексте сообщения —
{ "_id" : ObjectId("53493d14d852429c10000002"), "post_text" : "enjoy the mongodb articles on tutorialspoint", "tags" : [ "mongodb", "tutorialspoint" ] } { "_id" : ObjectId("53493d1fd852429c10000003"), "post_text" : "writing tutorials on mongodb", "tags" : [ "mongodb", "tutorial" ] }
Если вы используете старые версии MongoDB, вы должны использовать следующую команду —
>db.posts.runCommand("text",{search:" tutorialspoint "})
Использование текстового поиска значительно повышает эффективность поиска по сравнению с обычным поиском.
Удаление текстового указателя
Чтобы удалить существующий текстовый индекс, сначала найдите имя индекса, используя следующий запрос —
>db.posts.getIndexes()
После получения имени вашего индекса из вышеуказанного запроса выполните следующую команду. Здесь post_text_text — это имя индекса.