オントロジーの構築Object Explorerオブジェクトの検索テキスト検索の理解

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

テキスト検索を理解する

Object Explorer、Workshop、Functions API を含む Foundry プラットフォーム全体のテキスト検索は、アナライザーと呼ばれる仕組みでテキストを処理する基盤の検索エンジンを利用しています。アナライザーの仕組みを理解すると、より効果的な検索クエリを記述し、アプリケーションでより優れた検索体験を構築できます。

テキスト分析の仕組み

文字列プロパティが検索用にインデックス化されると、プラットフォームはアナライザーを通じてその値を処理します。デフォルトのアナライザーである標準アナライザー(Lucene StandardAnalyzer ↗ を参照)は、次の手順を実行します。

  1. 空白と句読点を境界として、テキストをトークンと呼ばれる個々の単語に分割します。
  2. すべてのトークンを小文字に変換します。

たとえば、プロパティ値 The Quick Brown Fox は、トークン the、quick、brown、fox として保存されます。quick を検索すると、検索エンジンはこのトークンを保存済みのトークンと照合し、一致を検出します。

このトークンベースの方式には、次の重要な特徴があります。

  • インデックス化の際にすべてのトークンが小文字に変換されるため、デフォルトでは検索時に大文字と小文字を区別しません。
  • フレーズではないクエリでは、トークンを個別に照合します。たとえば、brown fox の検索では brown と fox のトークンを別々に評価するため、順序や近接性に関係なく、両方のトークンを含むすべてのプロパティが一致します。トークンが順番どおりに連続して出現することを条件にするには、フレーズ検索("brown fox")を使用します。
  • rown は完全なトークンではないため、rown の検索は brown に一致しません。

アナライザーの種類

文字列プロパティで使用するアナライザーは、オントロジーで設定します。次の種類のアナライザーが利用可能です。

アナライザー動作値の例生成されるトークン
標準(デフォルト)空白と句読点で分割し、小文字に変換しますThe Quick-Brown Foxthe, quick, brown, fox
シンプル文字以外のすべての文字で分割し、小文字に変換します(数字と句読点は削除されます)The Quick-Brown Fox 42the, quick, brown, fox
分析なし値全体を1個のトークンとして保存しますThe Quick-Brown FoxThe Quick-Brown Fox
空白空白のみで分割し、大文字と小文字を保持しますThe Quick-Brown FoxThe, Quick-Brown, Fox
言語言語固有のトークン化、ステミング、ストップワードの除去を適用しますRunning quickly(英語)run, quick

言語アナライザーは、次の言語をサポートしています:english、french、german、japanese、korean、arabic、combined_arabic_english。

プロパティのアナライザーは、Ontology Manager のプロパティの検索設定で確認または変更できます。プロパティを検索可能にするには、検索可能レンダリングヒントを有効にする必要があります。

トークン内の特殊文字の扱い

標準アナライザーは、アンダースコアとピリオドを区切り文字ではなくトークンの一部として扱います。そのため、次のようになります。

  • banana_pudding は、banana と pudding ではなく、1個のトークン banana_pudding として保存されます。
  • user.name は、user と name ではなく、1個のトークン user.name として保存されます。

トークンベースの検索方法を使用する場合、banana の検索は値 banana_pudding に一致しません。このような値を一致させる必要がある場合は、banana* のようなワイルドカード検索を使用するか、空白アナライザーの使用を検討してください。

Object Explorer での検索

Object Explorer は引き続き、オントロジーの探索、グローバル検索、個々のオブジェクトの表示のための主要なインターフェースです。Insight は Object Explorer を基に拡張された分析機能を提供し、Object Explorer と併せて利用できます。

Object Explorer は、一致の動作が異なる2つの検索インターフェースを提供します。

グローバル検索バー

Object Explorer のホームページと結果ページにあるグローバル検索バーは、すべてのオブジェクトタイプの検索可能なすべてのプロパティを対象に、トークンベースの検索を実行します。デフォルトでは、クエリ内の各単語が OR ロジックで個別に検索されます。たとえば、yellow cab を検索すると、yellow または cab に一致するオブジェクトが返されます。

検索構文で説明されている検索構文の機能を使用して、この動作を変更できます。

  • フレーズ検索: 語句を引用符で囲む("yellow cab")と、フレーズの完全一致を条件にできます。
  • 論理演算子: AND、OR、NOT を使用して検索条件を組み合わせます。
  • ワイルドカード: * を使用すると0文字以上に、? を使用すると1文字に一致します。末尾のワイルドカード(term*)はサポートされていますが、先頭と末尾を組み合わせたワイルドカード(*row* など)はサポートされていません。
  • あいまい検索: 語句の末尾に ~ を追加すると、近似一致を検索できます。

グローバル検索バーでは、先頭のワイルドカードを使用した検索はサポートされていません。これは、探索で個々の文字列プロパティを絞り込む場合にのみ利用可能で、Ontology Manager で先頭のワイルドカードを有効にするレンダリングヒントが有効になっている文字列プロパティに限られます。検索可能レンダリングヒントも選択されている必要があります。レンダリングヒントの設定について詳しくは、レンダリングヒントを参照してください。

探索でのプロパティフィルター

特定のオブジェクトタイプを探索するとき、個々の文字列プロパティにキーワードフィルターを適用できます。これらのフィルターでは、次の一致モードを利用できます。

モード動作
含む(デフォルト)プロパティにすべての検索トークンが含まれるオブジェクトに一致します
で始まる検索語で始まるトークンがプロパティに含まれるオブジェクトに一致します(term* と同等)
完全一致プロパティ値が検索語と完全に一致するオブジェクトに一致します
ではないプロパティに検索トークンが含まれるオブジェクトを除外します

プロパティのキーワードフィルターは、プロパティのアナライザーが生成する個々のトークンに対して照合します。プロパティが分析なしアナライザーを使用している場合、値全体が1個のトークンとして扱われるため、それに合わせて照合する必要があります。

先頭のワイルドカードを使用した検索

先頭のワイルドカードを使用した検索では、プロパティ値が特定の語句で終わるオブジェクトを検索できます。たとえば、*smith を検索すると、Goldsmith、Blacksmith、smith などの値に一致します。

先頭のワイルドカードを使用した検索を有効にする

先頭のワイルドカードを使用した検索を利用するには、対象の文字列プロパティで先頭のワイルドカードを有効にするレンダリングヒントを有効にする必要があります。

  1. Ontology Manager でオブジェクトタイプに移動し、設定する文字列プロパティを選択します。
  2. プロパティエディターで、先頭のワイルドカードを有効にするレンダリングヒントを選択します。
  3. 先頭のワイルドカードを機能させるには検索可能レンダリングヒントが必要なため、こちらも選択されていることを確認してください。
  4. 変更を保存し、オブジェクトタイプの元データソースを Object Storage v1 (Phonograph) に再インデックス化します。次にトリガーされる再インデックス化を待つか、データソースタブから手動で開始できます。

利用可能なレンダリングヒントの全一覧については、レンダリングヒントを参照してください。

先頭のワイルドカードを使用した検索を利用する

レンダリングヒントを有効にすると、検索語の先頭に * を付けることで、Object Explorer のプロパティフィルターで先頭のワイルドカードを使用できます。たとえば、次のようになります。

  • *smith は、Goldsmith、Blacksmith、smith に一致します。
  • *ing は、running、swimming、ing に一致します。

先頭と末尾を組み合わせたワイルドカード(*term*)はサポートされていません。先頭のワイルドカード(*term)または末尾のワイルドカード(term*)のいずれかは使用できますが、両方を同時に使用することはできません。文字列の部分一致が必要な場合は、Contour または Workshop の Filter List の正規表現モードの使用を検討してください。

Workshop で検索する

Workshop では、オブジェクトを検索して絞り込む方法がいくつか用意されており、それぞれ利用できる機能が異なります。

フィルターリストのキーワード検索

フィルターリストのキーワード検索コンポーネントは、クエリ時にユーザーが選択できる5つの検索モードに対応しています。

モード動作
すべて最も広範な検索です。トークン一致、ワイルドカード一致、接頭辞一致を組み合わせて、クエリに部分一致または完全一致する結果を返します。ワイルドカードによる部分一致では、クエリにアナライザーを適用せずに、クエリをインデックス化済みのトークンと直接比較します。そのため、ワイルドカードクエリは、分析なしまたは空白アナライザーを使用するプロパティで最も予測しやすい動作をします。
いずれかプロパティにいずれかの検索トークンが含まれるオブジェクトに一致します
完全一致プロパティにすべての検索トークンが順序どおりに完全一致するフレーズとして含まれるオブジェクトに一致します
詳細複雑なクエリに使用できる AND、OR、NOT、引用符、丸括弧によるブール構文に対応しています
正規表現プロパティのトークンに正規表現パターンを適用してオブジェクトに一致します

高度なフィルタリングの詳細については、フィルターリストの高度なフィルタリングのドキュメントを参照してください。

探索検索バーウィジェット

Workshop の探索検索バーウィジェットは、Object Explorer のグローバル検索バーと同じ検索基盤を使用します。フレーズ検索用の引用符、論理演算子、ワイルドカード、あいまい検索など、同じ構文に対応しています。

オブジェクトセットフィルター変数

オブジェクトセットフィルター変数は、接頭辞一致のみを行う CONTAIN フィルターに対応しています。たとえば、プロパティの値が id000123 で、フィルタークエリが id0001 の場合、一致と見なされます。ただし、クエリ d0001 は値の先頭から始まっていないため、一致しません。

Functions API で検索する

Functions API (TSv1)では、文字列フィルターメソッドを通じて、テキスト検索の動作を最も細かく制御できます。

メソッド動作
.exactMatch()プロパティの値がクエリ文字列に完全一致するオブジェクトに一致します
.phrase()クエリをトークンに分割し、すべてのトークンが順序どおりに、その間にほかのトークンを挟まずに含まれる値に一致します
.phrasePrefix().phrase() と同じですが、最後のトークンについては、そのトークンで始まるトークンにも一致します
.prefixOnLastToken()クエリをトークンに分割し、順序を問わずすべてのトークンが含まれる値に一致します。最後のトークンについては、そのトークンで始まるトークンにも一致します
.matchAnyToken()クエリをトークンに分割し、いずれかのトークンが含まれる値に一致します
.matchAllTokens()クエリをトークンに分割し、順序を問わずすべてのトークンが含まれる値に一致します
.fuzzyMatchAnyToken().matchAnyToken() と同じですが、編集距離の範囲内での近似一致も許容します
.fuzzyMatchAllTokens().matchAllTokens() と同じですが、編集距離の範囲内での近似一致も許容します

.phrase() および .phrasePrefix() メソッドは、アンダースコアやピリオドによって作られるトークン境界をまたいで一致することはありません。たとえば、banana_pudding は単一のトークンであるため、.phrase("banana") は値 banana_pudding に一致しません。

検索機能の比較

次のテーブルは、それぞれのコンテキストで利用可能な検索機能をまとめたものです。

機能Object Explorer(グローバル)Object Explorer(プロパティフィルター)Workshop フィルターリストFunctions API
トークン検索はいはいはいはい
フレーズ検索はい(引用符)いいえはい(完全一致モード)はい(.phrase())
接頭辞検索はい(term*)はい(次で始まる)はい(すべてモード)はい(.phrasePrefix()、.prefixOnLastToken())
先頭のワイルドカード検索いいえはい(レンダリングヒントが必要)いいえいいえ
ワイルドカード検索はい(*、?)いいえはい(すべてモード)いいえ
あいまい検索はい(~)いいえいいえはい(.fuzzyMatchAnyToken()、.fuzzyMatchAllTokens())
ブール演算子はい (AND, OR, NOT)いいえはい(詳細モード)はい(Filters.and()、Filters.or()、Filters.not())
正規表現いいえいいえはい(正規表現モード)いいえ

よくある落とし穴

  • 単語の一部分を検索してもトークンには一致しません: ワイルドカード(app*)または接頭辞検索メソッドを使用しない限り、app を検索しても application には一致しません。これは、標準アナライザーがトークン application を生成し、app はそのトークンに完全一致しないためです。
  • アンダースコアとピリオドがあるとトークンが分割されません: 標準アナライザーは、first_name と user.name を単一のトークンとして扱います。first_name 内の first を検索する必要がある場合は、ワイルドカードを使用するか、プロパティのアナライザーの変更を検討してください。
  • Object Explorer では、引用符のない複数単語のクエリに OR ロジックが使用されます: Object Explorer のグローバル検索バーで New York を検索すると、new OR york に一致するオブジェクトが返されるため、想定外の結果が含まれることがあります。フレーズの完全一致には "New York" を使用します。
  • ワイルドカードフィルターはクエリを分析しません: ワイルドカード検索(Quick* など)を使用する場合、クエリ文字列はアナライザーで処理されず、インデックス化済みのトークンと1文字ずつ比較されます。これには次の2つの影響があります。
    • 大文字と小文字がインデックス化済みの形式と一致する必要があります。 標準アナライザー(すべてのトークンを小文字に変換するアナライザー)を使用するプロパティでは、大文字を含むワイルドカードクエリは一致しません。分析によって小文字に変換される前の元のテキストに、その大文字が含まれていた場合も同様です。
    • 複数単語のワイルドカードクエリは一致しません。 インデックス化済みの各トークンは単一の単語であるため、空白を含むワイルドカードクエリ(a search term* など)は個々のトークンと比較され、一致しません。したがって、ワイルドカード検索は実質的に単一単語のクエリに限られます。単語をまたぐ部分一致には、Contour または Workshop フィルターリストの正規表現モードの使用を検討してください。
  • 先頭のワイルドカードにはレンダリングヒントが必要です: 先頭のワイルドカード検索(*term)は、Ontology Manager で [先頭のワイルドカードを有効にする] のレンダリングヒントが有効になっている文字列プロパティでのみ利用できます。このレンダリングヒントがない場合、先頭のワイルドカードを使用するクエリは結果を返しません。
  • 先頭と末尾を組み合わせたワイルドカードには対応していません: Object Explorer または Workshop では、*term* を検索できません。文字列の部分一致が必要な場合は、Contour または Workshop フィルターリストの正規表現モードの使用を検討してください。