MST

星途 面试题库

面试题:MongoDB文本查询优化之中等难度:索引策略

在MongoDB进行文本查询时,如何通过合理创建索引来提升搜索效率?请举例说明不同类型查询场景下适用的索引类型及创建方法。
14.6万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

1. 全文索引提升文本查询效率

在MongoDB中,对于文本查询,最有效的索引类型是全文索引。全文索引支持对文本内容进行更复杂的搜索,如词干提取、停用词处理等,能大大提升搜索效率。

2. 不同查询场景及适用索引类型与创建方法

简单文本匹配场景

  • 适用索引类型:单字段普通索引
  • 创建方法: 假设我们有一个集合 users,其中有一个 name 字段,我们希望通过 name 字段进行简单的文本匹配查询。
db.users.createIndex( { name: 1 } );

这里的 1 表示升序索引,如果是 -1 则表示降序索引。此索引适用于简单的 find 查询,例如:

db.users.find( { name: "John" } );

复杂文本搜索场景

  • 适用索引类型:全文索引
  • 创建方法: 假设我们有一个博客文章的集合 posts,其中 content 字段存储文章内容,我们希望能够对文章内容进行全文搜索。
db.posts.createIndex( { content: "text" } );

创建全文索引后,可以使用 $text 操作符进行搜索,例如:

db.posts.find( { $text: { $search: "mongodb indexing" } } );

这种方式会对 mongodbindexing 进行更智能的搜索,例如会处理词干(如 indexindexing 可能被视为相关),忽略停用词(如 the, and 等常见词)等。

如果集合中有多个字段需要进行全文搜索,可以创建复合全文索引:

db.posts.createIndex( { title: "text", content: "text" } );

查询时同样使用 $text 操作符:

db.posts.find( { $text: { $search: "mongodb indexing" } } );

此时搜索词会在 titlecontent 两个字段中同时进行搜索。