Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

在自管理部署上创建文本索引

在此页面上

  • 关于此任务
  • 开始之前
  • 步骤
  • 创建单字段文本索引
  • 创建复合文本索引

注意

本页介绍了自托管(非 Atlas)部署的文本查询功能。对于托管在 MongoDB Atlas 上的数据,MongoDB 提供了一种改进的全文查询解决方案, Atlas Search。

文本索引支持对包含字符串内容的字段进行文本搜索查询。文本索引可提高搜索字符串内容中特定单词或短语时的性能。

要创建文本索引,请使用 db.collection.createIndex()方法。 要索引包含string或string元素大量的字段,请将string "text" 指定为索引键:

db.<collection>.createIndex(
{
<field1>: "text",
<field2>: "text",
...
}
)
  • 一个集合最多可以有一个文本索引。

    Atlas Search(在 MongoDB Atlas 中可用)支持在单个集合上使用多个全文搜索索引。要了解更多信息,请参阅 Atlas Search 文档

  • 您可以在单个文本索引中对多个字段进行索引。 文本索引最多可包含32个字段。 要查看示例,请参阅创建复合文本索引。

使用以下文档创建 blog 集合:

db.blog.insertMany( [
{
_id: 1,
content: "This morning I had a cup of coffee.",
about: "beverage",
keywords: [ "coffee" ]
},
{
_id: 2,
content: "Who likes chocolate ice cream for dessert?",
about: "food",
keywords: [ "poll" ]
},
{
_id: 3,
content: "My favorite flavors are strawberry and coffee",
about: "ice cream",
keywords: [ "food", "dessert" ]
}
] )

以下示例展示了如何:

content字段上创建文本索引:

db.blog.createIndex( { "content": "text" } )

该索引支持在 content 字段上进行文本搜索查询。例如,以下查询返回其中 content 字段包含 coffee 字符串的文档:

db.blog.find(
{
$text: { $search: "coffee" }
}
)

输出:

[
{
_id: 1,
content: 'This morning I had a cup of coffee.',
about: 'beverage',
keywords: [ 'coffee' ]
},
{
_id: 3,
content: 'My favorite flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ]
}
]

{ "content": "text" }索引仅包含content字段,不返回非索引字段的匹配项。 示例,以下查询在 blog集合中搜索string food

db.blog.find(
{
$text: { $search: "food" }
}
)

前面的查询未返回任何文档。尽管字符串 food 出现在文档 _id: 2_id: 3 中,但它分别出现在字段 aboutkeywords 中。aboutkeywords 字段不包含在文本索引中,因此不会影响文本搜索查询结果。

注意

在创建本示例中的索引之前,必须删除 blog 集合上所有现有的文本索引

blog 集合的 aboutkeywords 字段上创建复合文本索引:

db.blog.createIndex(
{
"about": "text",
"keywords": "text"
}
)

该索引支持对 aboutkeywords 字段进行文本搜索查询。例如,以下查询返回字符串 food 出现在 aboutkeywords 字段中的文档:

db.blog.find(
{
$text: { $search: "food" }
}
)

输出:

[
{
_id: 3,
content: 'My favorite flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ]
},
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'poll' ]
}
]

后退

Text Indexes