Módulo: Mongoid::SearchIndexable

Ampliado por:
ActiveSupport::Concern
Incluido en:
Compuesto
Definido en:
lib/mongoid/search_indexable.rb

Overview

Encapsula el comportamiento relacionado con la gestión de índices de búsqueda. Esta funcionalidad solo es compatible cuando se está conectado a un clúster de Atlas.

Definido bajo Namespace

Modules: ClassMethods clase: Estado

Resumen del método de instancia colapsar

Detalles del método de instancia

#auto_embed_search(índice: nil, path: nil, limit: 10, num_candidates: nil, filtro: nil, exact: false, model: nil, pipeline: []) ⇒ arreglo<Mongoid::Document>

Realiza una query de Atlas Vector Search para document con texto similar al campo de texto a almacenar de este document, utilizando auto-incrustación. El current document está excluido de los resultados.

Ejemplos:

Encuentra artículos con descripciones similares.

article.auto_embed_search(limit: 5, filter: { status: 'published' })

Parámetros:

  • index (String | Symbol | nil) (valor por defecto: nil)

    El nombre del índice de auto-incrustación a utilizar (opcional cuando solo uno está declarado en el model).

  • ruta (String | Symbol | nil) (valor por defecto: nil)

    La ruta de campo de texto indexado (opcional si no hay ambigüedad a partir de la definición del índice).

  • limit (Integer) (por defecto: 10)

    Número máximo de resultados (por defecto: 10).

  • num_candidates (Integer | nil) (valor por defecto: nil)

    Candidatos a búsqueda ANN; por defecto, se limita a * 10. Se ignora cuando exact: true.

  • filtro (Hash | nil) (valor por defecto: nil)

    Filtro opcional de MongoDB para el prefiltrado.

  • exacto (true | false) (por defecto: false)

    Use búsqueda del vecino más cercano exacta (por defecto: falso).

  • Modelo (String | nil) (valor por defecto: nil)

    Query-time embedding model override.

  • pipeline (arreglo) (valor por defecto: [])

    Etapas de agregación adicionales para agregar.

Devuelve:

  • (arreglo<Mongoid::Document>)

    coincidir con documentos, cada uno con un atributo vector_search_score completo.



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Archivo 'lib/mongoid/search_indexable.rb', línea 123

def auto_embed_search(index: nulo, ruta: nulo, limit: 10, num_candidates: nulo, filtro: nulo, exacta: false, model: nulo, pipeline: []) # rubocop:disable Metrics/ParameterLists
  _index, resolved_path = sí mismo.clase.enviar(:resolve_auto_embed_index, index, ruta)
  text = public_send(resolved_path)

  si text.nil?
    propagar ArgumentError,
          "#{resolved_path} es nulo en este document; no se puede realizar una búsqueda de inserción automática"
  end

  self_filter = { '_id' => { '$ne' => _id } }
  filtro_combinado = filtro ? { '$and' => [ self_filter, filtro ] } : self_filter

  sí mismo.clase.auto_embed_search(
    text,
    index: index,
    ruta: ruta,
    limit: limit,
    num_candidates: num_candidates,
    filtro: filtro_combinado,
    exacta: exacto,
    model: Modelo,
    pipeline: pipeline
  )
end

#vector_search(índice: nil, ruta: nil, límite: 10, num_candidates: nil, filtro: nil, pipeline: []) ⇒ Array<Mongoid::Document>

Realiza una búsqueda vectorial para documents similares a este, utilizando la incrustación almacenada de este document como el vector de query. El document en sí queda excluido de los resultados.

Ejemplos:

Encuentra artículos similares a este.

article.vector_search(limit: 5, filter: { status: 'published' })

Parámetros:

  • index (String | Symbol | nil) (valor por defecto: nil)

    El nombre del índice de búsqueda vectorial a utilizar (opcional si solo se declara uno en el model).

  • ruta (String | Symbol | nil) (valor por defecto: nil)

    El campo que contiene el vector almacenado (opcional si es inequívoco a partir de la definición del índice).

  • limit (Integer) (por defecto: 10)

    El número máximo de resultados (por defecto: 10).

  • num_candidates (Integer | nil) (valor por defecto: nil)

    El número de candidatos a considerar durante la búsqueda ANN; por defecto es límite * 10.

  • filtro (Hash | nil) (valor por defecto: nil)

    Un filtro opcional de MongoDB para prefiltrar candidatos antes de la puntuación.

  • pipeline (arreglo) (valor por defecto: [])

    Etapas adicionales de agregación para añadir después de la búsqueda vectorial y la proyección de puntuación.

Devuelve:

  • (arreglo<Mongoid::Document>)

    coincidir con documentos, cada uno con un atributo vector_search_score completo.



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Archivo 'lib/mongoid/search_indexable.rb', línea 79

def búsqueda vectorial(index: nulo, ruta: nulo, limit: 10, num_candidates: nulo, filtro: nulo, pipeline: [])
  _index, resolved_path = sí mismo.clase.enviar(resolver_indice_vectorial, index, ruta)
  vector de consulta = public_send(resolved_path)

  si vector de consulta.nil?
    propagar ArgumentError,
          "#{resolved_path} es nulo en este document; no se puede realizar la búsqueda vectorial"
  end

  self_filter = { '_id' => { '$ne' => _id } }
  filtro_combinado = filtro ? { '$and' => [ self_filter, filtro ] } : self_filter

  sí mismo.clase.búsqueda vectorial(
    vector de consulta,
    index: index,
    ruta: ruta,
    limit: limit,
    num_candidates: num_candidates,
    filtro: filtro_combinado,
    pipeline: pipeline
  )
end