モジュール: Mongoid::SearchIndexable::Classメソッドs

定義:
lib/mongoid/search_indexable.rb

Overview

機能のクラスレベル メソッドの実装。

インスタンス メソッドの概要を折りたたむ

インスタンス メソッドの詳細

# auto_ embedded_search (テキスト、インデックス: nil、パス: nil、limit: 10、num_canidates: nil、フィルター: nil、true: false、モデル: nil、パイプライン: []) ⇒ 配列<ドキュメント>

自動埋め込みを使用して Atlas Vector Search クエリを実行します。Atlas はクエリ時に指定されたテキストからクエリベクトルを生成します。事前計算された埋め込みは必要ありません。

返された各documentには、関連性スコアが入力された vector_search_score 属性があります。vector_search とは異なり、インデックス テキスト フィールドは返された document に保持されます。

例:

テキストで検索します。

Article.auto_embed_search('machine learning', limit: 5)

厳密最近傍探索(numConditions はありません)。

Article.auto_embed_search('deep learning', exact: true, limit: 5)

パラメーター:

  • text ( string )

    クエリテキスト。

  • index String | Symbol | nil (デフォルトはnil

    使用する自動埋め込みインデックスの名前(modelで 1 つのみが宣言されている場合は任意)

  • path String | Symbol | nil (デフォルトはnil

    インデックス付きテキストフィールドパス(インデックス定義から明確でない場合は任意)。

  • limit 整数 (デフォルトは10です)

    結果の最大数(デフォルト: 10)。

  • num_ candidates (Integer | nil) (デフォルトはnil

    近似最近傍探索検索の候補。デフォルトは * 10 を制限します。strict が true の場合は無視されます。

  • フィルター ハッシュ | nil (デフォルトはnil

    事前フィルタリング用の任意のMongoDBフィルター。

  • 正確な true | false (デフォルトはfalse

    近似最近傍探索 検索ではなく、厳密最近傍探索(厳密最近傍探索)検索を使用します(デフォルト: false)。true の場合、numConditions は省略されます。

  • モデル string | nil (デフォルトはnil

    クエリ時間埋め込みモデルの上書き。

  • パイプライン 配列 (デフォルトは[]

    ベクトル検索と スコアプロジェクションの後に追加された追加の集計ステージ。

次の値を返します。

  • 配列未満Mongoid >

    matching document、それぞれに vector_search_score 属性が入力されています。



352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
# ファイル 'lib/mongoid/search_indexable.rb' は、 352行

デフォルト auto_ embedded_search(text, index: nil, path: nil, limit: 10, num_ candidates: nil, フィルター: nil, 正確: false, モデル: nil, パイプライン: []) # rust メトリクス/パラメーターリストを無効化
  解決_インデックス, associated_path = resolve_auto_embed_index(index, path)

  vs_options = {
    'index' => 解決_インデックス,
    ' path ' => associated_path,
    'クエリ' => { 'text' => text },
    'limit' => limit
  }
  vs_options['numCandidates'] = num_ candidates || (limit * 10) ただし、 正確な
  vs_options['正確な'] = true 場合 正確な
  vs_options['フィルター'] = フィルター 場合 フィルター
  vs_options['model'] = モデル 場合 モデル

  agg_ pipeline = [
    { '$vectorSearch' => vs_options },
    { '$addFields'    => { 'vector_search_score' => { '$meta' => 'vectorSearchScore' } } }
  ]
  agg_ pipeline.concat(配列(パイプライン))

  コレクション.集計(agg_ pipeline).map { |doc| インスタンス化(doc) }
end

# create_search_indexs = 配列 =string=======================<String>

登録されているすべての検索インデックスの作成を要求します。 検索インデックスは非同期で作成され、完全に使用できるようになるまでに数分かかる場合があることに注意してください。

次の値を返します。

  • <String>配列未満

    検索インデックスの名前。



155
156
157
158
159
# ファイル 'lib/mongoid/search_indexable.rb' は、 155行

デフォルト create_search_indexes
  return 場合 search_index_specs.空の場合

  コレクション.search_indexes.create_many(search_index_specs)
end

delete_search_index (name: nil, ID : nil) =オブジェクト

指定された名前または ID で指定された検索インデックスを削除します。 または ID のいずれかを指定する必要がありますが、両方は指定しないでください。

パラメーター:

  • name string | nil (デフォルトはnil

    削除するインデックスの名前

  • id string | nil (デフォルトはnil

    削除するインデックスの ID



197
198
199
200
201
202
203
204
# ファイル 'lib/mongoid/search_indexable.rb' は、 197行

デフォルト delete_search_index(name: nil, ID : nil)
  logger.info(
    " MONGOID: 検索インデックス を削除します " #{ name || ID }  " \ " により 、 コレクション の コレクション は になり ます 。コレクション search_indexs  drop_one ( name: name , ID : ID  end

#remove_search_indexs =オブジェクト

注:

これにより、検索インデックスのみが削除できたら便利ですが、

登録されているすべての検索インデックスの削除をリクエストします。 検索インデックスは非同期に削除され、完全に削除されるまでに数分かかる場合があることに注意してください。

は、modelで宣言されていますが、modelがインデックスに名前を付けない可能性があるため、対応するインデックスの名前やIDがわかっていることを保証することはできません。ただし、modelが 1 対 1 で、必要なすべての検索インデックスを宣言するためのものであると想定するのは不可能ではありません。そのため、すべての検索インデックスを削除するだけで十分です。代わりに特定のインデックスまたはインデックスのセットを削除する必要がある場合は、search_indexs.each と delete_search_index の使用を検討してください。



218
219
220
221
222
# ファイル 'lib/mongoid/search_indexable.rb' は、 218行

デフォルト delete_search_indexs
  search_indexes. 行う |スペック|
    delete_search_index ID : スペック['id']
  end
end

# search_index (name_or_defn、defn = nil) =オブジェクト

指定された単一キーまたは複合キーのインデックス定義を追加します。

例:

基本インデックスを作成します。

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

パラメーター:

  • name_or_defn シンボル | string | ハッシュ)_

    定義するインデックスの名前、またはインデックス定義。

  • 定義 ハッシュ (デフォルトはnil

    検索インデックスの定義。



237
238
239
240
241
242
243
# ファイル 'lib/mongoid/search_indexable.rb' は、 237行

デフォルト search_index(name_or_defn, 定義 = nil)
  name = name_or_defn
  name, 定義 = nil, name 場合 name.is_a?(ハッシュ)

  スペック = { 定義: 定義 }.タップ { |s| s[:name] = name.to_s 場合 name }
  search_index_specs.プッシュ(スペック)
end

検索_インデックスの数(オプション = {})=オブジェクト

現在のmodelのコレクションで使用可能な検索インデックスをクエリするための便利な方法です。

パラメーター:

  • options ハッシュ (デフォルトは{}です)

    検索インデックスクエリに渡すオプション。

オプション ハッシュ( options ):

  • :id string

    クエリする特定のインデックスの ID(任意)

  • :name string

    クエリする特定のインデックスの名前(任意)

  • :aggregate ハッシュ

    集計コマンドに渡すハッシュするオプション(任意)



188
189
190
# ファイル 'lib/mongoid/search_indexable.rb' は、 188行

デフォルト search_indexes(options = {})
  コレクション.search_indexes(options)
end

# vector_search(ベクトル,インデックス: nil, path: nil, limit:,10 num_canidds: nil, フィルター: nil、パイプライン: [])= Array==Mongoid::Document=============================================

Atlas Vector Searchクエリを実行し、一致するdocumentを返します。返された各 document には、関連性スコアが入力された vector_search_score 属性があります。

ベクトルフィールド(path: によって指定)は、返される document からデフォルトで 除外されます 。これは、ベクトルが大きく、取得後にほとんど使用されないためです。

例:

明示的なクエリベクトルによって検索します。

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

パラメーター:

  • ベクトル <Numeric>配列未満

    クエリベクトル。

  • index String | Symbol | nil (デフォルトはnil

    使用するベクトル検索インデックスの名前(modelで 1 つのみが宣言されている場合は任意)

  • path String | Symbol | nil (デフォルトはnil

    保存されたベクトルを含むフィールド(インデックス定義から明確でない場合は任意)。

  • limit 整数 (デフォルトは10です)

    結果の最大数(デフォルト: 10)。

  • num_ candidates (Integer | nil) (デフォルトはnil

    近似最近傍探索検索中に考慮する候補の数。のデフォルトは * 10 を制限します。

  • フィルター ハッシュ | nil (デフォルトはnil

    スコアリング前に候補を事前にフィルタリングする任意のMongoDBフィルター。

  • パイプライン 配列 (デフォルトは[]

    ベクトル検索と スコアプロジェクションの後に追加する追加の集計ステージ 。

次の値を返します。

  • 配列未満Mongoid >

    matching document、それぞれに vector_search_score 属性が入力されています。



298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
# ファイル 'lib/mongoid/search_indexable.rb' は、 298行

デフォルト vector_search(ベクトル, index: nil, path: nil, limit: 10, num_ candidates: nil, フィルター: nil, パイプライン: []) # rust メトリクス/パラメーターリストを無効化
  解決_インデックス, associated_path = restrict_vector_index(index, path)
  num_ candidates ||= limit * 10

  vs_options = {
    'index' => 解決_インデックス,
    ' path ' => associated_path,
    'queryVector' => ベクトル,
    'numCandidates' => num_ candidates,
    'limit' => limit
  }
  vs_options['フィルター'] = フィルター 場合 フィルター

  agg_ pipeline = [
    { '$vectorSearch' => vs_options },
    { '$addFields'    => { 'vector_search_score' => { '$meta' => 'vectorSearchScore' } } },
    { '$ プロジェクト'      => { associated_path => 0 } }
  ]
  agg_ pipeline.concat(配列(パイプライン))

  コレクション.集計(agg_ pipeline).map { |doc| インスタンス化(doc) }
end

#vector_search_index(name_or_defn、defn = nil)⇒ オブジェクト

ベクトル検索インデックスの定義を追加します。また、最初に呼び出されたときにmodel上の読み取り専用の vector_search_scoreフィールドも定義します。このフィールドは vector_search によって返されたdocumentに入力されます。

例:

ベクトル検索 インデックスを作成します。

class Person
  include Mongoid::Document
  vector_search_index({ fields: [...] })
  vector_search_index :my_vector_index, { fields: [...] }
end

パラメーター:

  • name_or_defn シンボル | string | ハッシュ)_

    定義するインデックスの名前、またはインデックス定義。

  • 定義 ハッシュ (デフォルトはnil

    ベクトル検索インデックスの定義。



259
260
261
262
263
264
265
266
267
268
269
270
# ファイル 'lib/mongoid/search_indexable.rb' は、 259行

デフォルト vector_search_index(name_or_defn, 定義 = nil)
  name = name_or_defn
  name, 定義 = nil, name 場合 name.is_a?(ハッシュ)

  スペック = { type: 'vectorSearch', 定義: 定義 }.タップ { |s| s[:name] = name.to_s 場合 name }
  search_index_specs.プッシュ(スペック)

  return 場合 フィールド.key?('vector_search_score')

  フィールド :vector_search_score, type: Float
  attr_readonly :vector_search_score
end

# wait_for_search_indexs (名前、間隔: 5 ){{|SearchIndexable::Status| ... } =オブジェクト

名前付き検索インデックスが作成されるのを待ちます。

パラメーター:

  • name <String>配列未満

    を待機するインデックス名のリスト

  • interval 整数 (デフォルトは5です)

    再度ポーリングするまでに待機する秒数(進行状況コールバックが指定された場合にのみ使用されます)。

結果:



168
169
170
171
172
173
174
175
176
# ファイル 'lib/mongoid/search_indexable.rb' は、 168行

デフォルト wait_for_search_indexs(name, interval: 5)
  ループ 行う
    状態 = ステータス.新着情報(get_indexes(name))
    ノードの数 状態 場合 ブロック_指定
    break 場合 状態.準備はできていますか?

    休止 interval
  end
end