Módulo: Mongoid::SearchIndexable::ClassMethods
- Definido en:
- lib/mongoid/search_indexable.rb
Overview
Implementaciones para los métodos a nivel de clase de la funcionalidad.
Resumen del método de instancia colapsar
-
#auto_embed_search(text, índice: nil, path: nil, limit: 10, num_candidates: nil, filtro: nil, exact: false, model: nil, pipeline: []) ⇒ Arreglo<Mongoid::Document>
Realiza una query Atlas Vector Search utilizando auto-incrustación.
-
#create_search_indexes ⇒ arreglo<String>
Solicita la creación de todos los índices de búsqueda registrados.
-
#remove_search_index(name: nil, ID: nil) ⇒ objeto
Elimina el índice de búsqueda especificado por el nombre o id dado.
-
#remove_search_indexes ⇒ Objeto
Solicita la eliminación de todos los índices de búsqueda registrados.
-
#search_index(name_or_defn, defn = nil) ⇒ objeto
Agrega una definición de índice para las claves individuales o compuestas proporcionadas.
-
#search_indexes(options = {}) ⇒ Object
Un método conveniente para consultar los índices de búsqueda disponibles en la colección del model actual.
-
#vector_search(vector, index: nil, path: nil, limit: 10, num_candidates: nil, filter: nil, pipeline: []) ⇒ Array<Mongoid::Document>
Realiza una Atlas Vector Search query y devuelve los documents coincidentes.
-
#vector_search_index(name_or_defn, defn = nil) ⇒ Object
Agrega una definición de índice de búsqueda vectorial.
-
#wait_for_search_indexes(names, intervalo: 5) {|SearchIndexable::Status| ...} ⇒ Object
Espera a que se creen los índices de búsqueda nombrados.
Detalles del método de instancia
#auto_embed_search(texto, índice: nil, ruta: nil, límite: 10, num_candidatos: nil, filtro: nil, exacto: false, model: nil, pipeline: []) ⇒ arreglo<Mongoid::Document>
Realiza una consulta de Atlas Vector Search usando autoincrustación. Atlas genera el vector de query a partir del texto suministrado en el momento de la query; no se requiere una incrustación precomputada.
Cada document devuelto tiene un atributo vector_search_score poblado con su puntuación de relevancia. A diferencia de vector_search, el campo de texto indexado se retiene en los documentos devueltos.
352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 |
# Archivo 'lib/mongoid/search_indexable.rb', línea 352 def (text, index: nulo, ruta: nulo, limit: 10, num_candidates: nulo, filtro: nulo, exacta: false, model: nulo, pipeline: []) # rubocop:disable Metrics/ParameterLists resolved_index, resolved_path = (index, ruta) = { 'index' => resolved_index, 'ruta' => resolved_path, 'query' => { 'text' => text }, 'limit' => limit } ['numCandidates'] = num_candidates || (limit * 10) a menos que exacto ['exacto'] = true si exacto ['filtro'] = filtro si filtro ['model'] = Modelo si Modelo agg_pipeline = [ { '$vectorSearch' => }, { '$addFields' => { 'vector_search_score' => { '$meta' => 'vectorSearchScore' } } } ] agg_pipeline.concat(Arreglo(pipeline)) Colección.Agregar(agg_pipeline).map { |doc| instanciar(doc) } end |
#create_search_indexes ⇒ Arreglo<String>
Solicitar la creación de todos los índices de búsqueda registrados. Tenga en cuenta que los índices de búsqueda se crean de forma asíncrona y pueden tardar varios minutos en estar completamente disponibles.
155 156 157 158 159 |
# Archivo 'lib/mongoid/search_indexable.rb', línea 155 def create_search_indexes return si search_index_specs.¿vacío? Colección.search_indexes.create_many(search_index_specs) end |
#remove_search_index(nombre: nil, id: nil) ⇒ Object
Remueve el índice de búsqueda especificado por el nombre o ID dado. Se debe proporcionar un nombre O un ID, pero no ambos.
197 198 199 200 201 202 203 204 |
# Archivo 'lib/mongoid/search_indexable.rb', línea 197 def eliminar_índice_de_búsqueda(nombre: nulo, ID: nulo) logger.información( "MONGOID: Removing índice de búsqueda '#{name || id}}' " \ "on colección '#{collection.name}'." ) colección.search_indexes.drop_one(nombre: nombre, id: id) fin |
#remove_search_indexes ⇒ Object
Sería bueno si esto pudiera remover SOLO los índices de búsqueda
Solicite la eliminación de todos los índices de búsqueda registrados. Tenga en cuenta que los índices de búsqueda se borran de manera asincrónica y pueden tardar varios minutos en borrarse por completo.
que se han declarado en el model, pero como el model puede no dar nombre índice, no podemos garantizar que sepamos el nombre o ID de los índices correspondientes. No es irrazonable suponer, sin embargo, que la intención es que el model declare uno a uno todos los índices de búsqueda deseados, por lo que eliminar todos los índices de búsqueda debería ser suficiente. Si en su lugar es necesario eliminar un índice específico o un conjunto de índices, se recomienda usar search_indexes.each con remove_search_index.
218 219 220 221 222 |
# Archivo 'lib/mongoid/search_indexable.rb', línea 218 def remove_search_indexes search_indexes.cada hacer |especificación| eliminar_índice_de_búsqueda ID: especificación['id'] end end |
#search_index(name_or_defn, defn = nil) ⇒ objeto
Agrega una definición de índice para las claves individuales o compuestas proporcionadas.
237 238 239 240 241 242 243 |
# Archivo 'lib/mongoid/search_indexable.rb', línea 237 def search_index(name_or_defn, defn = nulo) Nombre = name_or_defn Nombre, defn = nulo, Nombre si Nombre.is_a?(encriptada) especificación = { definición: defn }.tocar { |s| s[nombre] = Nombre.to_s si Nombre } search_index_specs.push(especificación) end |
#search_indexes(options = {}) ⇒ objeto
Un método conveniente para consultar los índices de búsqueda disponibles en la colección del model actual.
188 189 190 |
# Archivo 'lib/mongoid/search_indexable.rb', línea 188 def search_indexes( = {}) Colección.search_indexes() end |
#vector_search(vector, index: nil, path: nil, limit: 10, num_candidates: nil, filter: nil, pipeline: []) ⇒ Array<Mongoid::Document>
Realiza una query de Atlas Vector Search y retorna documentos coincidentes. Cada document devuelto tiene un atributo vector_search_score complejo con su puntuación de relevancia.
El campo vectorial (dado por path:) se excluye de los documentos devueltos por defecto, ya que los vectores son grandes y rara vez útiles después de la recuperación.
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 |
# Archivo 'lib/mongoid/search_indexable.rb', línea 298 def búsqueda vectorial(vector, index: nulo, ruta: nulo, limit: 10, num_candidates: nulo, filtro: nulo, pipeline: []) # rubocop:disable Metrics/ParameterLists resolved_index, resolved_path = resolve_vector_index(index, ruta) num_candidates ||= limit * 10 = { 'index' => resolved_index, 'ruta' => resolved_path, 'queryVector' => vector, 'numCandidates' => num_candidates, 'limit' => limit } ['filtro'] = filtro si filtro agg_pipeline = [ { '$vectorSearch' => }, { '$addFields' => { 'vector_search_score' => { '$meta' => 'vectorSearchScore' } } }, { '$project' => { resolved_path => 0 } } ] agg_pipeline.concat(Arreglo(pipeline)) Colección.Agregar(agg_pipeline).map { |doc| instanciar(doc) } end |
#vector_search_index(nombre_o_definicion, definicion = nil) ⇒ Objeto
Agrega una definición de índice de búsqueda vectorial. También define un campo vector_search_score de solo lectura en el model la primera vez que se llama, el cual se rellena en los document devueltos por vector_search.
259 260 261 262 263 264 265 266 267 268 269 270 |
# Archivo 'lib/mongoid/search_indexable.rb', línea 259 def vector_search_index(name_or_defn, defn = nulo) Nombre = name_or_defn Nombre, defn = nulo, Nombre si Nombre.is_a?(encriptada) especificación = { tipo: 'vectorSearch', definición: defn }.tocar { |s| s[nombre] = Nombre.to_s si Nombre } search_index_specs.push(especificación) return si Campos.key?('vector_search_score') Campo :vector_search_score, tipo: Float attr_readonly :vector_search_score end |
#wait_for_search_indexes(names, interval: 5) {|SearchIndexable::Status| ... } ⇒ Object
Espera a que se creen los índices de búsqueda nombrados.
168 169 170 171 172 173 174 175 176 |
# Archivo 'lib/mongoid/search_indexable.rb', línea 168 def wait_for_search_indexes(nombres, interval: 5) bucle hacer Estado = Estado.Nuevo(get_indexes(nombres)) rendimiento Estado si ¿block_given? break si Estado.¿Listo? sueño interval end end |