English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
С версии 2.4 MongoDB начинает поддерживать текстовые индексы для поиска содержимого строк. Поиск текста (Text Search) использует метод морфологического анализа для поиска указанных слов в полях строк через удаление морфологических анализаторов стоп-слов (например, a, an, The и т.д.). В настоящее время MongoDB поддерживает около 15 языков.
Вначале, "Text Search (Текстовый поиск)" был экспериментальной функцией, но начиная с версии 2.6, эта конфигурация была включена по умолчанию.
Рассмотрим следующийposts
документы в集合е, содержащие текст帖子 и теги-
>db.posts.insert({ "post_text": "enjoy the mongodb articles on w3codebox", "tags": ["mongodb", "w3codebox"] } { "post_text": "writing tutorials on mongodb", "tags": ["mongodb", "tutorial"] } WriteResult({ "nInserted": 1 })
Мы создадим текстовый индекс в поле post_text, чтобы мы могли搜索
>db.posts.createIndex({post_text:"text"}) { "createdCollectionAutomatically": true, "numIndexesBefore": 1, "numIndexesAfter": 2, "ok": 1 }
Теперь, мы создали текстовый индекс в поле post_text, и мы будем搜索w3codebox
все帖子, содержащие слово.
>db.posts.find({$text:{$search:"w3codebox"}}).pretty(){ "_id": ObjectId("5dd7ce28f1dd4583e7103fe0"), "post_text": "enjoy the mongodb articles on w3codebox", "tags": [ "mongodb", "w3codebox" ] }
Команда, приведенная выше, возвращает следующий документ результатов, документ результатовw3codebox
в тексте发布的 содержится слово:
{ "_id": ObjectId("53493d14d852429c10000002"), "post_text": "enjoy the mongodb articles on w3codebox", "tags": ["mongodb", "w3codebox"]}
Чтобы удалить существующий текстовый индекс, сначала используйте следующий запрос, чтобы найти имя индекса-
>db.posts.getIndexes()[ { "v": 2, "key": { "_id": 1 }, "name": "_id_", "ns": "mydb.posts" }, { "v": 2, "key": { "fts": "text", "ftsx": 1 }, "name": "post_text_text", "ns": "mydb.posts", "weights": { "post_text": 1 }, "default_language": "english", "language_override": "language", "textIndexVersion": 3 } ] >
Получив имя индекса из上面的 запроса, выполните следующую команду. Здесь:post_text_text
Это имя индекса.
>db.posts.dropIndex("post_text_text") {"nIndexesWas": 2, "ok": 1}