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
并提供您要删除的索引的 id
或 name
。
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