文档菜单
文档首页
/ / /
Ruby MongoDB 驱动
/

Atlas 搜索索引

在本页

  • 创建搜索索引
  • 更新搜索索引
  • 删除搜索索引
  • 列出搜索索引

如果您使用的是由 MongoDB Atlas 托管的数据库,驱动程序提供通过Atlas 搜索索引在集合中创建、删除和查看的能力search_indexes属性

client = Mongo::Client.new(your_atlas_uri, database: 'music')
client[:bands].search_indexes
# => #<Mongo::SearchIndex::View:0x000055e2822b9318 @collection=#<Mongo::Collection:0x660 namespace=music.bands> ...>

搜索索引可以一次创建一个,也可以在一个操作中并行创建多个。

要创建单个索引,请使用 search_indexes#create_one,将索引定义作为第一个参数传递,并将索引的可选名称作为第二个参数。

client[:bands].search_indexes.create_one({ dynamic: true })
client[:bands].search_indexes.create_one(
{
dynamic: false,
fields: {
name: { type: 'string', analyzer: 'lucene.simple' }
}
},
'band-name-index'
)

要创建多个索引,请使用 search_indexes#create_many,它接受一个索引规范数组。与 create_one 不同,每个索引规范都是一个包含至少一个 definition 键的哈希,该键定义了索引。该哈希还可以指定一个 name 键,以命名索引。

client[:bands].search_indexes.create_many([
{ definition: { dynamic: true } },
{ name: 'band-name-index,
definition: {
dynamic: false,
fields: {
name: { type: 'string', analyzer: 'lucene.simple' }
}
}
},
])

请注意,无论您是调用 create_one 还是 create_many,该方法都会立即返回,在创建索引之前。然后,索引将在后台异步创建。

您可以使用编程方式更新 Atlas 搜索索引。例如,您可能这样做是为了更改使用的分析器,或者提供显式字段映射而不是动态映射。为此,请使用 search_indexes#update_one 方法

client[:bands].search_indexes.update_one(new_definition, id: index_id)
client[:bands].search_indexes.update_one(new_definition, name: index_name)

索引可以通过 id 或名称进行识别,但您必须指定其中一个。新的索引定义必须是完整的定义 - 它将按指定的顺序覆盖现有定义。

要获取要更新的索引的 id 或名称,您可以通过 列出搜索索引

要删除 Atlas 搜索索引,请调用 search_indexes#drop_one 并提供您要删除的索引的 idname

client[:bands].search_indexes.drop_one(id: index_id)
client[:bands].search_indexes.drop_one(name: index_name)

在任一情况下,该方法都会立即返回,并在后台异步删除索引。

要获取要删除的索引的id或名称,您可以列出搜索索引

要列出可用的搜索索引,遍历search_indexes对象

client[:bands].search_indexes.each do |index_spec|
p index_spec['id']
p index_spec['name']
p index_spec['status']
p index_spec['queryable']
p index_spec['latestDefinition']
end

返回

索引