セマンティック検索:ベクトル類似性によるクエリの投稿では、ベクトル類似性を使用したエンティティのクエリ方法を紹介しました。これは、正確な値ではなく意味に基づいて最も関連性の高いレコードを見つける強力な方法です。
4D 21 R2では、4D.Vectorフィールドを用いた検索結果の並べ替え機能が新たに追加されました。 類似性によるエンティティのフィルタリングに加え、query()関数を使用してクエリ結果をソートすることで 、 最も関連性が高く意味的に近いエンティティを最上位に表示できます 。インテリジェントな検索体験、レコメンデーションエンジン、AI駆動型アシスタントのいずれを構築する場合でも、この新機能により結果が関連性順に並べ替えられ、より正確でユーザーフレンドリーな結果を提供します。
類似度による結果の順序付け
4D開発者は、クエリ式内で直接ベクトル類似性に基づく結果のソートが可能になりました。この機能強化は4DコードとRESTリクエストの両方に適用され、意味的に近い順にエンティティを取得する操作を簡素化します。
ベクトルフィールドに対してクエリを実行し、その同じフィールドが順序付け句(ORDER BY句)に指定されている場合、4Dは自動的に結果を類似度(または距離)計算に基づいて並べ替えます。
var $result:=$clientAI.embeddings.create("A general manager living in France"; $model)
Var $inputEmbedding:=$result.vector
var $comparisonVector := {vector: $inputEmbedding; threshold: 0.4}
var $results := ds.MyTable.query("myVectorField >= :1 order by myVectorField"; $comparisonVector)
意味的ソートと従来型ソートの併用
4Dのアプローチの主な利点は、ベクトルベースの意味的順序付けを、同じクエリ内で従来のORDAフィルターと組み合わせられることです。
var $comparisonVector := {vector: $myVector; metric: mk cosine; threshold: 0.4}
var $results := ds.MyTable.query("myVectorField <= :1 AND salary>100000 order by myVectorField, salary desc"; $comparisonVector)
この例では、入力テキストに意味的に近い職務内容を持ち、かつ給与が100,000を超える従業員をクエリで取得し、ベクトル類似度と給与に基づいて順序付けします。
REST API の使用
この機能はREST APIからも利用可能です。簡単なクエリパラメータでベクトル類似度による結果のソートが可能です:
GET /rest/MyTable/?$filter="myVectorField>=:1 order by myVectorField"&$params=[{"vector":[1,2,3,...],"threshold":0.4}]
// OR
GET /rest/MyTable/?$filter="myVectorField>=:1"&$params=[{"vector":[1,2,3,...],"threshold":0.4}]&$orderby="Vector"
まとめ
この機能強化により、AIを活用したクエリがさらに実用的かつ直感的に利用可能になりました。以下のことが可能になります:
-
ベクトル類似度でデータをクエリする。
-
類似度で結果を並べ替え、最も関連性の高いエンティティを上位に表示
-
4DとRESTの両コンテキストで一貫して機能を利用可能。
これにより、意味検索、おすすめリスト、文脈に応じた検索など、最も類似した結果を最初に表示する機能を容易に構築できます。
