自管理部署上的文本索引
注意
本页介绍了自托管(非 Atlas)部署的文本查询功能。对于托管在 MongoDB Atlas 上的数据,MongoDB 提供了一种改进的全文查询解决方案, Atlas Search。
文本索引支持对包含字符串内容的字段进行文本搜索查询。文本索引可提高在字符串内容中搜索特定单词或短语时的性能。
一个集合只能有一个文本索引,但该索引可以包含多个字段。
要创建文本索引,请使用以下原型:
db.<collection>.createIndex( { <field1>: "text", <field2>: "text", ... } )
$text 支持
文本索引支持在本地部署上执行 $text
查询操作。要使用$text
,您必须创建文本索引。
用例
在线商店的clothing
集合中的文档包括一个description
字段,其中包含一串描述每个商品的文本字符串。要查找由silk
制成的衣服,请在description
字段上创建文本索引,并对包含关键字silk
的文档运行$text
查询。搜索会返回在description
字段中提及silk
的所有文档。
开始体验
要了解如何创建文本索引以及如何在具体应用场景中使用文本索引,请参阅:
详情
本节介绍文本索引的详细信息。
复合文本索引
对于包含文本索引键以及其他类型键的复合索引,只有文本索引字段决定索引是否引用了文档。其他键不决定索引是否引用了文档。
sparse
属性
文本索引始终是稀疏索引。当您创建文本索引时,MongoDB 会忽略 sparse
选项。
如果现有或新插入的文档缺少文本索引字段(或该字段为空或为空数组),MongoDB 不会为该文档添加文本索引项。
存储要求和性能成本
文本索引的存储要求和性能成本如下:
文本索引可能会占用大量 RAM。对于所有插入的文档,文本索引都包含与该文档索引字段中每个经词干处理后不同的单词一一对应的索引项。
构建文本索引与构建大型多键索引类似,但比对相同数据构建简单有序(标量)的索引耗时更长。
当构建占用大量 RAM 的文本索引时,请确保对打开文件描述符有足够高的限制。请参见建议设置。
文本索引会影响写入性能,因为对于所有新的源文档, MongoDB 必须为其索引字段中每个经词干处理后不同的单词添加一个索引项。
文本字符串的每个单词在文本索引中被单独存储。文本索引不存储短语或文档中单词邻近程度的相关信息。这样一来,当整个集合能加载到 RAM 中时,指定多个单词作为查询条件的查询将运行得更快。
了解详情
要了解有关文本索引的更多信息,请参阅:
有关文本搜索示例,请参见
$text reference page
。有关聚合管道中的示例
$text
操作,请参阅自托管部署上的聚合管道中的 $text。