手動セグメントデータモデルと同期動作
手動セグメントでは、構成テーブルと検索操作に使用されるランタイムテーブルが自動的に同期される 2 つのテーブルのデータモデルが使用されます。
データモデルの概要
手動セグメントでは、構成とランタイムデータを分離する 2 つのテーブルアーキテクチャが使用されます。この設計により、ランタイムテーブルが検索パフォーマンスのために最適化されている間、構成テーブルが信頼できる唯一の情報源であり続けることが保証されます。
- 構成テーブル: sn_query_gen_segment_table_config
- ここで手動セグメントを定義します。各レコードは、アドミニストレーターが作成および管理する 1 つのセグメント構成を表します。
- 同期されたテーブル: sn_query_gen_segment
- このテーブルに直接書き込むことはありません。手動セグメント構成が作成または更新されると、ビジネスルールによってこのテーブルに自動的に同期され、検索時にクエリされます。
構成テーブルのフィールド
sn_query_gen_segment_table_構成テーブルには、手動セグメントを定義するための次のフィールドが含まれています。
| フィールド | 列名 | 最大長 | 必須 | 目的 |
|---|---|---|---|---|
| テーブル名 | table_name | — | はい | セグメントが適用されるテーブル (エンティティ)。セマンティックレイヤーにアクティブなエンティティが必要です。 |
| 名前 | name | 255 文字 | はい | LLM がセマンティック検索中に照合する分かりやすい名前。 |
| 説明 | description | 4,000 文字 | いいえ | 一般的に使用される用語を使用したオプションの説明。LLM がセグメントを適用するタイミングを理解するのに役立ちます。 |
| フィルター | filter | 4,000 文字 | はい | セグメントのフィルター条件を定義するエンコードクエリ。条件ビルダー (v2) を使用します。 |
| 有効 | active | — | いいえ | デフォルトは true です。false の場合、セグメントは非アクティブ化され、検索から除外されます。 |
同期されたテーブルフィールド
sn_query_gen_segmentテーブルには、検索操作に使用されるランタイムデータが含まれています。
| フィールド | ソース |
|---|---|
| name | 手動セグメント構成からコピーしました |
| description | 手動セグメント構成からコピーしました |
| filter | 手動セグメント構成からコピーしました |
| table | 開始:table_name |
| entity | sn_query_gen_entity への解決済み参照 |
| source_table | 常に sn_query_gen_segment_table_config |
| source_id | 手動セグメント構成レコードのSys_id |
| active | manual_segment.active AND entity.active |
同期動作
手動セグメントは、構成テーブルとランタイムテーブル間で自動的に同期されます。同期を手動でトリガーする必要はありません。
| トリガー | 時期 | 何が起こるか |
|---|---|---|
| 構成のビジネスルール | sn_query_gen_segment_table_configに挿入または更新 | 個々のレコードを sn_query_gen_segment に同期します (非同期) |
| エンティティの挿入/更新 | でエンティティが作成または更新された場合 active=true | そのエンティティのすべてのセグメント (手動を含む) を再同期します |
| 週次スケジュール済みジョブ | 土曜日の深夜 | 6 つのセグメント ソースすべてを完全同期します。孤立したレコードのクリーンアップ |
同期中、次の場合に手動セグメントが対象となります。
- active = true 構成レコードで
- 参照されるテーブルには、sn_query_gen_entity のアクティブなエンティティがあります
いずれかの条件が満たされない場合、同期されたセグメントは非アクティブ化されます (削除されません)。
アクティブ化と非アクティブ化
同期されたセグメントのアクティブステータスは、 manual_segment.active AND entity.active です。
| イベント | 結果 |
|---|---|
| 手動セグメント構成 active → false | 同期済みセグメントが非アクティブ化されました |
| 手動セグメント構成 active → true | 同期されたセグメントが再アクティブ化されました (エンティティもアクティブな場合) |
| エンティティ active → false | そのエンティティのすべてのセグメントが非アクティブ化されました |
| 手動セグメント構成が削除されました | 同期されたセグメントが削除されました |
| エンティティが削除されました | スケジュール済みジョブによってクリーンアップされた孤立セグメント |
非アクティブ化されたセグメントは検索結果から除外されます。
ACL 保護
同期されたセグメントテーブルには厳格な ACL があるため、構成テーブルは信頼できる唯一の情報源であり続けます。
- 作成: ブロック済み (admin_overrides = false):セグメントは同期を介してのみ作成できます
- nameへの書き込み:ブロック済み:構成レコードで変更する必要があります
- descriptionへの書き込み:ブロック済み:構成レコードで変更する必要があります
フィルター長に関する考慮事項
filterフィールドは最大 4,000 文字をサポートしますが、システムプロパティsn_query_gen.segments.max_filter_lengthのデフォルトは 2,000 です。このしきい値よりも長いフィルターは、LLM プロンプトに含まれている場合に切り捨てられます。
ドメインセパレーション
手動セグメントはドメインセパレーションをサポートします。特定の sys_domainでセグメント構成レコードを作成すると、同期されたセグメントはそのドメインを継承します。検索時に、セグメントはユーザーのドメインコンテキストによってフィルタリングされます。
インスタンスでドメインセパレーションが有効になっていない場合、このフィールドは非アクティブであり、無視できます。