Skip to content

Commit

Permalink
Prep for 2.19.3 (#2807)
Browse files Browse the repository at this point in the history
* version bump

* add docs for the Atlas search index management API (#2806)

* nokogiri requires zlib

* async-io 1.37.0 (newly released) breaks on Ruby 2.5, 2.6

this is a dependency of the rubydns gem
  • Loading branch information
jamis authored Nov 16, 2023
1 parent a0526f8 commit 5c64168
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 3 deletions.
1 change: 1 addition & 0 deletions docs/reference/schema-operations.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ including managing databases, collections, indexes and users.
/reference/database-tasks
/reference/collection-tasks
/reference/indexing
/reference/search-indexes
/reference/collations
129 changes: 129 additions & 0 deletions docs/reference/search-indexes.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
********************
Atlas Search Indexes
********************

.. default-domain:: mongodb

.. contents:: On this page
:local:
:backlinks: none
:depth: 1
:class: singlecol

If you are using a database hosted by MongoDB Atlas, the driver provides the
ability to create, drop and view `Atlas search indexes <https://www.mongodb.com/docs/atlas/atlas-search/>`_
on a collection through the ``search_indexes`` attribute:

.. code-block:: ruby

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


Creating Search Indexes
=======================

Search indexes can be created one at a time, or several can be created in
parallel in a single operation.

To create a single index, use ``search_indexes#create_one``, passing the index
definition as the first argument, and an optional name for the index as the
second argument.

.. code-block:: ruby

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'
)

To create multiple indexes, use ``search_indexes#create_many`` which accepts
an array of index specifications. Unlike ``create_one``, each index
specification is a hash with at least a ``definition`` key, which
defines the index. Each has may also specify a ``name`` key, to name
the index.

.. code-block:: ruby

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

Note that whether you call ``create_one`` or ``create_many``, the
method will return immediately, before the indexes are created. The
indexes are then created in the background, asynchronously.


Update Search Indexes
=====================

You can programmatically update an Atlas search index. For example, you
might do this to change the analyzer used, or to provide an explicit field
mapping, instead of a dynamic one. To do this, use the ``search_indexes#update_one``
method:

.. code-block:: ruby

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

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

Indexes may be identified by either id, or name, but you must specify one
or the other. The new index definition must be a complete definition--it will
take precedence as specified over the existing definition.

To get the id or name of an index that you wish to update, you can
`list the search indexes <#listing-search-indexes>`_.


Dropping Search Indexes
=======================

To drop Atlas search indexes, call ``search_indexes#drop_one`` and
provide either the ``id`` or the ``name`` of the index you wish to
drop.

.. code-block:: ruby

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

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

In either case, the method will return immediately and the index will
be dropped in the background, asynchronously.

To get the id or name of an index that you wish to drop, you can
`list the search indexes <#listing-search-indexes>`_.


Listing Search Indexes
======================

To list the available search indexes, iterate over the
``search_indexes`` object:

.. code-block:: ruby

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
4 changes: 3 additions & 1 deletion docs/release-notes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,12 @@ This release includes the following new features:
when Azure Key Vault is used for client side encryption.
- `Queryable Encryption <https://www.mongodb.com/docs/upcoming/core/queryable-encryption/queryable-encryption/>`_ support is extended.
- Added support for Queryable Encryption Range Indexes.
- A `crypt_shared <https://www.mongodb.com/docs/manual/core/queryable-encryption/reference/shared-library/#download-the-automatic-encryption-shared-library>`_
- A `crypt_shared <https://www.mongodb.com/docs/manual/core/queryable-encryption/reference/shared-library/#download-the-automatic-encryption-shared-library>`_
library can be now used instead of ``mongocryptd``.
- Added support for AWS IAM Roles for service accounts, EKS in particular.
- AWS Credentials are now cached when possible.
- Added support for creating and managing `Atlas search indexes <https://www.mongodb.com/docs/atlas/atlas-search/>`_ via the
Ruby driver.

.. _release-notes-2.18:

Expand Down
1 change: 1 addition & 0 deletions gemfiles/standard.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ def standard_dependencies
group :testing do
gem 'timecop'
gem 'ice_nine'
gem 'async-io', '~> 1.36.0' # 1.37.0 introduced a regression that breaks on Ruby 2.5, 2.6
gem 'rubydns', platforms: :mri
gem 'rspec-retry'
gem 'rfc', '~> 0.2.0'
Expand Down
2 changes: 1 addition & 1 deletion lib/mongo/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ module Mongo
# The current version of the driver.
#
# @since 2.0.0
VERSION = '2.19.2'.freeze
VERSION = '2.19.3'.freeze
end
2 changes: 1 addition & 1 deletion release/mri/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ FROM debian:10
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
apt-get -y install git ruby-bundler make gcc ruby-dev
apt-get -y install zlib1g-dev git ruby-bundler make gcc ruby-dev

WORKDIR /app

Expand Down

0 comments on commit 5c64168

Please sign in to comment.