Полнотекстовый поиск в 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")
Другие расширения