MST

星途 面试题库

面试题:MongoDB全文搜索索引在复杂场景下的优化与应用

在一个大型新闻数据库中,集合 'news' 存储新闻文章,每个文档有 'title'、'body'、'category' 等字段。要求对 'title' 和 'body' 字段建立全文搜索索引以支持高效的新闻检索。同时,需要根据 'category' 字段进行分类过滤检索。请描述如何设计索引策略以及实现相关查询,以保证在大数据量下的查询性能。
12.6万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

索引策略设计

  1. 全文搜索索引
    • 对于 titlebody 字段,使用全文搜索索引。以 MongoDB 为例,可通过以下方式创建全文索引:
    db.news.createIndex({title: "text", body: "text"});
    
    • 全文搜索索引能处理文本中的词干提取、停用词过滤等,在文本量较大时能极大提高检索效率。
  2. 分类过滤索引
    • 针对 category 字段,创建单字段索引。在 MongoDB 中:
    db.news.createIndex({category: 1});
    
    • 单字段索引适用于基于该字段的过滤查询,能够快速定位到符合特定分类的文档。

实现相关查询

  1. 全文搜索并分类过滤
    • 以 MongoDB 为例,假设要搜索标题或正文中包含“技术”且分类为“科技”的新闻:
    db.news.find({
        $text: {$search: "技术"},
        category: "科技"
    });
    
    • 这里 $text 操作符用于全文搜索,配合 $search 指定搜索词。同时通过 category 字段进行分类过滤。
  2. 仅分类过滤查询
    db.news.find({category: "体育"});
    
    • 此查询仅基于 category 字段进行过滤,由于 category 字段上有单字段索引,在大数据量下也能快速返回结果。

通过这样的索引策略和查询设计,可以在大数据量下保证新闻检索的性能。