Module: Mongoid::SearchIndexable::ClassMethods

Defined in:
lib/mongoid/search_indexable.rb

Overview

Implementations for the feature’s class-level methods.

Instance Method Summary collapse

Instance Method Details

#create_search_indexesArray<String>

Request the creation of all registered search indices. Note that the search indexes are created asynchronously, and may take several minutes to be fully available.

Returns:

  • (Array<String>)

    The names of the search indexes.



65
66
67
68
69
# File 'lib/mongoid/search_indexable.rb', line 65

def create_search_indexes
  return if search_index_specs.empty?

  collection.search_indexes.create_many(search_index_specs)
end

#remove_search_index(name: nil, id: nil) ⇒ Object

Removes the search index specified by the given name or id. Either name OR id must be given, but not both.

Parameters:

  • name (String | nil) (defaults to: nil)

    the name of the index to remove

  • id (String | nil) (defaults to: nil)

    the id of the index to remove



107
108
109
110
111
112
113
114
# File 'lib/mongoid/search_indexable.rb', line 107

def remove_search_index(name: nil, id: nil)
  logger.info(
    "MONGOID: Removing search index '#{name || id}' " \
    "on collection '#{collection.name}'."
  )

  collection.search_indexes.drop_one(name: name, id: id)
end

#remove_search_indexesObject

Note:

It would be nice if this could remove ONLY the search indexes

Request the removal of all registered search indexes. Note that the search indexes are removed asynchronously, and may take several minutes to be fully deleted.

that have been declared on the model, but because the model may not name the index, we can’t guarantee that we’ll know the name or id of the corresponding indexes. It is not unreasonable to assume, though, that the intention is for the model to declare, one-to-one, all desired search indexes, so removing all search indexes ought to suffice. If a specific index or set of indexes needs to be removed instead, consider using search_indexes.each with remove_search_index.



128
129
130
131
132
# File 'lib/mongoid/search_indexable.rb', line 128

def remove_search_indexes
  search_indexes.each do |spec|
    remove_search_index id: spec['id']
  end
end

#search_index(name_or_defn, defn = nil) ⇒ Object

Adds an index definition for the provided single or compound keys.

Examples:

Create a basic index.

class Person
  include Mongoid::Document
  field :name, type: String
  search_index({ ... })
  search_index :name_of_index, { ... }
end

Parameters:

  • name_or_defn (Symbol | String | Hash)

    Either the name of the index to define, or the index definition.

  • defn (Hash) (defaults to: nil)

    The search index definition.



147
148
149
150
151
152
153
# File 'lib/mongoid/search_indexable.rb', line 147

def search_index(name_or_defn, defn = nil)
  name = name_or_defn
  name, defn = nil, name if name.is_a?(Hash)

  spec = { definition: defn }.tap { |s| s[:name] = name.to_s if name }
  search_index_specs.push(spec)
end

#search_indexes(options = {}) ⇒ Object

A convenience method for querying the search indexes available on the current model’s collection.

Parameters:

  • options (Hash) (defaults to: {})

    the options to pass through to the search index query.

Options Hash (options):

  • :id (String)

    The id of the specific index to query (optional)

  • :name (String)

    The name of the specific index to query (optional)

  • :aggregate (Hash)

    The options hash to pass to the aggregate command (optional)



98
99
100
# File 'lib/mongoid/search_indexable.rb', line 98

def search_indexes(options = {})
  collection.search_indexes(options)
end

#wait_for_search_indexes(names, interval: 5) {|SearchIndexable::Status| ... } ⇒ Object

Waits for the named search indexes to be created.

Parameters:

  • names (Array<String>)

    the list of index names to wait for

  • interval (Integer) (defaults to: 5)

    the number of seconds to wait before polling again (only used when a progress callback is given).

Yields:



78
79
80
81
82
83
84
85
86
# File 'lib/mongoid/search_indexable.rb', line 78

def wait_for_search_indexes(names, interval: 5)
  loop do
    status = Status.new(get_indexes(names))
    yield status if block_given?
    break if status.ready?

    sleep interval
  end
end