mongodb/mongo-ruby-driver

View on GitHub
docs/reference/text-search.txt

Summary

Maintainability
Test Coverage
***********
Text Search
***********

.. default-domain:: mongodb

.. contents:: On this page
   :local:
   :backlinks: none
   :depth: 1
   :class: singlecol
   
MongoDB provides :manual:`text indexes </core/index-text/>`
to support text search queries on string content. Text indexes
can include any field whose value is a string or an array of
string elements.

.. note::

  MongoDB Atlas also provides
  `Atlas Search <https://docs.atlas.mongodb.com/atlas-search/>`_
  which is a more powerful and flexible text search solution.
  The rest of this page discusses text indexes and not Atlas Search.

To perform a text search with the Ruby driver, first create a text
index with ``indexes.create_one()``. The following command creates a
text index on the ``name`` field of the ``restaurants`` collection in
the ``test`` database.

.. code-block:: ruby

  client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
  client['restaurants'].indexes.create_one( { :name => 'text' } )

Once the text index is created you can use it as part of a query. The
following code finds all documents in the ``restaurants`` collection
which contain the word ``garden``, without case sensitivity.

.. code-block:: ruby

  client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
  client[:restaurants].find( 
      { '$text' => 
        { '$search' => 'garden', '$caseSensitive' => false }
      }
    ).each do |document|
    
      #=> Yields a BSON::Document.

  end