ヘッダーをスキップ
Oracle Textリファレンス
10gリリース2(10.2)
部品番号: B19214-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

3 Oracle Text CONTAINS問合せ演算子

この章では、CONTAINS演算子の優先順位を説明し、各演算子の説明、構文および例を示します。この章の内容は次のとおりです。

演算子の優先順位

演算子の優先順位は、問合せ式のコンポーネントが評価される順序を決定します。テキスト問合せ演算子は、それぞれ独自の評価順を持つ2組の演算子に分けることができます。次に、これら2つのグループをグループ1およびグループ2として説明します。

どのような場合でも、問合せ式は演算子の優先順位に従って、左から右の順に評価されます。優先順位の高い演算子が最初に評価されます。優先順位が等しい演算子は、式の中で現れる順序に従って左から右へ適用されます。

グループ1の演算子

問合せ式内のグループ1の演算子を優先順位の高い順に並べると次のようになります。

  1. EQUIVALENCE (=)

  2. NEAR(;)

  3. WEIGHT(*)THRESHOLD(>)

  4. MINUS(-)

  5. NOT(~)

  6. WITHIN

  7. AND (&)

  8. OR(|)

  9. ACCUMulate(,)

グループ2の演算子および文字

問合せ式内のグループ2の演算子を評価順位の高い順に並べると次のようになります。

  1. ワイルド・カード文字

  2. STEM($)

  3. FUZZY

  4. SOUNDEX(!)

プロシージャ型演算子

グループ1にもグループ2にもリストされていないその他の演算子は、プロシージャ型演算子です。これらの演算子には優先順位がありません。これらには、SQEおよびシソーラス演算子が含まれます。

優先順位の例

表3-1 問合せ式の優先順位の例

問合せ式 評価順
w1 | w2 & w3 (w1) | (w2 & w3)
w1 & w2 | w3 (w1 & w2) | w3
?w1, w2 | w3 & w4 (?w1), (w2 | (w3 & w4))
abc = def ghi & jkl = mno ((abc = def) ghi) & (jkl=mno)
dog and cat WITHIN body dog and(cat WITHIN body)

1番目の例では、ANDORよりも優先順位が高いため、問合せはw1を含むすべてのドキュメント、およびw2w3の両方を含むすべてのドキュメントを戻します。

2番目の例では、問合せはw1w2の両方を含むすべてのドキュメント、およびw3を含むすべてのドキュメントを戻します。

3番目の例では、最初にFUZZY演算子がw1に適用されます。次にAND演算子が引数w3およびw4に適用され、その後OR演算子がw2およびAND演算子の結果に適用されます。最後に、w1に対するFUZZY演算子のスコアがOR演算子のスコアに加えられます。

4番目の例は、EQUIVALENCE演算子がAND演算子より優先順位が高いことを示しています。

5番目の例は、AND演算子がWITHIN演算子より優先順位が低いことを示しています。

優先順位の変更

優先順位は、グループ化文字によって次のように変わります。

  • カッコ内の拡張操作または実行操作は、演算子の優先順位に関係なく、他の拡張操作に優先して解決されます。

  • カッコ内の式の評価に関しては、演算子の優先順位が有効です。

  • カッコ内では、拡張演算子は自身もカッコ内に存在しないかぎり式に適用されません。


ABOUT

動作概要

問合せ語句に関連するドキュメントを戻すには、ABOUT演算子を使用します。英語とフランス語では、ABOUTによって概念を問い合せることができます。これは、概念が実際に問合せに含まれていなくても可能です。たとえば、heatに対するABOUT問合せでは、temperatureという語が問合せに含まれていなくても、温度に関連するドキュメントが戻されます。

その他の言語では、ABOUTを使用すると、多くの場合は戻されるドキュメントの数が多くなり、結果のソート順序が改善される場合があります。Oracle Textはすべての言語において、ABOUT問合せの結果に対し、関連性の最も高いドキュメントが最も高いスコアとなるようにスコア付けします。

英語とフランス語での動作

英語とフランス語では、ABOUT演算子を使用して概念を問い合せます。システムは、索引のテーマ・コンポーネントの概念情報を検索します。索引にテーマ・コンポーネントを作成するには、INDEX_THEMES BASIC_LEXER属性をYESに設定します。


注意:

英語およびフランス語でABOUT問合せを発行する場合、索引にテーマ・コンポーネントは必要ありません。ただし、索引にテーマ・コンポーネントがあると、ABOUT問合せの結果が最も向上します。

Oracle Textでは、問合せワードまたは句に関連する概念を含むドキュメントを取り出します。たとえば、CaliforniaについてのABOUT問合せを発行すると、システムによって、Californiaの都市であるLos AngelesSan Franciscoという語句を含むドキュメントが戻されます。このABOUT問合せで戻されるドキュメントには、Californiaという語句が含まれている必要はありません。

ABOUT問合せに指定したワードまたは句が、索引に格納されたテーマと完全に一致する必要はありません。Oracle Textは、索引の検索を実行する前に、ワードまたは句を正規化します。

ABOUT演算子は、CONTAINS SQL演算子およびCATSEARCH SQL演算子と併用できます。CATSEARCHの場合は、CONTEXT文法による問合せテンプレートを使用して索引テーマを問い合せる必要があります。「例」の項の「CATSEARCHによるABOUT問合せ」を参照してください。

構文

構文 説明
about(phrase) すべての言語において、ABOUT問合せがない同じ問合せよりも、戻される関連ドキュメント数が増加します。phraseパラメータは、1つのワード、句またはフリー・テキスト・フォーマットのワード文字列です。

英語およびフランス語では、索引付け時にBASIC_LEXER INDEX_THEMES属性がYESに設定された場合、phraseに関連する概念を含むドキュメントを戻します。

戻されたスコアは関連性スコアです。

Oracle Textでは、phraseに組み込まれた問合せ演算子は無視されます。

索引にテーマ情報のみが含まれている場合、ABOUT演算子およびオペランドをテキスト列の問合せに組み込む必要があります。そうしない場合、Oracle Textからエラーが戻されます。

指定するphraseは、4000文字以内です。


大/小文字の区別

問合せを適切な文字で表すと、ABOUT問合せの結果が最も向上します。これは、問合せの正規化が、大/小文字が区別されるナレッジ・カタログに基づくためです。

ただし、ABOUT問合せの結果を取得するために、大/小文字を正確に区別して問合せを入力する必要はありません。システムが、最適な方法で問合せを解釈します。たとえば、CISCOという文字で問合せを入力し、これがナレッジ・カタログで検出されない場合、システムでは検索用の関連概念としてCiscoを使用する場合があります。

ABOUT結果の改善

ABOUT演算子は、英語とフランス語では、提供されているナレッジ・ベースを使用して入力された句を解析します。したがって、ABOUT問合せは、ナレッジ・ベースにある概念の認識と解析に制限されています。

使用しているアプリケーション固有の用語をナレッジ・ベースに追加すると、ABOUT問合せの結果を改善できます。

制限事項

単一のワード

サッカー(soccer)についてのドキュメントを検索するには、次の構文を使用します。

'about(soccer)'

句を問合せ語句として入力すると、問合せをさらに詳細化して、国際大会のサッカー・ルール(soccer rules in international competition)についてのドキュメントを含めることができます。

'about(soccer rules in international competition)'

この英語の例では、soccerrulesまたはinternational competitionのテーマを持つすべてのドキュメントがOracle Textにより戻されます。

通常、スコア付けの点では、これら3つのテーマをすべて含むドキュメントの方が、これらのテーマのうちの1つまたは2つのみを含むドキュメントより高いスコアを示します。

構成されていない句

次の例のように、構成されていない句で問い合せることもできます。

'about(japanese banking investments in indonesia)'

結合された問合せ

ANDNOTなど、他の演算子を使用して、ABOUT問合せをワード問合せと結合できます。

たとえば、結合されたABOUTおよびワード問合せを次のように発行できます。

'about(dogs) and cat'

次のように、ABOUT問合せを別のABOUT問合せと結合できます。

'about(dogs) not about(labradors)'

注意:

ABOUT演算子は、'ABOUT (xyz) WITHIN abc'のようにWITHIN演算子と結合できません。

CATSEARCHによるABOUT問合せ

次のように、grammarにCONTEXTを設定した問合せテンプレートを使用して、CATSEARCHによるABOUT問合せを発行できます。

select pk||' ==> '||text from test
where catsearch(text,
'<query>
  <textquery grammar="context">
     about(California)
  </textquery>
  <score datatype="integer"/>
</query>','')>0
order by pk;


ACCUMulate(,)

問合せ語句のいずれかが1つ以上含まれるドキュメントを検索するには、ACCUM演算子を使用します。この場合、戻されるドキュメントは、検出された問合せ語句の数(および頻度)に基づく累積スコアによってランク付けされます。

構文

構文 説明
term1,term2

term1 ACCUM term2

term1またはterm2を含むドキュメントを戻します。語句の重みによってドキュメントをランク付けし、語句の合計の重みが最も高いドキュメントに最も高いスコアを割り当てます。

ACCUMulateスコア付け

ACCUMulateはまず、複数ある問合せ語句のうち、いくつの語句がドキュメントにあるかということに基づいてドキュメントをスコア付けします。一致する語句の数が多いドキュメントは、一致する語句の数が少ないドキュメントよりも常にスコアが高くなります。これは、後者のドキュメントの方が語句の出現頻度が高い場合でも当てはまります。 つまり、dog ACCUM catを検索した場合、

the dog played with the cat

は、次の文よりもスコアが高くなります。

the big dog played with the little dog while a third dog ate the dog food

スコアは複数の範囲に分けられます。2つの語句のACCUMでは、両方の語句に一致するヒットは、常に51〜100の範囲のスコアとなりますが、いずれかの語句のみが一致するヒットは、1〜50の範囲のスコアとなります。同様に、3つの語句のACCUMでは、1つの語句に一致するヒットは、1〜33の範囲のスコアとなり、2つの語句に一致するヒットは34〜66の範囲のスコアとなり、また3つのすべての語句に一致するヒットは67〜100の範囲のスコアとなります。これらの範囲内では、通常のスコア付けのアルゴリズムが適用されます。(スコアの計算方法の詳細は、付録F「Oracle Textのスコア付けのアルゴリズム」を参照してください。)

複数の語句にそれぞれ異なる重みを割り当てることができます。たとえば、次の形式の問合せでは、

soccer, Brazil*3

Brazilという語句には、soccerの3倍の重みが割り当てられます。したがって、次のドキュメント

people play soccer because soccer is challenging and fun

は、次のドキュメントよりも低いスコアになります。

Brazil is the largest nation in South America

ただし、どちらのドキュメントも、次のドキュメントより下にランク付けされます。

soccer is the national sport of Brazil

soccer ACCUM Brazil*3という問合せは、soccer ACCUM Brazil ACCUM Brazil ACCUM Brazilと同等である点に注意してください。問合せ語句Brazilはそれぞれ独立したものとみなされるため、問合せ全体が2つではなく4つの語句を含むもののようにスコア付けされ、したがってスコア付けの範囲も4つになります。前述のBrazilとsoccerのドキュメントの1つ目の例では、1つ目の範囲(1〜25)、2つ目の例では3つ目の範囲(51〜75)、3つ目の例では4つ目の範囲(76〜100)でスコア付けされます。(Brazilが含まれるドキュメントは少なくとも3つの問合せ語句に一致するとみなされるため、2つ目の範囲でスコア付けされるドキュメントはありません。)

set serveroutput on;
DROP TABLE accumtbl;
CREATE TABLE accumtbl (id NUMBER, text VARCHAR2(4000) );

INSERT INTO accumtbl VALUES ( 1, 'the little dog played with the big dog
      while the other dog ate the dog food');
INSERT INTO accumtbl values (2, 'the cat played with the dog');

CREATE INDEX accumtbl_idx ON accumtbl (text) indextype is ctxsys.context;

PROMPT dog ACCUM cat
SELECT SCORE(10) FROM accumtbl WHERE CONTAINS (text, 'dog ACCUM cat', 10)
   > 0;

PROMPT dog*3 ACCUM cat
SELECT SCORE(10) FROM accumtbl WHERE CONTAINS (text, 'dog*3 ACCUM cat', 10)
   > 0;

これは、次の出力結果を戻します。dogおよびcatが両方とも含まれるドキュメントが最もスコアが高い点に注意してください。

dog ACCUM cat
   ID  SCORE(10)
----- ----------
    1          6
    2         52

dog*3 ACCUM cat
   ID  SCORE(10)
----- ----------
    1         53
    2         76

関連項目

「WEIGHT(*)」も参照してください。


AND (&)

各問合せ語句が1つ以上含まれるドキュメントを検索するには、AND演算子を使用します。

構文

構文 説明
term1&term2

term1 and term2

term1およびterm2が両方含まれているドキュメントを戻します。そのオペランドの最小スコアを戻します。すべての問合せ語句が存在する必要があり、スコアの低い方が選択されます。

blueblackおよびredという語句が含まれているすべてのドキュメントを取得するには、次の問合せを発行します。

'blue & black & red'

AND問合せでは、各問合せ語句のスコアのうち最も低いスコアが戻ります。この例では、ドキュメント内のblue、blackおよびredの3つの語句のスコアがそれぞれ10、20および30の場合、ドキュメントのスコアは10になります。

関連項目


関連項目

AND演算子は、すべての問合せ語句が含まれるドキュメントを戻しますが、OR演算子は、いずれかの問合せ語句が含まれるドキュメントを戻します。「OR(|)」を参照してください。


BROADER TERM(BT、BTG、BTP、BTI)

指定された問合せ語句の上位語としてシソーラスで定義されている語句が含まれるように問合せを拡張するには、BROADER TERM演算子(BTBTGBTPBTI)を使用します。上位語の上位語、さらにその上位語、というようにシソーラス階層を上がるように問合せを拡張できます。

構文

構文 説明
BT(term[(qualifier)][,level][,thes]) シソーラスでtermに対する上位語として定義されたすべての語句が含まれるように、問合せを拡張します。
BTG(term[(qualifier)][,level][,thes]) シソーラスでtermに対する上位汎用語として定義されたすべての語句が含まれるように、問合せを拡張します。
BTP(term[(qualifier)][,level][,thes]) シソーラスでtermに対する上位語分語として定義されたすべての語句が含まれるように、問合せを拡張します。
BTI(term[(qualifier)][,level][,thes]) シソーラスでtermに対する上位インスタンス語として定義されたすべての語句が含まれるように、問合せを拡張します。

term

BROADER TERM演算子にオペランドを指定します。termは、thesによって指定されたシソーラスで、語句に対して定義された上位語のエントリが含まれるようにOracle Textによって拡張されます。たとえば、BTG(dog)と指定すると、拡張には、dogに対する上位汎用語として定義されている語句のみが含まれます。拡張演算子はterm引数に指定できません。

この拡張に含まれる上位語の数は、levelの値によって決定されます。

qualifier

termthesの同じ階層分岐で2つ以上のノードに現れる同形異義語(同じスペルで複数の意味を持つワードまたは句)の場合は、termに修飾子を指定します。

BROADER TERM問合せで同形異義語に修飾子が指定されていない場合は、すべての同形異義語の上位語が含まれるように問合せが拡張されます。

level

指定された語句に対する上位語を戻すために、シソーラス階層内を横断するレベル数を指定します。たとえば、BTのレベル1問合せは、上位語が定義されている場合、指定した問合せ語句の上位語エントリを戻します。レベル2問合せは、指定した問合せ語句の上位語エントリ、さらにそれらの上位語の上位語エントリを戻します。

level引数はオプションで、デフォルト値は(1)です。level引数に0(ゼロ)または負の値を設定すると、元の問合せ語句のみを戻します。

thes

指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。 thes引数はオプションで、デフォルト値はDEFAULTです。このデフォルト値を使用する場合は、シソーラス表にDEFAULTという名前のシソーラスが存在している必要があります。


注意:

thesを指定する場合は、levelも指定する必要があります。

次の問合せは、tutorialという問合せ語句、またはDEFAULTシソーラスでtutorialBT語として定義された語句が含まれているすべてのドキュメントを戻します。

'BT(tutorial)'

シソーラス名を指定する場合は、次のようにlevelも指定する必要があります。

'BT(tutorial, 2, mythes)'

同形異義語のBROADER TERM演算子

machinecrane(building equipment)の上位語で、birdcrane(waterfowl)の上位語であり、上位語問合せに修飾子が指定されていない場合、問合せ

BT(crane)

は、次のように拡張されます。

'{crane} or {machine} or {bird}'

上位語問合せでwaterfowlcraneの修飾子として指定されている場合、問合せ

BT(crane{(waterfowl)})

は、次のように拡張されます。

'{crane} or {bird}'

注意:

BROADER TERMまたはNARROWER TERM問合せで修飾子を指定する場合、修飾子およびその表記法(カッコ付け)はこの例のようにエスケープする必要があります。

関連項目

CTX_THESパッケージのプロシージャを使用して、シソーラスをブラウズできます。


関連項目

シソーラスの上位語のブラウズについては、第12章「CTX_THESパッケージ」の「CTX_THES.BT」を参照してください。


EQUIVALENCE (=)

問合せ時に条件を満たすワードの置換を指定するには、EQUIV演算子を使用します。

構文

構文 説明
term1=term2

term1 equiv term2

term2term1の条件を満たす置換語であることを指定します。スコアは、両方の語句の出現回数の合計として計算されます。

次の例は、句alsatians are big dogsまたはlabradors are big dogsのいずれかを含むすべてのドキュメントを戻します。

'labradors=alsatians are big dogs'

演算子の優先順位

EQUIV演算子は、拡張演算子(FUZZY、SOUNDEX、STEM)を除く他のすべての演算子より高い優先順位を持ちます。


FUZZY

指定された語句に類似するスペルのワードが含まれるように問合せを拡張するには、fuzzy演算子を使用します。この拡張タイプは、ドキュメント・セットにスペル・ミスが多い場合に、より正確な結果を検索するために有効です。

fuzzy構文を使用すると、結果セットのランク付けができます。このランク付けによって、問合せワードに対する類似度が高いワードを含むドキュメントには、類似度の低いワードを含むドキュメントより高いスコアが割り当てられます。また、拡張する語句の数も制限できます。

STEM拡張とは異なり、FUZZY拡張によって生成されるワード数は、索引内のワードによって異なります。したがって、結果は、索引の内容によって大幅に変わってきます。

サポート対象言語

Oracle Textでは、英語、ドイツ語、イタリア語、オランダ語、スペイン語、日本語、OCRおよび自動言語識別のファジー定義をサポートしています。

ストップワード

FUZZY拡張がストップワードを戻す場合、そのストップワードは問合せの中には含まれず、CTX_DOC.HIGHLIGHTまたはCTX_DOC.MARKUPでハイライト表示もされません。

基本文字変換

テキスト列に基本文字変換を使用でき、問合せ式にFUZZY演算子が指定されている場合は、Oracle Textによって問合せの基本文字書式が処理されます。

構文

fuzzy(term, score, numresults, weight)
パラメータ 説明
term FUZZY拡張の実行対象ワードを指定します。Oracle Textにより、termが索引内のワードのみを含むように拡張されます。FUZZY演算子で処理するには、ワードは3文字以上である必要があります。
score 類似度スコアを指定します。この数値未満のスコアを割り当てられた拡張内の語句は、排除されます。1〜80の数を指定します。デフォルトは60です。
numresults termの拡張に使用する語句の最大数を指定します。1〜5000の数を指定します。デフォルトは100です。
WEIGHT 結果に対して、それぞれの類似度スコアに応じて重みを付ける場合は、WEIGHTまたはWを指定します。

結果に重みを付けない場合は、NOWEIGHTまたはNを指定します。


次のCONTAINS問合せについて考えます。

...CONTAINS(TEXT, 'fuzzy(government, 70, 6, weight)', 1) > 0;

この問合せは、類似度スコアが70を超える、索引にあるgovernmentの最初の6ファジー・バリエーションに拡張されます。

さらに、結果セットのドキュメントには、governmentに対するそれぞれの類似度に応じて重み付けが行われます。governmentに最も類似しているワードが含まれているドキュメントに、最も高いスコアが割り当てられます。

不要なパラメータは、適切な数のカンマを使用してスキップできます。次に例を示します。

'fuzzy(government,,,weight)'

下位互換性のための構文

前のリリースの古いファジー構文も引き続きサポートされています。この構文は、次のとおりです。

パラメータ 説明
?term スペルが似ているすべての語句が、指定した問合せ語句に含まれるように問合せ語句を拡張します。FUZZY演算子で処理するには、語句は3文字以上である必要があります。

 

HASPATH

指定したセクション・パスを含むすべてのXMLドキュメントを検索するには、この演算子を使用します。また、この演算子を使用すると、セクションの等価性もテストできます。

この演算子を機能させるには、PATH_SECTION_GROUPを使用して索引を作成する必要があります。

構文

構文 説明
HASPATH(path) XMLドキュメント・セットを検索し、pathが存在するすべてのドキュメントに対してスコア100を戻します。親と子のパスは、/文字で区切ります。たとえば、A/B/Cと指定できます。

例を参照してください。

HASPATH(A="value") XMLドキュメント・セットを検索し、valueの内容のみ含まれている要素Aがあるすべてのドキュメントに対してスコア100を戻します。

例を参照してください。


HASPATHおよびINPATHでの特殊文字の使用

HASPATHおよびINPATH演算子で特殊文字を使用する場合のルールは次のとおりです。

パスのテスト

次の問合せの例を示します。

HASPATH(A/B/C)

は、次のドキュメントを検索して、スコア100を戻します。

<A><B><C>dog</C></B></A>

この問合せでは、dogは参照されません。

セクションの等価性のテスト

次の問合せの例を示します。

dog INPATH A

この問合せは、次のドキュメントを検索します。

<A>dog</A>

さらに、次のドキュメントも検索します。

<A>dog park</A>

問合せを、語句dogのみに制限し、それ以外の語句を検索しないようにする場合は、HASPATH演算子によるセクションの等価性のテストを使用できます。たとえば、問合せ

HASPATH(A="dog")

は、最初のドキュメントを検索し、スコア100を戻します。2番目のドキュメントは検索しません。

制限事項

XMLのセクション・データの記録方法により、完全に空のXMLセクションの場合は、次のように不適切な一致が発生することがあります。

<A><B><C></C></B><D><E></E></D></A>

HASPATH(A/B/E)またはHASPATH(A/D/C)の問合せでは、このドキュメントと不適切に一致します。この種の不適切な一致は、空のタグの間にテキストを挿入することで回避できます。


INPATH

XMLドキュメントでパス検索を実行するには、この演算子を使用します。この演算子は、WITHIN演算子と似ています。ただし、右側には、単一のセクション名ではなく、カッコで囲んだパスが置かれます。

INPATH演算子を機能させるには、PATH_SECTION_GROUPを使用して索引を作成する必要があります。

構文

INPATH演算子の構文は、次のとおりです。

トップレベルのタグ検索

構文 説明
term INPATH (/A)

term INPATH (A)

<A>および</A>タグ内にtermが含まれているドキュメントを戻します。

任意レベルのタグ検索

構文 説明
term INPATH (//A) 任意レベルの<A>タグにtermが含まれているドキュメントを戻します。この問合せは、'term WITHIN A'と同じです。

直接の親子関係のパス検索

構文 説明
term INPATH (A/B) トップレベルの要素Aの直接の子である要素Bにtermが含まれているドキュメントを戻します。

たとえば、次のドキュメント

<A><B>term</B></A>

が戻されます。


単一レベルのワイルド・カード検索

構文 説明
term INPATH (A/*/B) トップレベルの要素Aの孫(2レベル下位)である要素Bにtermが含まれているドキュメントを戻します。

たとえば、次のドキュメント

<A><D><B>term</B></D></A>

が戻されます。


マルチレベルのワイルド・カード検索

構文 説明
term INPATH (A/*/B/*/*/C) トップレベルの要素Aの2レベル下位(孫)にある要素Bから3レベル下位の要素Cにtermが含まれているドキュメントを戻します。

任意レベルの子検索

構文 説明
term INPATH(A//B) トップレベルの要素Aの子(任意レベル)である要素Bにtermが含まれているドキュメントを戻します。

属性の検索

構文 説明
term INPATH (//A/@B) 任意レベルの要素Aの属性Bにtermが含まれているドキュメントを戻します。属性は、直接の親にバインドされている必要があります。

子/属性の存在のテスト

構文 説明
term INPATH (A[B]) 要素Bを直接の子として持つトップレベルの要素Aにtermが含まれているドキュメントを戻します。
term INPATH (A[.//B]) 任意レベルの要素Bを子として持つトップレベルの要素Aにtermが含まれているドキュメントを戻します。
term INPATH (//A[@B]) 属性Bを持つ任意レベルの要素Aにtermが含まれているドキュメントを検索します。属性は、直接の親に結合されている必要があります。

属性値のテスト

構文 説明
term INPATH (A[@B = "value"]) 値がvalueである属性Bを持つトップレベルの要素Aにtermが含まれているすべてのドキュメントを検索します。
term INPATH (A[@B !="value"]) 値がvalue以外の属性Bを持つトップレベルの要素Aにtermが含まれているすべてのドキュメントを検索します。

タグ値のテスト

構文 説明
term INPATH (A[B = "value"])) 値がvalueであるタグBを持つタグAにtermが含まれているドキュメントを戻します。

NOT

構文 説明
term INPATH (A[NOT(B)]) 要素Bを直接の子として持たないトップレベルの要素Aにtermが含まれているドキュメントを検索します。

ANDおよびORのテスト

構文 説明
term INPATH (A[B and C]) 要素Bと要素Cを直接の子として持つトップレベルの要素Aにtermが含まれているドキュメントを検索します。
term INPATH (A[B and @C="value"]])

要素Bと値がvalueである属性Cを持つトップレベルの要素Aにtermが含まれているドキュメントを検索します。
term INPATH (A [B OR C]) 要素Bまたは要素Cを持つトップレベルの要素Aにtermが含まれているドキュメントを検索します。

パスとノードの組合せのテスト

構文 説明
term INPATH (A[@B = "value"]/C/D) 値がvalueである属性Bを持つトップレベルの要素Aの子が要素Cの場合、要素Cの子である要素Dにtermが含まれているドキュメントを戻します。

ネストされたINPATH

次のように、INPATH式全体を別のINPATH式内にネストできます。

(dog INPATH (//A/B/C)) INPATH (D)

ネストを実行しても、2つのINPATHのパスは完全に独立しています。外部INPATHのパスは、内部INPATHのパスのコンテキスト・ノードを変更しません。次に例を示します。

(dog INPATH (A)) INPATH (D)

この式は、ドキュメントを検索しません。内部INPATHは、トップレベルのタグA内のdogを検索し、外部INPATHは、トップレベルのタグDを持つドキュメントに検索を制限されているためです。したがって、この式では、ドキュメントは検索されません。

大/小文字の区別

パス検索では、タグ名と属性名の大/小文字が区別されます。次に例を示します。

dog INPATH (A)

この式では、<A>dog</A>は検索されますが、<a>dog</a>は検索されません。この場合は、次の式を使用します。

dog INPATH (a)

INPATHでの特殊文字の使用

INPATHでのパーセント記号(%)やバックスラッシュ(\)などの特殊文字の使用の詳細は、「HASPATHおよびINPATHでの特殊文字の使用」を参照してください。

トップレベルのタグ検索

トップレベルのタグ<A>に、語句dogが含まれているすべてのドキュメントを検索するには、次の問合せを行います。

dog INPATH (/A)

または

dog INPATH(A)

任意レベルのタグ検索

任意レベルの<A>タグに語句dogが含まれているすべてのドキュメントを検索するには、次の問合せを行います。

dog INPATH(//A)

この問合せは、次のドキュメントを検索します。

<A>dog</A>

および

<C><B><A>dog</A></B></C>

直接の親子関係の検索

トップレベルの要素Aの直接の子である要素Bに語句dogが含まれているすべてのドキュメントを検索するには、次の問合せを行います。

dog INPATH(A/B)

この問合せは、次のXMLドキュメントを検索します。

<A><B>My dog is friendly.</B><A>

ただし、次のドキュメントは検索しません。

<C><B>My dog is friendly.</B></C>

タグ値のテスト

タグの値をテストできます。たとえば、次の問合せ

dog INPATH(A[B="dog"])

は、次のドキュメントを検索します。

<A><B>dog</B></A>

ただし、次のドキュメントは検索しません。

<A><B>My dog is friendly.</B></A>

属性の検索

属性の内容を検索できます。たとえば、次の問合せ

dog INPATH(//A/@B)

は、次のドキュメントを検索します。

<C><A B="snoop dog"> </A> </C>

属性値のテスト

属性の値をテストできます。たとえば、次の問合せ

California INPATH (//A[@B = "home address"])

は、次のドキュメントを検索します。

<A B="home address">San Francisco, California, USA</A>

ただし、次のドキュメントは検索しません。

<A B="work address">San Francisco, California, USA</A>

パスのテスト

HASPATH演算子を使用して、パスの存在をテストできます。たとえば、次の問合せ

HASPATH(A/B/C)

は、次のドキュメントを検索して、スコア100を戻します。

<A><B><C>dog</C></B></A>

この問合せでは、dogは参照されません。

制限事項

等価性のテスト

INPATHによる等価性のテストの例を次に示します。

dog INPATH (A[@B = "foo"])

これらの式には、次の制限事項が適用されます。


MDATA

MDATAセクションが含まれるドキュメントを問い合せるには、MDATA演算子を使用します。MDATAセクションは、複合問合せを高速化するためにドキュメントに追加されたメタデータです。

MDATAはリテラルとして処理されます。たとえば、次の問合せ

MDATA(price, $1.24)

では、$はSTEM演算子として解釈されません。また、.(ピリオド)も空白に変換されません。MDATA演算子の範囲は右(閉じ)カッコまでであるため、右カッコを持つMDATA値は検索されません。

構文

構文
MDATA(sectionname, value)

sectionname

検索するMDATAセクションの名前。

MDATAセクションの値。たとえば、Booktypeという名前のMDATAセクションが作成されている場合、値の例としてpaperbackがあります。

たとえば、作家Nigella Lawsonの著書を問い合せるとします。問い合せる著書にはsummerというワードが含まれています。AUTHORという名前のMDATAセクションが宣言されているとの想定で、次のような問合せを実行できます。

SELECT id FROM idx_docs
  WHERE CONTAINS(text, 'summer AND MDATA(author, Nigella Lawson)')>0

この問合せは、(簡易トークン化後の)AUTHORタグの値がNigella Lawsonである場合にのみ有効です。NigellaまたはMs. Nigella Lawsonの場合は無効です。

注意

MDATA問合せ値では、ストップワードは無視されます。

MDATA演算子は、ドキュメントが一致する場合は100を、一致しない場合は0を戻します。

MDATA演算子は、CTXCAT索引、CTXRULE索引またはCTXXPATH索引に対してサポートされていません。

表3-2に、MDATAと一部の他の問合せ演算子との関係を示します。

表3-2 MDATAおよび他の問合せ演算子

演算子 yes/no
AND dog & MDATA(a, b) yes
OR dog | MDATA(a, b) yes
NOT dog ~ MDATA(a, b) yes
MINUS dog - MDATA(a, b) yes
ACCUM dog , MDATA(a, b) yes
PHRASE MDATA(a, b) dog no
NEAR MDATA(a, b) ; dog no
WITHIN、HASPATH、INPATH MDATA(a, b) WITHIN c no
シソーラス MDATA(a, SYN(b)) no
拡張 MDATA(a, $b)

MDATA(a, b%)

MDATA(a, !b)

MDATA(a, ?b)

no(構文上は可能ですが、内部演算子はリテラル・テキストとして処理されます)
ABOUT ABOUT(MDATA(a,b))

MDATA(ABOUT(a))

no(構文上は可能ですが、内部演算子はリテラル・テキストとして処理されます)

MDATAセクションが繰り返される場合、各インスタンスは別個の独立した値です。たとえば、ドキュメント

<AUTHOR>Terry Pratchett</AUTHOR><AUTHOR>Douglas Adams</AUTHOR>

は、次の問合せのいずれを使用しても検出できます。

MDATA(author, Terry Pratchett)
MDATA(author, Douglas Adams)
MDATA(author, Terry Pratchett) and MDATA(author, Douglas Adams)

次の問合せでは検出できません。

MDATA(author, Terry Pratchett Douglas Adams)
MDATA(author, Terry Pratchett & Douglas Adams)
MDATA(author, Pratchett Douglas)

関連項目

「ADD_MDATA」および「ADD_MDATA_SECTION」、また『Oracle Textアプリケーション開発者ガイド』の「セクション検索」も参照してください。


MINUS(-)

不要なノイズ語句が含まれているドキュメントのスコアを低くするには、MINUS演算子を使用します。MINUSは、特定の問合せ語句が含まれているドキュメントを検索し、2番目の問合せ語句が存在するドキュメントのランクを低くする場合に有効です。

構文

構文 説明
term1-term2

term1 minus term2

term1が含まれているドキュメントを戻します。term1のスコアからterm2のスコアを引いて、スコアを計算します。正数のスコアを持つドキュメントのみが戻されます。

たとえばcarsという語句についての問合せが、常にFord carsについてのドキュメントに高いスコアを戻すとします。次の式を使用して、Fordに関するドキュメントのスコアを低くできます。

'cars - Ford'

この式は語句carsを含むドキュメントを戻しますが、Fordも含まれている可能性があります。ただし、戻されたドキュメントのスコアは、carsのスコアからFordのスコアを差し引いた値になります。

関連項目


関連項目

「NOT(~)」


NARROWER TERM(NT、NTG、NTP、NTI)

指定された問合せ語句の下位語としてシソーラスで定義されているすべての語句が含まれるように問合せを拡張するには、NARROWER TERM演算子(NTNTGNTPNTI)を使用します。また、下位語の下位語、さらにその下位語、というようにシソーラス階層を下がるように問合せを拡張できます。

構文

構文 説明
NT(term[(qualifier)][,level][,thes]) シソーラスでtermに対する下位語として定義されたすべての下位レベルの語句が含まれるように、問合せを拡張します。
NTG(term[(qualifier)][,level][,thes]) シソーラスでtermに対する下位汎用語として定義されたすべての下位レベルの語句が含まれるように、問合せを拡張します。
NTP(term[(qualifier)][,level][,thes]) シソーラスでtermに対する下位部分語として定義されたすべての下位レベルの語句が含まれるように、問合せを拡張します。
NTI(term[(qualifier)][,level][,thes]) シソーラスでtermに対する下位インスタンス語として定義されたすべての下位レベルの語句が含まれるように、問合せを拡張します。

term

NARROWER TERM演算子にオペランドを指定します。termは、thesによって指定されたシソーラスで、語句に対して定義された下位語のエントリが含まれるように拡張されます。この拡張に含まれる下位語の数は、levelの値によって決定されます。拡張演算子はterm引数に指定できません。

qualifier

termthesの同じ階層分岐で2つ以上のノードに現れる同形異義語(同じスペルで複数の意味を持つワードまたは句)の場合は、termに修飾子を指定します。

NARROWER TERM問合せで同形異義語に修飾子が指定されていない場合は、すべての同形異義語の下位語が含まれるように問合せが拡張されます。

level

指定された語句に対する下位語を戻すために、シソーラス階層内を横断するレベル数を指定します。たとえば、NTのレベル1問合せは、下位語が定義されている場合、指定した問合せ語句のすべての下位語エントリを戻します。レベル2問合せは、指定した問合せ語句の下位語エントリ、さらにそれらの下位語の下位語エントリを戻します。

level引数はオプションで、デフォルト値は(1)です。level引数に0(ゼロ)または負の値を設定すると、元の問合せ語句のみを戻します。

thes

指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。 thes引数はオプションで、デフォルト値はDEFAULTです。このデフォルト値を使用する場合は、シソーラス表にDEFAULTという名前のシソーラスが存在している必要があります。


注意:

thesを指定する場合は、levelも指定する必要があります。

次の問合せは、catという問合せ語句、またはDEFAULTシソーラスでcatNT語として定義された語句のいずれかが含まれているすべてのドキュメントを戻します。

'NT(cat)'

シソーラス名を指定する場合は、次のようにlevelも指定する必要があります。

'NT(cat, 2, mythes)'

次の問合せは、fairy taleという問合せ語句、またはDEFAULTシソーラスでfairy taleの下位インスタンス語として定義された語句のいずれかが含まれているすべてのドキュメントを戻します。

'NTI(fairy tale)'

cinderellaという語句およびsnow whiteという語句が、fairy taleに対する下位語インスタンスとして定義されている場合、Oracle Textは、fairy tale、cinderellaまたはsnow whiteが含まれているドキュメントを戻します。

注意

シソーラスの各階層は個別の分離されたブランチを表し、4つのNARROWER TERM演算子に対応します。NARROWER TERM問合せでは、Oracle Textは指定されたNARROWER TERM演算子に対応するブランチを使用してその問合せを拡張するのみです。

関連項目

CTX_THESパッケージのプロシージャを使用して、シソーラスをブラウズできます。


関連項目

シソーラスの下位語のブラウズは、第12章「CTX_THESパッケージ」の「CTX_THES.NT」を参照してください。


NEAR(;)

2つ以上の問合せ語句の出現位置の近さを基準にしてスコアを戻すには、NEAR演算子を使用します。Oracle Textにより、ドキュメント内で互いに近接した語句には高いスコアが、互いに離れた語句には低いスコアが戻されます。


注意:

NEAR演算子はワード問合せのみで機能します。ABOUT問合せではNEARを使用できません。

構文

構文
NEAR((word1, word2,..., wordn) [, max_span [, order]])

下位互換性のための構文: word1 ; word2


word1-n

問合せ語句をカンマで区切って指定します。問合せ語句は、1つのワードまたは句の場合もあり、他の問合せ演算子を使用する場合もあります(「NEARおよびその他の演算子」を参照)。

max_span

オプションで、最大クランプのサイズを指定します。デフォルト値は100です。100より大きい数を指定すると、Oracle Textからエラーが戻されます。

クランプはすべての問合せ語句が出現する最小のワード・グループです。すべてのクランプは問合せ語句で始まり、問合せ語句で終わります。

2つの問合せ語句を持つNEAR問合せでは、max_spanがこの2つの語句間の最大距離になります。たとえば、dogcatの6ワード以内にある場合、dogおよびcatについて問い合せるには、次の問合せを発行します。

'near((dog, cat), 6)'
order

Oracle Textを使用して、指定した順序で語句を検索するには、TRUEを指定します。デフォルトはFALSEです。

たとえば、最大クランプ・サイズを20にして、mondaytuesdayおよびwednesdayの順でワード検索をする場合は、次の問合せを発行します。

'near((monday, tuesday, wednesday), 20, TRUE)'

注意:

orderを指定するには、常にmax_spanパラメータに数を指定する必要があります。

orderフラグ設定が異なる同じ問合せ式を使用すると、Oracle Textから同じドキュメントに対して異なるスコアが戻される場合があります。たとえば、次の問合せを発行すると、Oracle Textから同じドキュメントに対して異なるスコアが戻されます。

'near((dog, cat), 50, FALSE)'
'near((dog, cat), 50, TRUE)'

NEARスコア付け

NEAR演算子のスコア付けは、語句の出現頻度および語句の出現位置の近さを組み合せて行われます。問合せに適合する各ドキュメントに対して、ドキュメント内のクランプの数に比例し、そのクランプの平均サイズに反比例する1〜100までのスコアがOracle Textにより戻されます。小さなクランプは問合せ語句が近接していることを示すため、ドキュメントに小さなクランプが多く存在するほど高いスコアになります。

問合せ語句の数もスコアに影響を与えます。多くの語句(7個程度)で問い合せると、少ない語句(2個程度)で問い合せたときよりも、通常100のスコアを得るために必要なドキュメントのクランプ数が少なくなります。

クランプはすべての問合せ語句が出現する最小のワード・グループです。すべてのクランプは問合せ語句で始まり、問合せ語句で終わります。この項で説明するとおり、クランプ・サイズはmax_spanパラメータで定義できます。

クランプのサイズに問合せ語句そのものは含まれません。そのため、問合せNEAR((DOG, CAT), 1)dog catdog ate catは一致しますが、dog sat on catは一致しません。

NEARおよびその他の演算子

ANDORなど他の演算子とともにNEAR演算子を使用できます。スコアは通常の方法で計算されます。

たとえば、語句lionおよびtigerが互いに10ワード以内のところに位置する場合、語句tigerlionおよびcheetahを含むすべてのドキュメントを検索するには、次の問合せを発行します。

'near((lion, tiger), 10) AND cheetah'

戻される各ドキュメントのスコアは、NEAR演算子および語句cheetahのうち低い方のスコアになります。

EQUIVALENCE演算子を使用して、NEAR問合せの1つの問合せ語句を置換することもできます。

'near((stock crash, Japan=Korea), 20)'

この問合せは、JapanまたはKoreaの20ワード以内に語句stock crashを含むすべてのドキュメントを検索します。

次の演算子もNEARおよび;とともに使用できます。

下位互換性のあるNEAR構文

以前のOracle Textリリースの構文を使用してNEAR問合せを記述できます。たとえば、liontigerの近くに出現するすべてのドキュメントを検索するには、次のように記述します。

'lion near tiger'

または、セミコロンを使用して次のようにも記述できます。

'lion;tiger'

この問合せは次の問合せと同等です。

'near((lion, tiger), 100, FALSE)'

注意:

NEAR演算子の構文のみが下位互換性を持ちます。この例では、戻されるスコアはこの項で説明したクランプ方法を使用して計算されます。

NEAR演算子でのハイライト表示

ハイライト表示を使用し、問合せにNEAR演算子が含まれている場合は、出現位置の近さの要件を満たすすべての語句がハイライト表示されます。ハイライト表示される語句は、1つのワードまたは句の場合もあります。

たとえば、次のようなテキストを含むドキュメントがあるとします。

Chocolate and vanilla are my favorite ice cream flavors. I like chocolate served
in a waffle cone, and vanilla served in a cup with carmel syrup.

問合せがnear((chocolate, vanilla)), 100, FALSE)である場合、次の語句がハイライト表示されます。

<<Chocolate>> and <<vanilla>> are my favorite ice cream flavors. I like
<<chocolate>> served in a waffle cone, and <<vanilla>> served in a cup with
caramel syrup.

ただし、問合せがnear((chocolate, vanilla)), 4, FALSE)である場合、次の語句のみがハイライト表示されます。

<<Chocolate>> and <<vanilla>> are my favorite ice cream flavors. I like
chocolate served in a waffle cone, and vanilla served in a cup with carmel syrup.

関連項目

ハイライト表示に使用できるプロシージャの詳細は、第8章「CTX_DOCパッケージ」を参照してください。

セクション検索およびNEAR

次のように、WITHIN演算子とともにNEAR演算子を使用して、セクションを検索できます。

'near((dog, cat), 10) WITHIN Headings'

このような式を評価する場合は、Oracle Textにより、指定されたセクション内全体にあるクランプが検索されます。

この例では、セクションHeadings内全体にあるdogおよびcatを含むクランプのみがカウントされます。つまり、語句dogHeadings内にあり、語句catdogから5ワードのところにあるがHeadingsの外にある場合、これら2つのワードは式を満たさず、カウントされません。


NOT(~)

1つの問合せ語句が含まれているが、もう1つの問合せ語句が含まれていないドキュメントを検索するには、NOT演算子(~)を使用します。

構文

構文 説明
term1~term2

term1 not term2

term1が含まれるが、term2が含まれていないドキュメントを戻します。

たとえば、animalsという語句が含まれていてdogsという語句は含まれていないドキュメントを取得するには、次の式を使用します。

'animals ~ dogs'

同様に、transportationという語句が含まれていて、automobilesまたはtrainsという語句は含まれていないドキュメントを取得するには、次の式を使用します。

'transportation not (automobiles or trains)'

注意:

NOT演算子は、他の論理演算子が作成したスコアには影響を与えません。

関連項目


関連項目

「MINUS(-)」


OR(|)

問合せ語句が1つ以上含まれるドキュメントを検索するには、OR演算子を使用します。

構文

構文 説明
term1|term2

term1 or term2

term1またはterm2を含むドキュメントを戻します。そのオペランドの最大スコアを戻します。少なくともどちらか1つの問合せ語句が存在する必要があり、スコアの高い方が選択されます。

たとえば、catsまたはdogsという語句が含まれているドキュメントを取得するには、次の式のいずれかを使用します。

'cats | dogs'
'cats OR dogs'

スコア付け

OR問合せでは、問合せ語句の最も高いスコアが戻ります。この例では、ドキュメント内でのcatsおよびdogsのスコアが、それぞれ30および40の場合、ドキュメントのスコアは40になります。

関連項目


関連項目

OR演算子は、いずれかの問合せ語句が含まれるドキュメントを戻しますが、AND演算子は、すべての問合せ語句が含まれるドキュメントを戻します。「AND(&)」を参照してください。


PREFERRED TERM(PT)

問合せ内の問合せ語句を、その問合せ語句の優先語としてシソーラスで定義された語句に置換するには、PREFERRED TERM演算子(PT)を使用します。

構文

構文 説明
PT(term[,thes]) 問合せで指定されたワードをtermに対する優先語で置換します。

term

PREFERRED TERM演算子にオペランドを指定します。termは、指定されたシソーラスで優先語として定義されている語句に置換されます。ただし、termに対してPTエントリが定義されていない場合は、問合せ式でtermは置換されず、termが拡張の結果となります。

拡張演算子はterm引数に指定できません。

thes

指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数はオプションで、デフォルト値はDEFAULTです。したがって、シソーラス演算子を使用するには、DEFAULTという名前のシソーラスがシソーラス表に存在している必要があります。

automobileはシソーラスにcarという優先語があるとします。automobilePT問合せを行うと、carというワードが含まれているすべてのドキュメントが戻ります。automobileというワードが含まれているドキュメントは戻りません。

関連項目

CTX_THESパッケージのプロシージャを使用して、シソーラスをブラウズできます。


関連項目

シソーラスの優先語のブラウズについては、第12章「CTX_THESパッケージ」の「CTX_THES.PT」を参照してください。


RELATED TERM(RT)

問合せ語句の関連語としてシソーラスに定義されたすべての語句が含まれるように問合せを拡張するには、RELATED TERM演算子(RT)を使用します。

構文

構文 説明
RT(term[,thes]) シソーラスでtermに対する関連語として定義されたすべての語句が含まれるように、問合せを拡張します。

term

RELATED TERM演算子にオペランドを指定します。term、およびthestermに対して定義されたすべての関連エントリが含まれるように、termが拡張されます。

拡張演算子はterm引数に指定できません。

thes

指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数はオプションで、デフォルト値はDEFAULTです。したがって、シソーラス演算子を使用するには、DEFAULTという名前のシソーラスがシソーラス表に存在している必要があります。

dogという語句には、wolfという関連語があるとします。dogに対してRT問合せを行うと、dogおよびwolfというワードを含むすべてのドキュメントが戻ります。

関連項目

CTX_THESパッケージのプロシージャを使用して、シソーラスをブラウズできます。


関連項目

シソーラスの関連語のブラウズについては、第12章「CTX_THESパッケージ」の「CTX_THES.RT」を参照してください。


SOUNDEX(!)

発音が類似したワード(他のワードと似た発音のワード)が含まれるように問合せを拡張するには、SOUNDEX(!)演算子を使用します。この演算子を使用すると、スペルは異なっても英語では同じ発音であるワードを比較できます。

構文

構文 説明
!term 発音が同じすべての語句が、指定した問合せ語句に含まれるように問合せを拡張します(英語のテキストのみ)。

SELECT ID, COMMENT FROM EMP_RESUME
WHERE CONTAINS (COMMENT, '!SMYTHE') > 0 ;

ID COMMENT
-- ------------
23 Smith is a hard worker who..

言語

SOUNDEXは、7ビットのキャラクタ・セットを使用する英語などの言語に最適です。8ビットのキャラクタ・セットを使用する多くの西ヨーロッパの言語でも、多少効果は落ちますが使用できます。

テキスト列に基本文字変換が指定され、問合せ式にSOUNDEX演算子が指定されている場合は、Oracle Textにより問合せの基本文字書式が処理されます。


STEM($)

問合せ語句と同じ語根を持つ語を検索するには、STEM($)演算子を使用します。

BASIC_LEXERを使用して使用言語を索引付けする場合、index_stems属性を使用してステミングのパフォーマンスを改善できます。

Oracle Textのステマーは、Xerox社のXSoft Divisionからライセンスを受けています。この機能は、BASIC_LEXERで英語、フランス語、スペイン語、イタリア語、ドイツ語およびオランダ語をサポートしています。

日本語のステミングはJAPANESE_LEXERでサポートされています。

BASIC_WORDLISTワードリスト・プリファレンスを使用して、ステミング言語を指定できます。

構文

構文 説明
$term 同じ語幹または語根を持つすべての語句が、指定した問合せ語句に含まれるように問合せを拡張します。

入力 拡張結果
$scream scream screaming screamed
$distinguish distinguish distinguished distinguishes
$guitars guitars guitar
$commit commit committed
$cat cat cats
$sing sang sung sing

ストップワードによる動作

STEMがストップワードとして指定したワードを戻す場合、そのストップワードは問合せの中には含まれず、CTX_QUERY.HIGHLIGHTまたはCTX_QUERY.MARKUPでハイライト表示もされません。

関連項目


関連項目

STEM演算子をBASIC_LEXERで使用可能にする方法の詳細は、第2章「Oracle Text索引付けの要素」「BASIC_LEXER」を参照してください。


ストアド・クエリー式(SQE)

CTX_QUERY.STORE_SQEプロシージャで作成されたストアド・クエリー式をコールするには、SQE演算子を使用します。

ストアド・クエリー式は、ドキュメントの編成および分類用の事前定義済のBINを作成する場合、または最初の問合せが1つ以上の追加問合せによって詳細化されている反復問合せを実行する場合に使用できます。

構文

構文 説明
SQE(SQE_name) ストアド・クエリー式SQE_nameの結果を戻します。

disastersという名前のSQEを作成するには、CTX_QUERY.STORE_SQEを次のように使用します。

begin
ctx_query.store_sqe('disasters', 'hurricane or earthquake or blizzard');
end;

このストアド・クエリー式は、hurricaneearthquakeまたはblizzardのいずれかを含むすべてのドキュメントを戻します。

これで、SQEは次のような問合せ式内でコールできます。

SELECT SCORE(1), docid FROM news
WHERE CONTAINS(resume, 'sqe(disasters)', 1)> 0
ORDER BY SCORE(1);

SYNONYM(SYN)

指定した語句のシノニムとしてシソーラスに定義されているすべての語句が含まれるように問合せを拡張するには、SYNONYM演算子(SYN)を使用します。

構文

構文 説明
SYN(term[,thes]) シソーラスでtermに対するシノニムとして定義されたすべての語句が含まれるように、問合せを拡張します。

term

SYNONYM演算子にオペランドを指定します。term、およびthestermに対して定義されたすべてのシノニムが含まれるように、termが拡張されます。

拡張演算子はterm引数に指定できません。

thes

指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数はオプションで、デフォルト値はDEFAULTです。このデフォルト値を使用する場合は、シソーラス表にDEFAULTという名前のシソーラスが存在している必要があります。

次の問合せ式は、dogという問合せ語句、またはDEFAULTシソーラスでdogのシノニムとして定義された語句が含まれているすべてのドキュメントを戻します。

'SYN(dog)'

SYNONYM演算子内のコンパウンド句

シノニム問合せで問合せ語句のコンパウンド句の拡張問合せは、AND接続詞によって戻ります。

たとえば、temperature + measurement + instrumentsというコンパウンド句は、thermometerという問合せ語句のシノニムとしてシソーラスに定義されています。thermometerのシノニム問合せは次のように拡張されます。

{thermometer} OR ({temperature}&{measurement}&{instruments})

関連項目

CTX_THESパッケージのプロシージャを使用して、シソーラスをブラウズできます。


関連項目

シソーラスのシノニム語句のブラウズは、第12章「CTX_THESパッケージ」の「CTX_THES.SYN」を参照してください。


THRESHOLD(>)

THRESHOLD演算子(>)は、次の2通りの方法で使用します。

式レベルのTHRESHOLD演算子は、しきい値の数値を下回るスコアのドキュメントを結果セットから排除します。

問合せ語句レベルのTHRESHOLD値演算子は、ある語句がドキュメント内でどのようにスコアを出すかに基づいてドキュメントを選択します。

構文

構文 説明
expression>n

term>n

結果セットでスコアがしきい値nを超えるドキュメントのみを戻します。

式内で、スコアが最低nの問合せ語句が含まれているドキュメントを戻します。


式レベルで、relational databasesが含まれているドキュメントを検索し、スコアが75よりも大きいドキュメントのみを戻すには、次の式を使用します。

'relational databases > 75'

問合せ語句レベルで、lionのスコアが30以上で、さらにtigerが含まれているドキュメントを選択するには、次の式を使用します。

'(lion > 30) and tiger'

TRANSLATION TERM(TR)

定義されたすべての外国語の等価語句が含まれるように問合せを拡張するには、TRANSLATION TERM(TR)演算子を使用します。

構文

構文 説明
TR(term[, lang, [thes]]) termに対して定義されたすべての外国語の等価語が含まれるように、termを拡張します。

term

TRANSLATION TERM演算子にオペランドを指定します。termは、thestermに対して定義されたすべての外国語エントリが含まれるように拡張されます。拡張演算子はterm引数に指定できません。

lang

オプションで、拡張によってどの外国語の等価語を戻すかを指定します。指定する言語はthesに定義されている言語と一致している必要があります。(1回に指定できる言語は1つのみです。)このパラメータを省略、またはALLを指定すると、定義されたすべての外国語の語句を使用するように拡張されます。

thes

オプションで、指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数のデフォルト値はDEFAULTです。したがって、シソーラス演算子を使用するには、DEFAULTという名前のシソーラスがシソーラス表に存在している必要があります。


注意:

thesを指定する場合は、langも指定する必要があります。

catに対して次のエントリを持つシソーラスMY_THESがあるとします。

cat
  SPANISH: gato
  FRENCH:  chat

catおよびcatのスペイン語訳を含むすべてのドキュメントを検索するには、次の問合せを発行します。

'tr(cat, spanish, my_thes)'

この問合せは次のように拡張されます。

'{cat}|{gato}'

関連項目

CTX_THESパッケージのプロシージャを使用して、シソーラスをブラウズできます。


関連項目

シソーラスの関連語のブラウズは、第12章「CTX_THESパッケージ」の「CTX_THES.TR」を参照してください。


TRANSLATION TERM SYNONYM(TRSYN)

問合せ語句に対して定義されたすべての外国語の等価語、問合せ語句のシノニム、およびそのシノニムの外国語の等価語が含まれるように問合せを拡張するには、TRSYN演算子を使用します。

構文

構文 説明
TRSYN(term[, lang, [thes]]) termの外国語の等価語、termのシノニム、およびそのシノニムの外国語の等価語が含まれるように、termを拡張します。

term

この演算子にオペランドを指定します。termは、thestermに対して定義されたすべての外国語エントリが含まれるように拡張されます。拡張演算子はterm引数に指定できません。

lang

オプションで、拡張によってどの外国語の等価語を戻すかを指定します。指定する言語はthesに定義されている言語と一致している必要があります。このパラメータを省略すると、定義されたすべての外国語の語句を使用するように拡張されます。

thes

オプションで、指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数のデフォルト値はDEFAULTです。したがって、シソーラス演算子を使用するには、DEFAULTという名前のシソーラスがシソーラス表に存在している必要があります。


注意:

thesを指定する場合は、langも指定する必要があります。

catに対して次のエントリを持つシソーラスMY_THESがあるとします。

cat
  SPANISH: gato
  FRENCH:  chat
  SYN lion
    SPANISH: leon

catcatのスペイン語での等価語、catのシノニム、およびlionのスペイン語での等価語を含むすべてのドキュメントを検索するには、次の問合せを発行します。

'trsyn(cat, spanish, my_thes)'

この問合せは次のように拡張されます。

'{cat}|{gato}|{lion}|{leon}'

関連項目

CTX_THESパッケージのプロシージャを使用して、シソーラスをブラウズできます。


関連項目

シソーラスの訳語およびシノニム語句のブラウズについては、第12章「CTX_THESパッケージ」の「CTX_THES.TRSYN」を参照してください。


TOP TERM(TT)

問合せ語句を、シソーラスの標準階層内(上位語[BT]、下位語[NT])でその問合せ語句について定義されている最上位語と置換するには、問合せ内でTOP TERM演算子(TT)を使用します。最上位語は、問合せ語句に関連する、概念的に最上位の語句です。たとえば、シソーラスでは次のように階層が定義されます。

DOG
   BT1 CANINE
     BT2 MAMMAL
       BT3 VERTEBRATE
         BT4 ANIMAL

このシソーラスにおけるdogの最上位語はanimalです。

汎用階層(BTGNTG)、部分階層(BTPNTP)およびインスタンス(BTINTI)階層内の最上位語は戻されません。

構文

構文 説明
TT(term[,thes]) 問合せで指定されたワードを、termに対する標準的な階層(BTNT)での最上位語で置換します。

term

TOP TERM演算子にオペランドを指定します。termは、指定されたシソーラスで最上位語として定義されている語句に置換されます。ただし、termに対してTTエントリが定義されていない場合は、問合せ式でtermは置換されず、termが拡張の結果となります。

拡張演算子はterm引数に指定できません。

thes

指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数はオプションで、デフォルト値はDEFAULTです。このデフォルト値を使用する場合は、シソーラス表にDEFAULTという名前のシソーラスが存在している必要があります。

dogという問合せ語句には、シソーラスの標準階層内にanimalという最上位語があるとします。dogTT問合せは、animalという句が含まれているすべてのドキュメントを戻します。dogというワードが含まれているドキュメントは戻しません。

関連項目

CTX_THESパッケージのプロシージャを使用して、シソーラスをブラウズできます。


関連項目

シソーラスの最上位語のブラウズについては、「CTX_THES.TT」を参照してください。


WEIGHT(*)

WEIGHT演算子は、指定した係数をスコアに掛けます。積の最高値は100です。たとえば、問合せcat, dog*2は、catのスコアとdogのスコアの2倍を合計します。スコアが100を超える場合、最高は100になります。

複数の問合せ語句が含まれている式では、WEIGHT演算子を使用して問合せ語句の相対的なスコアを調整します。1より小さい数とWEIGHT演算子を使用すると、問合せ語句のスコアを減らすことができます。1より大きく10より小さい数とWEIGHT演算子を使用すると、問合せ語句のスコアを増やすことができます。

WEIGHT演算子は、式に複数の問合せ語句があるACCUMulate(,)問合せ、AND(&)問合せまたはOR(|)問合せで便利です。個々の語句に重みを付けないと、出現回数の最も多い問合せ語句をスコアから判断することができません。語句の重み付けにより、語句のスコアを個別に変更でき、関心度の高い語句がドキュメント全体のランク付けに高く反映されるようにできます。

構文

構文 説明
term*n termが含まれているドキュメントを戻します。termのロー・スコアにnを掛けてスコアを計算します。nは、0.1〜10の数値です。

スポーツ記事の収集がある場合を考えます。サッカー(soccer)の記事のうち、特にブラジルのサッカー(Brazilian soccer)に関心があるとします。soccer or Brazilで通常の問合せをすると、USサッカーに関する多くの記事が高いランクで戻ります。ブラジルのサッカーについての記事のランクを上げるには、次の問合せを発行します。

'soccer or Brazil*3'

表3-3は、WEIGHT演算子によって、サッカーの情報が含まれている3つの架空のドキュメントA、BおよびCのランクが変更できる様子を示しています。表の列は、3つのドキュメントでの異なる4つの問合せ式の合計スコアを示します。

表3-3 スコア・サンプル


soccer Brazil soccer or Brazil soccer or Brazil*3
A 20 10 20 30
B 10 30 30 90
C 50 20 50 60

問合せsoccer or Brazilを含む3列目のスコアが、最も高いスコア付けを行う語句のスコアです。問合せsoccer or Brazil*3を含む4列目のスコアは、1列目のsoccerのスコア、およびBrazilのスコアの3倍(Brazil*3)のスコアのうち、大きい方のスコアです。

最初の問合せsoccer or Brazilでは、ドキュメントはC、B、Aの順にランク付けされます。問合せsoccer or Brazil*3では、ドキュメントはB、C、Aという優先順にランク付けされます。

複数の語句に重み付けすることもできます。Brazil OR (soccer AND Brazil)*3の問合せでは、soccerおよびBrazilが両方とも含まれるドキュメントの相対的なスコアが高くなります。


ワイルド・カード(% _)

問合せ式でワイルド・カード文字を使用すると、ワード検索をパターン検索に拡張できます。次のワイルド・カード文字があります。

ワイルド・カード文字 説明
% ワールド・カードとしてのパーセント記号は、検索語句の任意の位置で何回でも使用できます。検索語句は拡張され、語句の同等化リストになります。リストは、パーセント文字の位置に文字が0以上存在する、ワイルド・カード語句に一致する索引内のすべての語句から構成されます。
_ ワイルド・カードとしてのアンダースコアは、その位置に任意の1文字が現れることを示します。

エスケープされないワイルド・カード文字が含まれる、1つの問合せ内のすべてのワードのワイルド・カード拡張の合計数は、BASIC_WORDLIST属性のWILDCARD_MAXTERMSで指定された拡張の最大数を超えないようにしてください。詳細は、「BASIC_WORDLIST」を参照してください。


注意:

ワイルド・カード式によってストップワードに変換された場合、ストップワードは問合せの中には含まれず、CTX_DOC.HIGHLIGHTまたはCTX_DOC.MARKUPでハイライト表示もされません。

右側切捨て問合せ

右側切捨てでは、検索文字列の右側にワイルド・カードが置かれます。

たとえば、次の問合せ式では、パターンscalで始まるすべての語句を検索します。

'scal%'

左側切捨て問合せおよび左右切捨て問合せ

左側切捨てでは、検索文字列の左側にワイルド・カードが置かれます。

kingwingsingなどのワードを検索するには、次の問合せを記述します。

'_ing'

ingで終わるすべてのワードについては、次の問合せを発行します。

'%ing'

また、左側切捨て検索および右側切捨て検索を組み合せて、左右切捨て検索を作成できます。次の問合せでは、サブストリング%benz%を含むワードのあるすべてのドキュメントを検索します。

'%benz%'

ワイルド・カード問合せのパフォーマンス改善

サブストリングまたはプリフィックス索引を追加すると、ワイルド・カード問合せのパフォーマンスを改善できます。

ワイルド・カード問合せが左側切捨ておよび左右切捨ての場合、サブストリング索引を作成すると、問合せパフォーマンスが向上します。サブストリング索引によって、%ed_ingまたは%benz%などの、あらゆる種類の左側切捨てワイルド・カード検索の問合せパフォーマンスが向上します。

ワイルド・カード問合せが右側切捨ての場合は、プリフィックス索引を作成すると、パフォーマンスが向上します。プリフィックス索引によって、to%などのワイルド・カード検索の問合せパフォーマンスが向上します。


関連項目

サブストリングおよびプリフィックス索引の作成の詳細は、第2章「BASIC_WORDLIST」を参照してください。


WITHIN

WITHIN演算子を使用して、問合せをドキュメントのセクションに絞り込むことができます。ドキュメントのセクションは次のいずれかです。

構文

構文 説明
expression WITHIN section 事前定義済のゾーン、フィールドまたは属性section内でexpressionを検索します。

セクションがゾーンの場合、expressionは、セクションがゾーンまたは特殊セクションであるWITHIN演算子(ネストされたWITHIN)を1つ以上含むことができます。

セクションがフィールドまたは属性セクションの場合、式は他のWITHIN演算子を含むことができません。

expression WITHIN SENTENCE 文中にexpressionを含むドキュメントを検索します。expressionにはANDまたはNOT問合せを指定します。

expressionは、セクションがゾーンまたは特殊セクションであるWITHIN演算子(ネストされたWITHIN)を1つ以上含むことができます。

expression WITHIN PARAGRAPH 段落中にexpressionを含むドキュメントを検索します。expressionにはANDまたはNOT問合せを指定します。

expressionは、セクションがゾーンまたは特殊セクションであるWITHIN演算子(ネストされたWITHIN)を1つ以上含むことができます。


WITHINの制限事項

WITHIN演算子には、次の制限事項があります。

WITHIN演算子の例

ゾーン・セクション内の問合せ

セクションHeadings内でSan Franciscoという語句が含まれているすべてのドキュメントを検索するには、次のような問合せを記述します。

'San Francisco WITHIN Headings'

セクションHeadings内にsailingおよびSan Franciscoという語句が含まれているすべてのドキュメントを検索するには、次の2つの方法のいずれかで問合せを記述します。

'(San Francisco WITHIN Headings) and sailing'

'sailing and San Francisco WITHIN Headings'

WITHINと複合式

同じセクションHeadings内にdogおよびcatという語句が含まれているすべてのドキュメントを検索するには、次の問合せを記述します。

'(dog and cat) WITHIN Headings'

この問合せと次の問合せは、論理的に異なります。

'dog WITHIN Headings and cat WITHIN Headings'

この問合せは、dogおよびcatという語句がHeadingsセクションにある場合に、dogおよびcatを含むすべてのドキュメントを、これらの語句が同じHeadingsセクションに出現しているか異なるセクションに出現しているかに関係なく、検索します。

WITHINとNEAR

Headingsセクション内で、dogcatの近くにあるすべてのドキュメントを検索するには、次の問合せを記述します。

'dog near cat WITHIN Headings'

注意:

NEAR演算子はWITHIN演算子よりも優先順位が高いため、この例では中カッコは必要ありません。この問合せは、(dog near cat) WITHIN Headingsと同等です。

ネストされたWITHIN問合せ

WITHIN演算子をネストすると、ゾーン・セクション内のゾーン・セクションを検索できます。

たとえば、あるドキュメント・セットのゾーン・セクションBOOK内に、ゾーン・セクションAUTHORがネストされているとします。ネストされたWITHIN問合せを次のように記述すると、BOOKセクションのAUTHORセクションに出現するscottをすべて検索できます。

'(scott WITHIN AUTHOR) WITHIN BOOK'

フィールド・セクション内の問合せ

フィールド・セクション内の問合せの構文は、ゾーン・セクション内の問合せと同じです。前述の「ゾーン・セクション内の問合せ」で示したほとんどの例の構文は、フィールド・セクションに適用されます。

ただし、フィールド・セクションの動作は、次の点でゾーン・セクションとは異なります。

次に、これらの違いについて説明します。

フィールド・セクションのvisibleフラグ

フィールド・セクションが、CTX_DDL.ADD_FIELD_SECTIONFALSEと設定されたvisibleフラグで作成されている場合、フィールド・セクション内のテキストは、WITHIN演算子を使用してのみ問合せできます。

たとえば、TITLEフィールド・セクションのvisibleフラグがFALSEに設定されているとします。この場合、WITHIN演算子のないdogの問合せは、次の内容を含むドキュメントを検索しません。

<TITLE>The dog</TITLE> I like my pet.

このようなドキュメントを検索するには、次のようにWITHIN演算子を使用します。

'dog WITHIN TITLE'

また、TITLECTX_DDL.ADD_FIELD_SECTIONでフィールド・セクションとして定義するときは、visibleフラグをTRUEに設定できます。


関連項目

フィールド・セクション作成の詳細は、第7章「CTX_DDLパッケージ」「ADD_FIELD_SECTION」を参照してください。

繰返しフィールド・セクション

WITHIN問合せは、ドキュメント内の繰り返されたフィールド・セクションを識別できません。たとえば、繰返しセクション<author>を持つドキュメントがあるとします。

<author> Charles Dickens </author>
<author> Martin Luther King </author>

<author>がフィールド・セクションとして定義されているとすると、(charles and martin) within authorのような問合せは、これらのワードが別々のタグに出現しても、そのドキュメントを戻します。

WITHIN問合せに繰返しセクションを識別させるには、セクションをゾーン・セクションとして定義します。

ネストされたフィールド・セクション

ネストされたWITHIN問合せは、フィールド・セクションで発行できません。これを行うと、エラーが戻ります。

文または段落内の問合せ

同じ文または段落で出現するワードの組合せを検索するには、文または段落境界内での問合せが有効です。文または段落を問い合せるには、索引付けする前に、特殊セクションをセクション・グループに追加する必要があります。これは、CTX_DDL.ADD_SPECIAL_SECTIONで行います。

同じ文にdogおよびcatを含むドキュメントを検索するには、次のように問い合せます。

'(dog and cat) WITHIN SENTENCE'

同じ段落にdogおよびcatを含むドキュメントを検索するには、次のように問い合せます。

'(dog and cat) WITHIN PARAGRAPH'

ワードdogはあるがcatはない文を含むドキュメントを検索するには、次のように問い合せます。

'(dog not cat) WITHIN SENTENCE'

属性セクション内での問合せ

セクション・グループ型としてXML_SECTION_GROUPまたはAUTO_SECTION_GROUPのいずれかで索引付けする場合、属性セクション内で問い合せることができます。

次のようなXMLドキュメントがあるとします。

<book title="Tale of Two Cities">It was the best of times.</book>

セクションtitle@bookは、属性セクションtitleになるように定義できます。これは、CTX_DLL.ADD_ATTR_SECTIONを使用して行うか、ALTER INDEXで索引付けしてから動的に行うことができます。


注意:

AUTO_SECTION_GROUPを使用してXMLドキュメントを索引付けする場合、システムは自動的に属性セクションを作成し、これらをattribute@tag形式でネーミングします。

XML_SECTION_GROUPを使用する場合、属性セクションはCTX_DDL.ADD_ATTR_SECTIONで任意にネーミングできます。


属性セクションtitle内でTaleを検索するには、次の問合せを発行します。

'Tale WITHIN title'

属性セクションの問合せに対する制約

属性セクション内の問合せには、次の制約が適用されます。

<book title="Tale of Two Cities">It was the best of times.</book>

Taleの問合せそのものは、WITHIN title@bookで修飾されていない場合は、ドキュメントにヒットしません(この動作は、visibleフラグをFALSEに設定した場合のフィールド・セクションと似ています)。

Now is the time for all good <word type="noun"> men </word> to come to the aid.

この場合、このドキュメントは、介入的な属性テキストを無視して、通常の問合せgood menにヒットします。

<book title="Tale of Two Cities">It was the best of times.</book>
<book title="Of Human Bondage">The sky broke dull and gray.</book>

bookはゾーン・セクションで、book@authorは属性セクションであるとします。次の問合せについて考えてみます。

'(Tale and Bondage) WITHIN book@author'

この問合せはドキュメントにヒットしません。これは、taleおよびbondageの出現する属性セクションbook@authorが異なるためです。

注意

セクション名

WITHIN演算子では、検索するセクション名がわかっている必要があります。定義済セクションのリストは、CTX_SECTIONSビューまたはCTX_USER_SECTIONSビューを使用して取得できます。

セクション境界

特殊セクションおよびゾーン・セクションについては、問合せの語句が、問合せを満たすためにドキュメントの特定のセクション内に出現する必要があります。フィールド・セクションにはこの要件は適用されません。

たとえば、boldがゾーン・セクションである場合、次のような問合せを考えます。

'(dog and cat) WITHIN bold'

この問合せは、次の語句を検索します。

<B>dog cat</B>

ただし、次の語句は検索しません。

<B>dog</B><B>cat</B>

これは、dogおよびcatが同じboldセクション内に存在する必要があるためです。

この動作は、特に特殊セクションに有効です。たとえば、

'(dog and cat) WITHIN sentence'

は、同じ文中にあるdogおよびcatを検索します。

一方、フィールド・セクションは、タイトル・セクションなど、繰返しのない埋込みメタデータ用です。問合せ文字列が存在する各フィールド・セクションは、異なるセクションとして区別できません。すべて同一セクション内に存在する文字列とみなされます。たとえば、次の問合せ

(dog and cat) WITHIN title

は、次のようなドキュメントを検索します。

<TITLE>dog</TITLE><TITLE>cat</TITLE>

このフィールド・セクション制限およびオーバーラップとネスト制限に対して、フィールド・セクション問合せは、特にセクションが各ドキュメントで出現する場合、または検索語句が共通の場合は、通常、ゾーン・セクション問合せよりも高速です。