Módulo: Mongoid::SearchIndexable::ClassMethods
- Definido em:
- lib/mongoid/search_indexable.rb
Visão geral
Implementações para os métodos de nível de classe do recurso.
Recolhimento do Resumo do método de instância
-
#auto_embed_search(text, index: nil, path: nil, limit: 10, num_candidates: nil, filter: nil, exact: false, model: nil, pipeline: []) ⇒ Array<Mongoid::Document>
Executa uma query do Atlas Vector Search usando auto-embedding.
-
#create_search_indexes ➤ Array<String>
Solicitar a criação de todos os índices de pesquisa registrados.
-
#remove_search_index(name: nil, ID: nil) ➤ Object
Remove o índice de pesquisa especificado pelo nome ou ID fornecido.
-
#remove_search_indexes ➤ Objeto
Solicite a remoção de todos os índices de pesquisa registrados.
-
#search_index(name_or_defn, defn = nil) ➤ Objeto
Adiciona uma definição de índice para as chaves únicas ou compostas fornecidas.
-
#search_indexes(opções = {}) ➤ Objeto
Um método de conveniência para consultar os índices de pesquisa disponíveis na coleção do model atual.
-
#vector_search(vetor, índice: nil, caminho: nil, limite: 10, num_candidates: nil, filtro: nil, pipeline: []) ➤ Array<Mongoid::Document>
Executa uma query no Atlas Vector Search e retorna documentos correspondentes.
-
#vector_search_index(name_or_defn, defn = nil) ⇒ Objeto
Adiciona uma definição de índice de pesquisa vetorial.
-
#wait_for_search_indexes(nomes, intervalo: 5) {|SearchIndexable::Status| ... } ➤ Objeto
Aguarde até que os índices de pesquisa nomeados sejam criados.
Detalhes do método de instância
#auto_incorporar_pesquisa(texto, índice: nulo, caminho: nulo, limite: 10, num_candidatos: nulo, filtro: nulo, exato: false, model: nulo, pipeline: []) ⇒ Array<Mongoid::Document>
Executa uma query do Atlas Vector Search usando a auto-embedding. O Atlas gera o vetor de query a partir do texto fornecido no momento da query; nenhum embedding pré-computado é necessário.
Cada document retornado tem um atributo vector_search_score preenchido com sua pontuação de relevância. Ao contrário de vector_search, o campo de texto indexado é mantido nos documentos retornados.
352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 |
# Arquivo 'lib/mongoid/search_indexable.rb', linha 352 def (text, Índice: nada, caminho: nada, limit: 10, num_candidates: nada, filtro: nada, exato: false, modelo: nada, pipeline: []) # rubocop:disable Metrics/ParameterLists modified_index, resolvido_path = (index, caminho) = { 'índice' => modified_index, 'caminho' => resolvido_path, 'query' => { 'text' => text }, 'limit' => limit } ['numCandidates'] = num_candidates || (limit * 10) a menos que exato ['exato'] = true se exato ['filter'] = filtro, filtro se filtro, filtro ['model'] = Modelo se Modelo agg_pipeline = [ { '$vectorSearch' => }, { '$addFields' => { 'vector_search_score' => { '$meta' => 'vectorSearchScore' } } } ] agg_pipeline.concat(Array(gasoduto)) collection.Agregação(agg_pipeline).map { |doc| instanciar(doc) } end |
#create_search_indexes ➤ Array<String>
Solicitar a criação de todos os índices de pesquisa registrados. Observe que os índices de pesquisa são criados de forma assíncrona e podem levar alguns minutos para ficarem totalmente disponíveis.
155 156 157 158 159 |
# Arquivo 'lib/mongoid/search_indexable.rb', linha 155 def create_search_indexes Método se search_index_specs.vazio? collection.search_indexes.create_many(search_index_specs) end |
#remove_search_index(name: nil, ID: nil) ➤ Object
Remove o índice de pesquisa especificado pelo nome ou ID fornecido. O nome OU ID deve ser fornecido, mas não ambos.
197 198 199 200 201 202 203 204 |
# Arquivo 'lib/mongoid/search_indexable.rb', linha 197 def remove_search_index(nome: nada, ID: nada) logger.informações( "MONGOID: Removendo o índice de pesquisa '#{nome || ID}' " \ "on collection '#{collection.name}'." ) coleção.search_indexes.drop_one(nome: nome, ID: ID) fim |
#remove_search_indexes ➤ Objeto
Seria bom se isso pudesse remover SOMENTE os índices de pesquisa
Solicite a remoção de todos os índices de pesquisa registrados. Observe que os índices de pesquisa são removidos de forma assíncrona e podem levar alguns minutos para serem totalmente excluídos.
que foram declarados no model, mas como o model pode não nomear o índice, não podemos garantir que saberemos o nome ou ID dos índices correspondentes. No entanto, não é irracional presumir que a intenção é que o model declare, individualmente, todos os índices de pesquisa desejados, portanto, a remoção de todos os índices de pesquisa deve ser suficiente. Se um índice ou conjunto de índices específico precisar ser removido, considere usar search_indexes.each com remove_search_index.
218 219 220 221 222 |
# Arquivo 'lib/mongoid/search_indexable.rb', linha 218 def remove_search_indexes search_indexes.cada fazer |especificações| remove_search_index ID: especificações['ID'] end end |
#search_index(name_or_defn, defn = nil) ➤ Objeto
Adiciona uma definição de índice para as chaves únicas ou compostas fornecidas.
237 238 239 240 241 242 243 |
# Arquivo 'lib/mongoid/search_indexable.rb', linha 237 def search_index(name_or_defn, defn = nada) name = name_or_defn name, defn = nada, name se name.is_a?(Hash) especificações = { definição: defn }.toque { |s| s[:name] = name.to_s se name } search_index_specs.push(especificações) end |
#search_indexes(opções = {}) ➤ Objeto
Um método de conveniência para consultar os índices de pesquisa disponíveis na coleção do model atual.
188 189 190 |
# Arquivo 'lib/mongoid/search_indexable.rb', linha 188 def search_indexes( = {}) collection.search_indexes() end |
#vector_search(vetor, índice: nil, caminho: nil, limite: 10, num_candidates: nil, filtro: nil, pipeline: []) ➤ Array<Mongoid::Document>
Executa uma query no Atlas Vector Search e retorna document correspondentes. Cada document retornado tem um atributo vector_search_score preenchido com sua pontuação de relevância.
O campo de vetor (dado por path:) é excluído dos documentos retornados por padrão, pois os vetores são grandes e raramente úteis após a recuperação.
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 |
# Arquivo 'lib/mongoid/search_indexable.rb', linha 298 def vector_search(vetor, Índice: nada, caminho: nada, limit: 10, num_candidates: nada, filtro: nada, pipeline: []) # rubocop:disable Metrics/ParameterLists modified_index, resolvido_path = resolve_vector_index(index, caminho) num_candidates ||= limit * 10 = { 'índice' => modified_index, 'caminho' => resolvido_path, 'queryVector' => vetor, 'numCandidates' => num_candidates, 'limit' => limit } ['filter'] = filtro, filtro se filtro, filtro agg_pipeline = [ { '$vectorSearch' => }, { '$addFields' => { 'vector_search_score' => { '$meta' => 'vectorSearchScore' } } }, { '$ projeto' => { resolvido_path => 0 } } ] agg_pipeline.concat(Array(gasoduto)) collection.Agregação(agg_pipeline).map { |doc| instanciar(doc) } end |
#vector_search_index(name_or_defn, defn = nil) ➤ Objeto
Adiciona uma definição de índice de pesquisa vetorial. Também define um campo vector_search_score somente leitura no modelo na primeira vez que ele é chamado, que é preenchido em documentos retornados por vector_search.
259 260 261 262 263 264 265 266 267 268 269 270 |
# Arquivo 'lib/mongoid/search_indexable.rb', linha 259 def vector_search_index(name_or_defn, defn = nada) name = name_or_defn name, defn = nada, name se name.is_a?(Hash) especificações = { tipo: 'vectorSearch', definição: defn }.toque { |s| s[:name] = name.to_s se name } search_index_specs.push(especificações) Método se Campos.chave?('vector_search_score') Campo :vector_search_score, tipo: Float attr_readonly :vector_search_score end |
#wait_for_search_indexes(nomes, intervalo: 5) {|SearchIndexable::Status| ... } ➤ Objeto
Aguarde até que os índices de pesquisa nomeados sejam criados.
168 169 170 171 172 173 174 175 176 |
# Arquivo 'lib/mongoid/search_indexable.rb', linha 168 def wait_for_search_indexes(nomes, interval: 5) loop fazer Status = Status.Novo(get_indexes(nomes)) rendimento Status se block_given? intervalo se Status.pronto? sono interval end end |