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 }

以上是MongoDB 全文索引的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>