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