Atlas Search 概述
MongoDB 的 Atlas Search 允许对 Atlas 集群上的数据进行细粒度的文本索引和数据查询。它为您的应用程序提供高级搜索功能,无需任何额外的管理或在数据库旁边有单独的搜索系统。Atlas Search 提供了多种 文本分析器的选项,这是一种丰富的查询语言,它使用 Atlas Search 聚合管道阶段(如 $search
和 $searchMeta
)与其他 MongoDB 聚合管道阶段结合使用,以及基于分数的结果排名。
提示
使用 Atlas Search Playground 快速试用 Atlas Search,无需 Atlas 帐户、集群或集合。如需了解更多信息,请参阅 文档 。
Atlas Search 基础知识
以下概念构成了 Atlas Search 的基础,对于优化您的应用程序至关重要。
索引
在搜索环境中,索引是一种数据结构,以便于搜索的格式对数据进行分类。使用搜索索引,可以更快地检索包含特定术语的文档,而不必扫描整个集合。尽管 Atlas Search 索引和 MongoDB 索引都能加速数据检索,但它们并不相同。就像书本后面的索引一样,搜索索引是术语与包含术语的文档之间的映射。搜索索引还包含其他相关的元数据,例如术语在文档中出现的位置信息。
在任何搜索应用程序中,通常都需要创建至少一个搜索索引。有关更多信息,请参阅创建和管理 Atlas Search 索引。
分词器
创建搜索索引时,必须首先将数据转换为词元或术语序列。分析器通过以下步骤来简化此过程,包括:
标记化:将字符串中的单词分解为可索引的标记。例如用空格和标点符号划分句子。
规范化:整理数据,使其呈现方式一致且更易于分析。例如,将文本转换为小写或删除称为停用词的不需要的词。
词干提取:将单词简化为其词根形式。例如,忽略后缀、前缀和复数形式。
分词的细节因语言而异,可能需要做出其他选择。使用哪种分析器取决于您的数据和应用程序。有关更多信息,请参阅使用分析器处理数据。
查询
搜索查询会查阅索引以返回一组结果。搜索查询不同于传统的数据库查询,因为它们旨在满足更一般的信息需求。数据库查询必须遵循严格的语法,而搜索查询可以用于简单的文本匹配,但它也可以查找相似的短语、数字或日期范围,或者使用正则表达式或通配符。
有关更多信息,请参阅创建和运行 Atlas Search 查询。
评分
每个文档都会收到一个相关性分数,该分数可以按从最高相关性到最低相关性的顺序返回查询结果。在最简单的评分形式中,如果查询词频繁出现在某一文档中,则该文档的评分较高;如果该查询词出现在集合内的很多文档中,则其评分较低。也可以自定义评分。针对特定域定制搜索通常意味着通过以其他方式提升、衰减或修改基于相关性的默认分数来进行自定义。
有关更多信息,请参阅对文档进行评分。
Atlas Search 架构
Atlas Search mongot
流程建立在 Apache Lucene 之上,与 mongod
数据库进程接口,用于创建和管理您的全文和向量搜索索引和查询。
关于 mongot
进程
mongot
进程执行以下任务:
根据该集合的索引定义中的规则来创建 Atlas Search 索引。
监控文档当前状态的变更流,以及已定义 Atlas Search 索引的集合索引。
处理 Atlas Search 查询,并将匹配文档的文档 ID 和其他搜索元数据返回给
mongod
,然后执行完整的文档查找并将结果返回给客户端。
您可以选择一种部署模式,其中 Atlas Search mongot
进程与 mongod
进程一起在 Atlas 集群中的每个节点上运行,或者 mongot
进程在不同的搜索节点上运行。为了测试搜索查询和设计应用程序原型,您可以选择 mongot
和 mongod
进程在同一个节点上运行的默认部署模型。但是,对于生产就绪型应用程序,请在不同的搜索节点上部署 mongot
以避免生产环境中 mongot
和 mongod
进程之间出现任何资源争用。
有关为预生产和生产环境选择部署类型的指导,请参阅Atlas Search 部署选项和Atlas Vector Search 部署选项。