Módulo: Mongoid::SearchIndexable

Estendido por:
ActiveSupport::Concern
Incluído em:
Componível
Definido em:
lib/mongoid/search_indexable.rb

Visão geral

Encapsula o comportamento em torno do gerenciamento de índices de pesquisa. Este recurso só é suportado quando conectado a um cluster Atlas .

Definido sob namespace

Módulos: Métodos de classe Classes: Status

Recolhimento do Resumo do método de instância

Detalhes do método de instância

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

Executa uma query do Atlas Vector Search para documentos com texto semelhante ao campo de texto armazenado deste documento, usando auto-embedding. O document atual é excluído dos resultados.

Exemplos:

Encontre artigos com descrições semelhantes.

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

Parâmetros:

  • index (String | Símbolo | nil) (padrão para: nil)

    O nome do índice de incorporação automática a ser usado (opcional quando apenas um é declarado no model).

  • caminho (String | Símbolo | nil) (padrão para: nil)

    O caminho do campo de texto indexado (opcional se não for ambíguo na definição do índice).

  • limit (Inteiro) (padrão para: 10)

    Número máximo de resultados (padrão: 10).

  • num_candidates (Inteiro | nulo) (padrão para: nil)

    Candidatos para pesquisa de ANN; o padrão é limitar * 10. Ignorado quando exato: verdadeiro.

  • filtro, filtro (Hash | nulo) (padrão para: nil)

    Filtro MongoDB opcional para pré-filtragem.

  • exato (verdadeiro | falso) (padrão para: false)

    Use a pesquisa exata do vizinho mais próximo (padrão: false).

  • Modelo (string | nil) (padrão para: nil)

    Substituição do embedding model em tempo de query.

  • gasoduto (Array) (padrão para: [])

    Estágios de agregação adicionais a serem anexados.

Retorna:

  • (Array <Mongoid::Document>)

    documentos correspondentes, cada um com um atributo vector_search_score preenchido.



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

def auto_embed_search(Índice: nada, caminho: nada, limit: 10, num_candidates: nada, filtro: nada, exato: false, modelo: nada, pipeline: []) # rubocop:disable Metrics/ParameterLists
  _index, resolvido_path = auto.classe.enviar(:resolve_auto_embed_index, index, caminho)
  text = public_send(resolvido_path)

  se text.nada?
    aumentar ArgumentError,
          "#{Resolveu_path} é nulo neste document; não é possível executar a pesquisa de incorporação automática"
  end

  self_filter = { '_id' => { '$ne' => _id } }
  filtro_combinação = filtro, filtro ? { '$e' => [ self_filter, filtro, filtro ] } : self_filter

  auto.classe.auto_embed_search(
    text,
    Índice: index,
    caminho: caminho,
    limit: limit,
    num_candidates: num_candidates,
    filtro: filtro_combinação,
    exato: exato,
    modelo: Modelo,
    pipeline: gasoduto
  )
end

#vector_search(índice: nil, caminho: nil, limite: 10, num_candidates: nil, filtro: nil, pipeline: []) ➤ array<Mongoid::Document>

Executa uma pesquisa vetorial para document semelhante a este, usando a embedding armazenada deste document como vetor de query. O document em si é excluído dos resultados.

Exemplos:

Encontre artigos semelhantes a este.

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

Parâmetros:

  • index (String | Símbolo | nil) (padrão para: nil)

    O nome do índice de pesquisa vetorial a ser usado (opcional se apenas um for declarado no model).

  • caminho (String | Símbolo | nil) (padrão para: nil)

    O campo contendo o vetor armazenado (opcional se não houver ambiguidade na definição do índice).

  • limit (Inteiro) (padrão para: 10)

    O número máximo de resultados (padrão: 10).

  • num_candidates (Inteiro | nulo) (padrão para: nil)

    O número de candidatos a considerar durante a pesquisa de ANN; o padrão é limitar * 10.

  • filtro, filtro (Hash | nulo) (padrão para: nil)

    Um filtro opcional do MongoDB para pré-filtrar os candidatos antes de pontuar.

  • gasoduto (Array) (padrão para: [])

    Estágios de agregação adicionais a serem anexados após a pesquisa vetorial e a projeção da pontuação .

Retorna:

  • (Array <Mongoid::Document>)

    documentos correspondentes, cada um com um atributo vector_search_score preenchido.



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

def vector_search(Índice: nada, caminho: nada, limit: 10, num_candidates: nada, filtro: nada, pipeline: [])
  _index, resolvido_path = auto.classe.enviar(:resolve_vector_index, index, caminho)
  query_vector = public_send(resolvido_path)

  se query_vector.nada?
    aumentar ArgumentError,
          "#{returned_path} é nulo neste document; não é possível executar a pesquisa vetorial"
  end

  self_filter = { '_id' => { '$ne' => _id } }
  filtro_combinação = filtro, filtro ? { '$e' => [ self_filter, filtro, filtro ] } : self_filter

  auto.classe.vector_search(
    query_vector,
    Índice: index,
    caminho: caminho,
    limit: limit,
    num_candidates: num_candidates,
    filtro: filtro_combinação,
    pipeline: gasoduto
  )
end