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

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

在此页面上

  • 关于此任务
  • 开始之前
  • 步骤
  • 结果
  • 搜索单个单词
  • 搜索多个术语
  • 搜索确切的短语
  • 了解详情

您可以创建一个文本索引,其中包含集合中具有string数据的每个文档字段。 这些文本索引称为通配符文本索引。 通配符文本索引支持对未知字段、任意字段或动态生成的字段进行文本搜索

要创建通配符文本索引,请将索引键设置为通配符说明符 ( $** ) 并将索引值设置为text

db.<collection>.createIndex( { "$**": "text" } )

通配符文本索引与通配符索引不同。 通配符文本索引支持使用$text操作符的查询,而通配符索引不支持。

注意

$text 为自管理(非 Atlas)部署提供文本查询功能。 对于MongoDB Atlas上托管的数据, MongoDB提供了改进的全文查询解决方案 Atlas Search。

创建通配符文本索引后,插入或更新文档时,索引会更新以包含任何新的字符串字段值。因此,通配符文本索引会对插入和更新的性能产生负面影响。

仅当要索引的字段未知或可能更改时,才使用通配符文本索引。 通配符文本索引在特定字段上的性能不如目标文本索引。 如果您的集合包含阻止目标索引的任意字段名称,请考虑重新建模您的模式以具有一致的字段名称。 要学习;了解有关目标索引的更多信息,请参阅创建索引以支持查询。

使用以下文档创建 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" ]
}
] )

blog集合上创建通配符文本索引:

db.blog.createIndex( { "$**": "text" } )

通配符文本索引支持对集合中所有字段进行搜索查询。考虑以下查询:

查询 blog集合中的string 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' ]
}
]

前面的查询返回在任何字段中包含string coffee 的所有文档。

查询 blog集合中包含string pollcoffee 的文档:

db.blog.find( { $text: { $search: "poll 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' ]
},
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'poll' ]
}
]

前面的查询返回在任何字段中包含字符串 pollcoffee 的文档。

查询blog集合中包含短语chocolate ice cream的文档:

db.blog.find( { $text: { $search: "\"chocolate ice cream\"" } } )

输出:

[
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'poll' ]
}
]

前面的查询返回在任何字段中包含确切短语chocolate ice cream的文档。

后退

创建