MongoDB——全文索引

672 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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" })

由于中文语言不支持,这块简单演示,等后续支持了,再研究研究。