MongoDB 全文索引
-
全文索引
从2.4版开始,MongoDB开始支持文本索引来搜索内部字符串内容。该全文索引通过降低所产生停止的话就像使用词干技术,以寻找在字符串字段中指定词语。目前,MongoDB的支持大约15种语言。语言名称 ISO 639-1(两个字母代码) danish da dutch nl english en finnish fi french fr german de hungarian hu italian it norwegian nb portuguese pt romanian ro russian ru spanish es swedish sv turkish tr -
启用全文索引
最初,全文索引是一项实验性功能,但是从2.6版开始,默认情况下启用该配置。创建文本索引考虑posts集合下的以下文档,其中包含帖子文本及其标签-db.posts.insert([{"post_text": "enjoy the mongodb articles on jc2182", "tags": ["mongodb", "jc2182"]},{"post_text" :"writing tutorials on mongodb","tags" : [ "mongodb", "tutorials" ]}])
我们将在post_text字段上创建一个全文索引,以便我们可以在帖子的文本中进行搜索-db.posts.createIndex({post_text:"text"}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
-
使用全文索引
现在,我们在post_text字段上创建了全文索引,我们将搜索所有文本中带有词 jc2182 的帖子。db.posts.find({$text:{$search:"jc2182"}}).pretty() { "_id" : ObjectId("5f4f366d5406e4349a0cd253"), "post_text" : "enjoy the mongodb articles on jc2182", "tags" : [ "mongodb", "jc2182" ] }
-
删除全文索引
要删除现有的文本索引,请首先使用以下查询找到索引的名称-db.posts.getIndexes() [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "post_text_text", "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 }