Atlas Search 索引
如果您使用的是MongoDB Atlas托管的数据库,则驱动程序提供通过 search_indexes
属性创建、删除和查看集合上的 Atlas Search索引的功能:
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索引。
删除搜索索引
要删除 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或名称,您可以列出Atlas Search索引。
列出搜索索引
要列出可用的搜索索引,请遍历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