検索戦略は、フィールドのインデックス作成とクエリの方法を定義します。すべてのフィールドは、主にそのデータ型に基づいて、デフォルトの検索戦略に関連付けられています。
検索戦略は、データモデルアシスタントで指定されます。
フィールドを編集するとき、その検索戦略は [拡張機能] タブで設定できます。
データモデルレベルでは、左側のペインの [拡張機能] > [検索] エレメントでカスタム検索戦略を指定できます。
値のラベル付けは、未加工の値の代わりにユーザーフレンドリーなラベルを表示する EBX® のグローバル機能です。たとえば、ユーザーインターフェイスでは、外部キーフィールドにはリンクされたレコードのラベルが表示され、静的列挙に基づくフィールドにはデータモデルで指定された未加工の値に関連するローカライズされたラベルが表示されます。
フィールドで値のラベル付けがサポートされる場合、直感的なユーザーインターフェイスを維持するために、ユーザーインターフェイスでのクイック検索と並べ替えは通常、表示されたラベルに適用されます。
一部例外的に、未加工の値がクイック検索と並べ替え操作に使用される場合もあります。
プログラムラベルとプログラム列挙制約 (TableRefDisplay
を指定する外部キー、その表示がターゲットテーブルで指定された UILabelRenderer
に依存する外部キー、または ConstraintEnumeration
によって制約されるフィールド)。別の解決策 (表示パターンと外部キー) の使用をお勧めします。
別のノード (<osd:enumeration osd:path=...
) を使用して定義された列挙制約。別の解決策 (外部キー) の使用をお勧めします。
明らかに、フィールドが UIWidget
(または UIBean
) を介して表示される場合、直感的なユーザーインターフェイスを維持するために、カスタムコンポーネントではラベル (このフィールドで値のラベル付けが有効でない場合は値) の表示が期待されます。
次のフィールドは、検索やその他の演算子に対して最適化されていません。
ValueFunction API を実装する計算フィールド、またはコンテナテーブルのフィールドのみに依存しない計算ルールとスクリプト。
継承フィールド
結果として、これらは通常、osd:search('', 'pattern') による クイック検索 および テーブルの xpath 検索
から除外されます。
継承されたデータセット、履歴ビュー、またはマップされたテーブルの特定のケースでは、レガシー検索が使用されます。これは、テーブルのサイズをすぐに見積もることができず、UI に表示されない可能性があることを意味します。また、次のようなクイック検索も意味します。
すべての検索可能なフィールド (ローカル依存関係のない計算フィールドを含む) を考慮します。
「contains」のように動作します (Lucene 構文は使用できません)。
関連性による並べ替えをサポートしません。
大量のデータを含むテーブルではパフォーマンスが低下する可能性があります。
表示パターンを定義するノードの場合、デフォルトの検索テンプレートでは並べ替え不可能な検索戦略は禁止されています。ただし、他の検索テンプレートでは許可されています。
「テキスト」 | 「テキスト」検索戦略は、説明、テキスト、コメントなどの複数の単語を含める場合に使用します。この戦略は、全文検索とあいまい検索をサポートします。並べ替え、および「equals」や「starts-with」演算子などの一部の関数は無関係であり、サポートされません。この戦略は軽量で、ディスクスペースをほとんど消費しません。 クイック検索も参照してください。 |
「コード」 | 「コード」検索戦略は、コードと識別子を対象としています。値は単一のトークンと見なされ、大文字と小文字を区別するあらゆる種類のフィルターを使用できます。全文検索は無関係であり、デフォルトでは「contains」に置き換えられます。これは、カスタムの「コード」戦略を定義することにより、「starts-with」に変更できます。大規模の検索では、パフォーマンスの向上のため、「starts-with」の使用をお勧めします。 |
「名前」 | 「名前」検索戦略は、数語のみを含む名前やラベルを対象としています。「テキスト」と同じ検索機能に加えて、「名前」戦略では並べ替えも可能で、「コード」と同じフィルターをサポートします。この戦略は最も多くの機能を備えていますが、より多くのディスクスペースを消費します。フィールドで使用できる場合は、この戦略ではなく、「テキスト」、「コード」、または「検索から除外」の戦略を選択することをお勧めします。 |
高度な検索戦略は、別のファジーアルゴリズムを使用した検索をサポートすることを目的としており、並べ替えやフィルタリング操作はサポートしていません。カスタム検索テンプレートでそれらを使用し、デフォルトの検索テンプレートで基本的な戦略を使用することをお勧めします。
「レーベンシュタイン」 | 「レーベンシュタイン」戦略は、少数の単語を含む名前とラベルを対象としています。この戦略は、編集距離アルゴリズムに基づくあいまい検索のみをサポートします。検索構文 (+、-、...) はサポートされていません。この戦略は、大容量ではうまく機能しません。戦略のパラメーターにより、最大編集距離を 1 に設定し、不変のプレフィックスを使用することで、パフォーマンスを優先することができます。 |
「Soundex」 | 「Soundex」戦略は、少数の単語を含む名前とラベルを対象としています。この戦略は、Soundex 近似音声アルゴリズムに基づくあいまい検索のみをサポートします。このアルゴリズムは英語用で、数字を無視します。 |
「Double Metaphone」 | 「Double metaphone」戦略は、少数の単語を含む名前とラベルを対象としています。この戦略は、Double metaphone 近似音声アルゴリズムに基づくあいまい検索のみをサポートします。このアルゴリズムは、Soundex よりも最新であり、特に英語以外の言語でより良い結果が得られます。数字は無視されます。 |
「NGram 戦略」 | 「NGram」戦略は、少数の単語を含む名前とラベルを対象としています。この戦略は、距離アルゴリズムに基づくあいまい検索のみをサポートします。このアルゴリズムは、値を「グラム」と呼ばれる小さなシーケンスに分割します。「レーベンシュタイン」検索戦略よりも優れたパフォーマンスを発揮しますが、より多くのディスクスペースを消費します。 |
「名前」戦略は、以下を除いて、デフォルトで文字列フィールドに適用されます。
フィールドが主キーの一部である場合、デフォルトで「コード」に設定されます。
フィールドが外部キーの場合、「コード」に強制され、変更できません。
フィールドに xs:string
を拡張するビルトインのデータ型が含まれる場合、このデータ型に関連する戦略 (例、osd:text
、xs:Name
、osd:email
、osd:html
) が使用できます。
デフォルトの「名前」戦略が無関係であり、より多くのディスクスペースを消費する可能性があるため、データモデルのコンパイルでは、戦略が意図的に定義されていることを確認するために、「名前」戦略がデフォルトとして設定されているフィールドで警告が報告されます。概算で、期待される値の長さが 80 バイトを超える場合は、「テキスト」戦略を選択することをお勧めします。長い値 (UTF-8 エンコードでは 32766 バイト超) は、「名前」または「コード」戦略で完全にインデックス付けできません。クイック検索は影響を受けませんが、並べ替えでは最初の 1000 バイトのみが考慮され、一部の演算子 (「equals」および「ends-with」、SQLDISTINCT および COUNTDISTINCT、...) は正しい結果を返しません。
一部の戦略は、たとえばストップワードや特定の言語を定義するためのパラメーターを受け入れます。これは、「検索」データモデル拡張機能の「検索戦略」テーブルにレコードを作成することによって行われます。新しいパラメーター化された戦略は、互換性のあるフィールドの [拡張機能] タブで選択できるようになります。
「検索」データ モデル拡張機能でストップワードと同義語のリストを定義できます。「ストップワードリスト」または「同義語リスト」テーブルに新しいレコードを作成し、「カスタム検索戦略」テーブルの [パラメーター] タブで作成したリストを選択します。
主キーフィールドには、デフォルトの検索テンプレートで定義された並べ替え可能な検索戦略が必要です。これには、すべてのデータ型の「Void」戦略と文字列の「テキスト」戦略は含まれません。デフォルトの検索テンプレート以外の検索テンプレート内で定義されている場合は、主キーフィールドに並べ替え不可能な検索戦略を使用できることに注意してください。
外部キーフィールドには、次の 2 つのレベルの検索があります。
最初に、該当する場合、外部キーの表示ラベルの各フィールドに対して検索が実行されます。各フィールド戦略は、ターゲットテーブルのフィールドから継承されます。この最初のレベルは、検索文字列をターゲットフィールドのデータ型に変換できない場合など、常に適用できるとは限りません。
次に、検索の第 1 レベルを適用できない場合、検索は対象の主キーの文字列表現に対して実行されます。データモデルアシスタントの [拡張機能] タブで外部キーフィールドの検索戦略を変更すると、この第 2 レベルの検索にのみ影響します。「コード」検索戦略 (ビルトインまたはカスタム) のみにすることができます。
関連付けの場合、検索は関連付けレコードのラベルで使用される各フィールドに対して実行されます (各フィールド戦略はターゲットテーブルのフィールドから継承されます)。適用するには、ターゲットフィールドが検索用に最適化されており、検索基準がその型に変換可能である必要があります。
関連付けの検索はラベルの最適化されたフィールドにのみ適用できるため、継承されたデータセットでは機能しません (制限事項で説明されているように、最適化された検索はサポートされていません)。
「検索から除外」 (または Void
) 戦略は、インデックス付けを無効にし、フィルターの作成、検索、または並べ替えを不可能にします。すべてのデータ型で使用でき、クエリされないフィールドを対象としています。値には、レコードからアクセスできます。インデックス付けを無効にすると、消費されるディスクスペースが減り、データインポートなどの一部の処理が高速化されます。
プロパティ osd:defaultView/hiddenInQuickSearch="true|false"
を使用して、クイック検索ツールからフィールドを除外することもできます。
詳細については、デフォルトビューを参照してください。
検索テンプレートを使用して、検索戦略をフィールドに関連付けることができます。これは、データモデルアシスタントで、フィールドの [拡張機能] タブで実行されます。フィールドに複数の検索戦略を割り当てるには、追加の検索テンプレートをモジュールに登録する必要があります。追加の検索テンプレートに関係するのは、アドオンの EBX® Information Search とEBX® Match and merge のみです。