Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

iFind 検索ツール

この章では、コンテキスト認識テキスト検索操作を実施するためのツールである iFind 検索機能について説明します。iFind を使用するには、検索したいテキストを含む各列に対して iFind インデックスを定義する必要があります。そのうえで、iFind SQL Search 構文を含む WHERE 節にて標準 SQL クエリを使用すれば、テキスト・レコードを検索することができます。クエリは、指定された検索項目 (複数可) が含まれるすべてのレコードを返します。返されるレコード内の一致テキストをハイライト表示することもできます。

Note:

iFind を使用するには、iKnow にアクセスできる Caché ライセンスが必要になります (ライセンス・キーは管理ポータルで表示できます。[システム管理] の次に [ライセンス] を選択します)。

iFind 検索のためのインデックス・ソース

iFind を使用して、%String データ型または %Stream.GlobalCharacter (文字ストリーム) データ型の SQL テキストを検索できます。

iFind 検索を実施するには、検索する列が定義済みの iFind ビットマップ・インデックスを有する必要があります。iFind インデックスには、3 段階のレベルが存在します。これらのレベルは入れ子にしたサブクラスにて定義します。各インデックス・レベルでは、前段レベルの全機能に加えて、そのレベル特有の追加 iFind 機能を備えます。以下の iFind インデックスのうちの任意のタイプを作成できます。

各インデックス・レベルでは、前段レベルのパラメータをすべてサポートしており、さらに追加パラメータが 1 つ以上加わります。指定がなければ、パラメータは既定の値となります。

以下のクラス定義の例では、Narrative プロパティ (列) に意味的インデックスでテーブルを作成します。インデックスの付いたプロパティのデータ型は、%String または %Stream.GlobalCharacter にできます。

   Class Aviation.TestSQLSrch Extends %Persistent [ 
      DdlAllowed,Owner={UnknownUser},SqlRowIdPrivate,
      SqlTableName=TestSQLSrch ]
  { 
  Property UniqueNum As %Integer;
  Property CrashDate As %TimeStamp [ SqlColumnNumber=2 ];
  Property Narrative As %String(MAXLEN=100000) [ SqlColumnNumber=3 ];
  Index NarrSemanticIdx On (Narrative) As %iFind.Index.Semantic(INDEXOPTION=0,
     LANGUAGE="en",LOWER=1);
  Index UniqueNumIdx On UniqueNum [ Type=index,Unique ];
  }

いずれのタイプの iFind インデックスでも、以下のパラメータがサポートされます。

  • INDEXOPTION は、インデックスで語幹解析または複合語分解を使用可能にするかどうかを指定します。これらの操作をサポートするインデックスの作成では、インデックスのサイズがきわめて大きくなるため、語幹解析または複合語分解を使用する可能性が高くない限り、INDEXOPTION=0 と指定することをお勧めします。既定は 0 です。

  • LANGUAGE は、レコードのインデックス作成で使用する言語を指定します。例えば、"en" は英語を指定します。自動言語識別を有効にするには、"*" を使用します。既定は "en" です。

  • LOWER は、クエリ検索で大文字と小文字を区別するかどうかを指定します。既定で、iFind インデックス作成では大文字と小文字が区別されません。iFind では、テキストのインデックス作成前にそのテキストが小文字に正規化されます。LOWER パラメータは、この小文字への正規化を実施するかどうかを指定します (既定は LOWER=1 で、小文字に正規化されます)。一般的に言語規則では、文の先頭で、またはタイトルでの使用時に単語を大文字にするため、小文字への正規化は大半のアプリケーションに推奨されます。LOWER=0 と指定すると、クエリの search_items 文字列では大文字と小文字が区別されます。例えば、LOWER=0 と指定すると、クエリの search_items 文字列 ‘turkey’ に一致するのは turkey のみで、Turkey は一致しません。LOWER=1 と指定すると、クエリの search_items 文字列 ‘turkey’ には turkey と Turkey の両方が一致します。

  • USERDICTIONARY では、インデックス作成前にテキストに適用されるユーザ定義の UserDictionary の名前を指定できます。このパラメータはオプションで、上級者専用です。

サポートされるパラメータすべてのリストは、"インターシステムズ・クラス・リファレンス" の "%iFind.Index.BasicOpens in a new tab" を参照してください。

意味的インデックス (%iFind.Index.SemanticOpens in a new tab) では、以下のオプションのパラメータもサポートされます。

  • IFINDATTRIBUTES では、テキストで否定を識別して否定属性を格納するかどうかを指定できます。IFINDATTRIBUTES=1 と指定すると、否定が識別され、否定のインデックスが作成されます。既定は IFINDATTRIBUTES=0 です。

JSON オブジェクトのインデックス作成

JSON オブジェクトに格納されているテキストの iFind インデックスを作成できます。このインデックスは、JSON 構造の開始位置を指定します。iFind は、そのレベルおよびその下で入れ子になったすべてのレベルですべてのテキストのインデックスを再帰的に作成します。$ を指定して JSON オブジェクト全体のインデックスを作成します。$.key2 を指定して key2 以下で JSON 値のインデックスを作成します。

テーブルへのデータ移入

あらゆる SQL インデックスと同様に、定義済み iFind インデックスは (既定で) 新しいテーブルへのデータの移入時に構築され、その後データを挿入、更新、または削除するときに保持されます。%NOINDEX を使用してテーブルへのデータ移入時のインデックス構築を延期し、後で %Build() メソッドを使用してインデックスを構築することができます。既にデータが移入されているテーブルにインデックスを追加してから、そのインデックスを構築することができます。詳細は、"インデックスの定義と構築" を参照してください。

以下の例では、Samples ネームスペースの Aviation.Events テーブルから Aviation.TestIFind テーブルを生成します。この例では大量のテキストが挿入されるため、実行時間が 1 分ほどかかる場合があります。

INSERT OR UPDATE INTO Aviation.TestIFind (UniqueNum,CrashDate,Narrative) 
    SELECT %ID,EventDate,NarrativeFull FROM Aviation.Event

この例では、フィールドが一意キーで定義されている INSERT OR UPDATE を使用し、繰り返しの実行によって重複レコードが作成されないようにします。

iFind 検索の実施

SQL クエリの WHERE 節で iFind 構文を使用して、1 つ以上のテキスト・アイテムに対するテキスト検索を実施します。これらのテキスト・アイテムは単語、単語の羅列 (基本インデックス)、または iKnow の意味的エンティティ (意味的インデックス) とすることができます。複数のテキスト・アイテムは暗黙的な AND 検索となり、すべての指定項目を順不同でテキストに出現する必要があります。iFind 検索の構文は以下のようになります。

WHERE %ID %FIND search_index(indexname,'search_items',search_option,'language')
  • indexname は、特定の列に対して定義された iFind インデックスの名前となります。

  • search_items は、検索するテキスト・アイテム (単語または iKnow エンティティのいずれか) の一覧であり、引用符で囲みます。テキスト・アイテムは空白で区切られます。アイテムは英数字文字列およびオプションのワイルドカード構文文字で構成されます。テキスト・アイテムには大文字と小文字の区別がありません。使用可能な search_items 構文については以下で説明しています。

  • search_option は、実施する検索タイプを指定するためのインデックス・オプション整数です。使用可能な値には、0 (構文検索)、1 (語幹解析による構文検索)、2 (複合語分解と語幹解析による構文検索)、3 (ファジー検索による構文検索)、4 (正規表現による構文検索) があります。search_option=4 の場合、search_items には 1 つの正規表現文字列が含まれていると想定されます。詳細は、"ObjectScript の使用法" の "正規表現" の章を参照してください。パフォーマンス上の理由により、iFind では一部の高度な正規表現の構文形式がサポートされていません。こういった構文形式は、$LOCATE ObjectScript 関数でサポートされています。

  • language は、適用する iKnow 対応の言語モデルで、2 文字の文字列で指定します。例えば、'en' を入力して英語を指定します。'*' を指定すると、クエリでは自動言語識別が実施されます。

基本インデックス検索の実施時、iFind では 1 つ以上の空白文字の存在により単語を認識します。文の句読点 (後に空白が続くピリオド、コンマ、セミコロン、またはコロン) は無視されます。iFind では、他の句読点はすべてリテラルとして扱われます。例えば、iFind は “touch-and-go“ を単一の単語として扱います。ハイフンや数値内の小数点などの句読点はリテラルとして扱われます。引用文字およびアポストロフィを指定する必要があります。その場合は、一重引用符を 2 つ用いて指定します。

意味的インデックスを使用して基本インデックス検索 (単語、同時、位置句) を実行できます。基本インデックスを使用して意味的インデックス検索を実行しようとすると、SQLCODE -149 エラーが返されます。

SQL search_items 構文

基本インデックス search_items には、以下の構文を含めることができます。

単語検索 :

word1 word2 word3 テキスト内のいずれかの場所において、これらと同一の単語が存在しなければならないことを指定します (順不同)。(論理 AND)1 つの単語を指定することも、任意の数の単語をスペースで区切って指定することもできます。

word1 OR word2 NOT word3

word1 OR (word2 AND word3)

search_items には AND、OR、および NOT 論理演算子を含めることができます。AND は単語をスペースで区切ることと同じです (暗黙的な AND)。NOT は論理的に AND NOT と同じです。search_items では、論理演算子をグループ化するために括弧を使用することもできます。明示的な AND は、グループ化括弧内の複数の単語を指定する際に必要です。例 : (word2 AND word3)。明示的な AND が省略された場合、(word2 word3) は位置句として解釈されます。エスケープ文字「\」を使用して AND、OR、NOT を論理演算子ではなくリテラルとして指定できます。例 : \and

*word

word*

*word*

w*d

アスタリスク・ワイルドカードは、0 個以上の任意タイプの非空白文字を指定します。アスタリスクは接頭語、接尾語として、または単語内で使用できます。エスケープ文字「\」を使用してリテラルとして「*」を指定できます。例 : \*

同時単語検索 :

[word1,word2,...,range]

同時検索。range で指定された近接ウィンドウ内で、これらと同一の単語が存在しなければならないことを指定します (順不同)。任意の数の単語または複数語句を指定できます。複数語句では、区切り句読点がなくスペースで区切られた単語として指定されます。単語 (または位置句) はコンマで区切られ、最後のコンマ区切り要素はオプションの数値の range です。単語はアスタリスク・ワイルドカードを指定できます。

rangeは min–max として、または単純に min に既定の 1 が指定された max として指定できます。例えば、1–5 や 5 です。range はオプションです。省略すると、既定により 1-20 となります。範囲の数値は指定した単語すべてにおいてその数値を含みます。

同時検索は、search_option=4 (正規表現) を指定した場合には使用できません。

位置句検索 :

Note:

二重引用符 "word1 word2 word3" または括弧 (word1 word2 word3) を使用して、位置句を区切ることができます。括弧は論理演算子のグループ化にも使用されるため、二重引用符の使用をお勧めします。

"word1 word2 word3"

これらと同一の単語が指定順にて連続して存在する必要があります。単語はスペースで区切られます。意味分析は実施されないことに注意してください。例えば、“句“ 内の単語は文の最終単語および次文の先頭単語となる場合があります。アスタリスク・ワイルドカードは、句の個々の単語に適用できます。search_items のリテラル括弧文字は引用符で囲む必要があります。

"word1 ? word3"

"word1 ? ? ? word5"

疑問符は、句内の指定単語の間に 1 つの単語があることを示します。それぞれを空白で仕切れば、複数の疑問符を指定することができます。

"word1 ?? word6"

二重疑問符 (間にスペースなし) は、句内の指定単語の間に 0 ~ 6 個の単語があることを示します。

"word1 [1–3] word5"

角括弧は、句内の指定単語の間の単語の間隔数を示します。min-max。この間隔は、変数の範囲として指定されます。この場合には 1 ~ 3 個の単語が不足しています。

意味的インデックス search_items では、基本インデックス構文に加えて、以下の iKnow エンティティ検索構文を含むことができます。

フル・エンティティ検索および部分エンティティ検索 :

{entity} iKnow エンティティの同一文言を指定します。アスタリスク・ワイルドカードは、エンティティの個々の単語に適用できます。
<{entity} < 記号の接頭語は指定の単語 (複数可) で終わる iKnow エンティティを指定します。指定の単語の前に現れるエンティティ内には、1 つ以上の単語が存在する必要があります。
{entity}> > 記号の接尾語は指定の単語 (複数可) で始まる iKnow エンティティを指定します。指定の単語の後に現れるエンティティ内には、1 つ以上の単語が存在する必要があります。

意味的インデックスを使用して基本インデックス検索 (単語、同時、位置句) を実行できます。基本インデックスを使用して意味的インデックス検索を実行しようとすると、SQLCODE -149 エラーが返されます。

空白で区切ることにより、複数の search_items を指定することができます。これは暗黙的な AND テストとなります。例えば以下のようになります。

SELECT Narrative FROM Aviation.TestIFind WHERE %ID %FIND 
search_index(NarrSemanticIdx,'<{plug electrode} (flight plan) instruct*',0,'en')

これは、Narrative テキストに、“plug electrode” で終わる 1 つ以上の iKnow エンティティ、リテラル句 “flight plan”、ワイルドカード接尾辞が指定された単語 “instruct” (つまり、“instructor”、“instructors”、“instruction”、“instructed” などが可能) が含まれている必要があることを意味します。これらの項目のテキスト内での順序は任意です。

検索項目文字列の検証

%iFind.Utils.TestSearchString()Opens in a new tab メソッドを使用すると、search_items 文字列を検証できます。このメソッドを使用することで、論理演算子の構文エラーおよび曖昧な使用を検出できます。例えば、"word1 AND word2 OR word3" は、論理的に曖昧なため検証で不合格となります。括弧を追加し、"word1 AND (word2 OR word3)" または "(word1 AND word2) OR word3".のいずれかにしてこの文字列を明確にします。TestSearchString() は 1 を返して、有効な search_items 文字列であることを示します。

次の例は、この iFind ユーティリティを SQL 関数として呼び出します。

SELECT %iFind.TestSearchString('orange AND (lemon OR lime)')

TestSearchString() は、%Status の値を返します。有効な search_items 文字列はステータス 1 を返します。無効な search_items 文字列の場合、0 で始まり、その後にエンコードされたエラー情報が続くオブジェクト式を返します。

ファジー検索

iFind は、検索文字列と “おおまか“ に一致している要素 (単語またはエンティティ) を含むレコードを照合するファジー検索をサポートしています。ファジー検索は、記述方法のわずかな違い (color と colour) や誤字 (collor と color)、および文法的に異なる形式 (color と colors) を見つけるために使用できます。

iFind では、2 つの単語間のレーベンシュタイン距離を比較して、ファジー一致を評価します。レーベンシュタイン距離とは、1 つの単語を他の単語に変更するために必要な単一文字編集の最小数 (挿入、削除または置換) です。必要な単一文字編集の最大数は、最大編集距離として知られています。iFind の最大編集距離は、既定では 2 文字です。最大編集距離は検索文字列の各要素に個別に適用されます。基本インデックス iFind では、検索文字列の各単語に適用されます。意味的インデックス iFind では、検索文字列の各 iKnow エンティティに適用されます。(以下の例では、基本インデックス iFind を想定しています。)

例えば、“analyse programme behaviour” という語句は、最大編集距離=2 の場合、ファジー検索で “analyze program behavior” と一致します。これは、検索文字列内の各単語が次のように、(最大) 2 文字の編集距離だけ異なるためです。analyse=analyze (1 文字置換)、programme=program (2 文字削除)、behaviour=behavior (1 文字削除)。

最大編集距離以下である単語の場合、最大編集距離の値以下の文字数を含むすべての単語がファジー検索で一致します。例えば、編集距離が 2 で、単語が “ab” の場合、任意の 2 文字の単語 (2 置換)、任意の 1 文字の語 (1 置換、1 削除)、“a” または “b” のいずれかを含む任意の 3 文字の単語 (1 置換、1 挿入)、“a” および “b” の両方をこの順序で含む任意の 4 文字の単語 (2 挿入) が一致することになります。

  • ファジー検索は、基本、意味的、および分析のすべての iFind インデックス・タイプでサポートされています。基本インデックスでは、個別の単語に対してファジー検索が実行されます。意味的インデックスでは、個別の iKnow エンティティに対してファジー検索が実行されます。

  • ファジー検索はワイルドカード検索と組み合わせることはできません。

search_index() のファジー検索を指定するには、既定の編集距離が 2 のファジー検索で search_option を 3 と指定します。または 編集距離が n 文字と指定されているファジー検索では、3:n と指定します。例えば、3:1 と設定すると、編集距離=1 に設定されます。これにより、英語ではほとんど (すべてではありません) の単数および複数形の単語を照合できます。3:0 に設定すると、編集距離=0 に設定されます。これは、ファジー検索なしの iFind 検索と同じです。

iFind メソッドのファジー検索を指定するには、pSearchOption = $$$IFSEARCHFUZZY と設定します。

語幹解析と複合語分解

語幹解析と複合語分解は、基本インデックス、意味的インデックス、および分析インデックスのすべてでサポートできます。語幹解析と複合語分解は単語ベースで、iKnow のエントリベースの操作ではありません。インデックスで語幹解析対応の検索を使用できるようにするには、INDEXOPTION=1 を指定します。語幹解析対応の検索と複合語分解対応の検索の両方を使用できるようにするには、INDEXOPTION=2 を指定します。

語幹解析

語幹解析により、各単語の語幹形式が識別されます。語幹形式により、同じ単語に対する複数の文法的な形式が統一されます。クエリの実行時に searchOption=1 を使用すると、iFind は、実際のテキスト形式ではなく、単語の語幹形式を使用して、検索処理とマッチング処理を実行します。searchOption=0 を使用すると、通常の (語幹形式を使用しない) 検索に、同じインデックスを使用できます。

複合語分解

複合語分解では、複合語を、それを構成する単語に分割します。iFind は、常に、複合語分解と語幹解析を組み合わせます。単語が構成部分に分解されると、それぞれの部分は自動的に語幹抽出されます。複合語分解検索 (searchOption=2) を使用すると、iFind は、検索語の複合語分解する語幹と、インデックス作成されたテキスト・フィールド内の複合語分解された単語の語幹を比較します。複合語分解された構成単語のいずれかの語幹が、その検索語のすべての構成単語と一致する場合、iFind は複合語分解されている単語のみをマッチングします。

例えば、検索語が “thunder“、“storm“、または “storms“ の場合は、すべてが “thunderstorms“ と一致します。ただし、検索語が “thunderstorms“ の場合は、“thunder“ とは一致しません。これは、もう 1 つの構成単語 (“storm“) が一致しないためです。

iFind の複合語分解アルゴリズムは、可能性のある構成単語を識別する言語固有のディクショナリを使用します。このディクショナリには、%iKnow.Stemming.DecompoundingUtils クラスを通じてデータを入力する必要があります。例えば、インデックス作成の前に、このクラスがテキスト列をポイントするようにします。特定の単語には、複合語分解を適用しないこともできます。個別の単語、文字シーケンス、およびトレーニング・データの単語リストに対する複合語分解の適用を除外するには、%iKnow.Stemming.DecompoundUtilsOpens in a new tab を使用できます。

iKnow エンジンでサポートされない言語

iFind 基本インデックスを使用すると、対応する iKnow 言語モデルが存在しない言語のテキストにインデックスを作成して検索できます。

語幹解析は、iKnow の意味的インデックス作成に依存しないため、語幹解析機能が使用できる場合は、単語の語幹形式に対する基本インデックスの単語検索も実行できます。語幹検索を実行するには、INDEXOPTION=1 または INDEXOPTION=2 を指定する必要があります。例えば、イタリア語は iKnow でサポートされていない言語ですが、Caché にはイタリア語に対応した %Text 語幹解析機能が用意されています。

iKnow でサポートされていない言語の iFind 検索には、以下の制限と注意事項が適用されます。

  • この機能を使用するには、iKnow のライセンスが必要です。

  • 言語は、スペースを使用して単語が区切られている必要があります。単語の区切り文字を使用しない言語は検索できません。ただし、日本語 (単語の区切り文字をしない言語) は iKnow が日本語言語モデルを提供しているため、検索できます。

  • アポストロフィでは、単語が区切られません。iKnow は、短縮形 (“can’t” など) と動詞の短縮形 (“there’s” など) を認識して、2 つの単語に分割します。その一方で、所有を表す (“John’s”) など、その他の目的で使用されるアポストロフィは無視します。iKnow のサポートがない場合、iFind は短縮形を別々の単語に分割できません。これは、テキストを前処理して、アポストロフィの前後に必要に応じて空白スペースを挿入することでことで補えます。

  • iFind インデックス作成前に UserDictionary をテキストに適用することはできません。

詳細は、"InterSystems SQL の使用法" の “データベースの問い合わせ” の章にある "フリー・テキスト検索を呼び出すクエリ" を参照してください。

ハイライト表示

search_items 構文を使用して、返されるテキスト内の単語をハイライト表示することができます。ハイライト表示構文は、以下のとおりです。

(text,search_items,search_option)

search_items : ハイライト表示では、検索と同じ search_items 構文を使用します。これにより、レコードを返す処理と、それらのレコードが返される要因となったレコード内の文字列をハイライト表示する処理の両方で、同じ search_items 値を使用できるようになります。また、TestSearchString() メソッドを使用して、ハイライト表示の search_items 構文を検証することもできるようになります。ただし、ハイライト表示は、一致ごとに各インスタンスに適用されるため、ハイライト表示では、search_items 文字列内の search_items 構文の AND、OR、および NOT 論理演算は無視されます。

search_option : オプションの search_option は 0 (既定) です。

以下のいずれかを使用して、ハイライト表示を適用できます。

  • SELECT 項目ハイライト表示 :

    SELECT %iFind.Highlight(Narrative,'"visibility [1-4] mile*" AND "temp* ? degrees"') 
    FROM Aviation.TestSQLSrch 
    WHERE %ID %FIND search_index(NarrBasicIdx,'"visibility [1-4] mile*" AND "temp* ? degrees"',0,'en')
  • ユーティリティ・メソッド・ハイライト表示 :

    %iFind.Utils.Highlight()Opens in a new tab メソッドを使用して、iFind 検索を実施し、結果にハイライト表示を適用できます。

既定で、ハイライト表示では、文字列内の該当する場所に <b> および </b> (太字) XML タグが挿入されます。既定では、ハイライト表示で大文字と小文字は区別されません。

単語検索と共に使用する場合、このメソッドでは、指定された各単語が出現するたびに個別にハイライト表示されます。

位置句検索と共に使用する場合、このメソッドでは、位置句が出現するたびにハイライト表示されます。

iFind の例

以下の例では、任意タイプの iFind インデックスにて、基本インデックス iFind 構文を使用することができます。意味的インデックス iFind 構文では、意味的または分析 iFind インデックスが必要となります。

これらの例では、この章で前述の iFind 検索のためのインデックス・ソースで説明されているとおりに、Aviation.TestIFind テーブルを作成して入力する必要があります。

表示を簡略化するため、これらの例では、レコード・テキストそのものではなく、レコード・カウントを返しています。これらのカウントは、検索基準と一致するレコードの数であり、レコード内で検出された一致数ではありません。レコードは複数の一致を含んでいることもありますが、カウントされるのは 1 回のみとなります。

基本検索の例

以下の例は、基本インデックス検索を使用して Aviation.TestSQLSrch テーブルを検索します。

単語 “electrode”、“plug”、および “spark” (順不同) のインスタンスの 1 つ以上を含むレコードを検索します。

SELECT COUNT(Narrative) FROM Aviation.TestSQLSrch 
WHERE %ID %FIND search_index(NarrBasicIdx,'electrode plug spark',0)

これは単語検索であり、文字列検索ではないことに注意してください。したがって、以下の例では異なる結果が返り、実際に前の例よりも多くの結果が返る場合があります。

SELECT COUNT(Narrative) FROM Aviation.TestSQLSrch 
WHERE %ID %FIND search_index(NarrBasicIdx,'electrodes plug spark',0)

“electrode” で始まる単語 (electrode、electrodes)、および語句 “spark plug” (順不同) のインスタンスの 1 つ以上を含むレコードを検索します。

SELECT COUNT(Narrative) FROM Aviation.TestSQLSrch 
WHERE %ID %FIND search_index(NarrBasicIdx,'electrode* "spark plug"',0)

6 つの単語の同時近接ウィンドウ内に “electrode” で始まる単語 (electrode、electrodes)、および語句 “spark plug” (順不同) を含むレコードを検索します。同時検索で単語および語句を指定するために使用する句読点をメモします。

SELECT COUNT(Narrative) FROM Aviation.TestSQLSrch 
WHERE %ID %FIND search_index(NarrBasicIdx,'[electrode*,spark plug,1-6]',0)

2 つの異なる語句 normal wear および "normal" wear を含むレコードを検索します。

SELECT COUNT(Narrative) FROM Aviation.TestSQLSrch 
WHERE %ID %FIND search_index(NarrBasicIdx,'"normal wear"',0)
SELECT COUNT(Narrative) FROM Aviation.TestSQLSrch 
WHERE %ID %FIND search_index(NarrBasicIdx,'"\"normal\" wear"',0)

文字列 seal (seal、seals、unseal、sealant、sealed、previously-sealed など) を含む単語を最低 1 つ、および語句 “spark plug“ を含むレコードを検索します。

SELECT COUNT(Narrative) FROM Aviation.TestSQLSrch 
WHERE %ID %FIND search_index(NarrBasicIdx,'*seal* "spark plug"',0)

ワイルドカード語句 “wind from ? を含むレコードを検索します。? at ? knots” を含むレコードについて、Aviation.TestIFind テーブルを検索します。考えられる値としては、“wind from the south at 25 knots” および ”wind from 300 degrees at ten knots.“ があります。2 つ連続疑問符の間にスペースがある場合 (? ?)、ワイルドカードは、正確に 2 つの単語を表します。2 つの疑問符の間にスペースがない場合 (??)、ワイルドカードは、0 ~ 6 個の単語を表します。

SELECT COUNT(Narrative) FROM Aviation.TestSQLSrch 
WHERE %ID %FIND search_index(NarrBasicIdx,'"wind from ? ? at ? knots"',0)

以下の例では、基本インデックスを正規表現検索 (n=4) と共に使用します。これは、“January 10“ から “January 29“ までの間の日付を指定する文字列の出現を含んだレコードの検索となります。

SELECT COUNT(Narrative) FROM Aviation.TestSQLSrch 
WHERE %ID %FIND search_index(NarrBasicIdx,'"January [1-2][0-9]"',4)

詳細は、"ObjectScript の使用法" の "正規表現" を参照してください。

意味的検索の例

以下の例は、意味的インデックス iFind 検索を使用して Aviation.TestIFind テーブルを検索します。

iKnow エンティティ “spark plug electrodes“ を含むレコードを検索します。

SELECT COUNT(Narrative) FROM Aviation.TestIFind 
WHERE %ID %FIND search_index(NarrSemanticIdx,'{spark plug electrodes}',0)

“spark plug” または “spark plugs” で終わる iKnow エンティティを含むレコードを検索します。

SELECT COUNT(Narrative) FROM Aviation.TestIFind 
WHERE %ID %FIND search_index(NarrSemanticIdx,'<{spark plug*}',0)

“spark plugs“ で終わる iKnow エンティティと iKnow エンティティ “spark plugs“ の両方を含むレコードを検索します。

SELECT COUNT(Narrative) FROM Aviation.TestIFind 
WHERE %ID %FIND search_index(NarrSemanticIdx,'<{spark plugs} {spark plugs}',0)
FeedbackOpens in a new tab