持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
通常,我们会将文本存储在文档中。对于某些情况,根据文本某段内容来搜索,则MongoDB可以通过全文索引来实现简易的分词检索,也就是全文检索功能。
创建索引
db.<collection>.createIndex({<field>: "text", <field>: "text"....})
通配符全文索引
在多个字段上创建全文索引时,还可以使用通配符($**)。使用通配符文本索引,MongoDB会索引包含所有的String类型字段。
db.<collection>.createIndex({"$**": "text"})
通配符全文索引和通配符索引是有区别的,通配符索引不支持$text运算符
权重
全文索引,可以指定多个字段,因此我们在索引创建的时候可以为特定字段分配权重。默认权重是1。
db.<collection>.createIndex({<field>: 1,"$**": "text"})
通配符索引属于复合索引的一部分,由于我们指定的权重子啊全局索引之前,所以查询的时候遵循复合索引的匹配规则。
特征
- 不区分大小写
- 不区分音调,例如:
é、ê和e - 标记化分隔符,通常使用空格和标点符号作为分隔符
- 支持多种语言,但是目前还不支持中文。
- 支持一些停用词,例如
the,an,a,and等
限制
- 一个集合只能有一个全文索引,但是可以同时指定多个字段
- 索引的值必须是
text - 不能通过索引排序
- 不能包含多键索引,地理空间索引
性能和要求
- 全文索引占用空间会很大
- 构建全文索引与多键索引比较相似
- 影响插入效率
使用
插入以下数据
db.textExample.insertOne({ "statement": "MongoDB is the best" })
db.textExample.insertOne({ "statement": "MongoDB is the worst." })
建立索引
db.textExample.createIndex({ statement: "text" })
由于中文语言不支持,这块简单演示,等后续支持了,再研究研究。