モジュール: Mongoid::SearchIndexable::Classメソッドs
- 定義:
- lib/mongoid/search_indexable.rb
Overview
機能のクラスレベル メソッドの実装。
インスタンス メソッドの概要を折りたたむ
-
#auto_embed_search(テキスト、インデックス: nil、パス: nil、limit:10 、num_candidates: nil、フィルター: nil、exact: false、model: nil、パイプライン: [])⇒ 配列<Mongoid::Document>
自動埋め込みを使用して Atlas Vector Search クエリを実行します。
-
# create_search_indexs = 配列=string=======================<String>
登録されているすべての検索インデックスの作成を要求します。
-
delete_search_index (name: nil, ID : nil) = オブジェクト
指定された名前または ID で指定された検索インデックスを削除します。
-
#remove_search_indexs =オブジェクト
登録されているすべての検索インデックスの削除をリクエストします。
-
# search_index (name_or_defn、defn = nil) = オブジェクト
指定された単一キーまたは複合キーのインデックス定義を追加します。
-
検索_インデックスの数(オプション = {})= オブジェクト
現在のmodelのコレクションで使用可能な検索インデックスをクエリするための便利な方法です。
-
#vector_search(ベクトル, インデックス: nil, path: nil, limit: 10, num_candidates: nil, フィルター: nil, パイプライン: []) ⇒ 配列<Mongoid::Document>
Atlas Vector Search クエリを実行し、一致する document を返します。
-
#vector_search_index(name_or_defn、defn = nil) ⇒ オブジェクト
ベクトル検索インデックスの定義を追加します。
-
# wait_for_search_indexs (名前、間隔: 5 ){{|SearchIndexable::Status| ... } = オブジェクト
名前付き検索インデックスが作成されるのを待ちます。
インスタンス メソッドの詳細
# 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 に保持されます。
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行 デフォルト (text, index: nil, path: nil, limit: 10, num_ candidates: nil, フィルター: nil, 正確: false, モデル: nil, パイプライン: []) # rust メトリクス/パラメーターリストを無効化 解決_インデックス, associated_path = (index, path) = { 'index' => 解決_インデックス, ' path ' => associated_path, 'クエリ' => { 'text' => text }, 'limit' => limit } ['numCandidates'] = num_ candidates || (limit * 10) ただし、 正確な ['正確な'] = true 場合 正確な ['フィルター'] = フィルター 場合 フィルター ['model'] = モデル 場合 モデル agg_ pipeline = [ { '$vectorSearch' => }, { '$addFields' => { 'vector_search_score' => { '$meta' => 'vectorSearchScore' } } } ] agg_ pipeline.concat(配列(パイプライン)) コレクション.集計(agg_ pipeline).map { |doc| インスタンス化(doc) } end |
# create_search_indexs = 配列 =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 のいずれかを指定する必要がありますが、両方は指定しないでください。
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) =オブジェクト
指定された単一キーまたは複合キーのインデックス定義を追加します。
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のコレクションで使用可能な検索インデックスをクエリするための便利な方法です。
188 189 190 |
# ファイル 'lib/mongoid/search_indexable.rb' は、 188行 デフォルト search_indexes( = {}) コレクション.search_indexes() 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 からデフォルトで 除外されます 。これは、ベクトルが大きく、取得後にほとんど使用されないためです。
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 = { 'index' => 解決_インデックス, ' path ' => associated_path, 'queryVector' => ベクトル, 'numCandidates' => num_ candidates, 'limit' => limit } ['フィルター'] = フィルター 場合 フィルター agg_ pipeline = [ { '$vectorSearch' => }, { '$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に入力されます。
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| ... } =オブジェクト
名前付き検索インデックスが作成されるのを待ちます。
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 |