この章では、CONTAINS演算子の優先順位を説明し、各演算子の説明、構文および例を示します。この章の内容は次のとおりです。
演算子の優先順位は、問合せ式のコンポーネントが評価される順序を決定します。テキスト問合せ演算子は、それぞれ独自の評価順を持つ2組の演算子に分けることができます。次に、これら2つのグループをグループ1およびグループ2として説明します。
どのような場合でも、問合せ式は演算子の優先順位に従って、左から右の順に評価されます。優先順位の高い演算子が最初に評価されます。優先順位が等しい演算子は、式の中で現れる順序に従って左から右へ適用されます。
グループ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番目の例では、ANDはORよりも優先順位が高いため、問合せはw1を含むすべてのドキュメント、およびw2とw3の両方を含むすべてのドキュメントを戻します。
2番目の例では、問合せはw1とw2の両方を含むすべてのドキュメント、およびw3を含むすべてのドキュメントを戻します。
3番目の例では、最初にFUZZY演算子がw1に適用されます。次にAND演算子が引数w3およびw4に適用され、その後OR演算子がw2およびAND演算子の結果に適用されます。最後に、w1に対するFUZZY演算子のスコアがOR演算子のスコアに加えられます。
4番目の例は、EQUIVALENCE演算子がAND演算子より優先順位が高いことを示しています。
5番目の例は、AND演算子がWITHIN演算子より優先順位が低いことを示しています。
動作概要
問合せ語句に関連するドキュメントを戻すには、ABOUT演算子を使用します。英語とフランス語では、ABOUTによって概念を問い合せることができます。これは、概念が実際に問合せに含まれていなくても可能です。たとえば、heatに対するABOUT問合せでは、temperatureという語が問合せに含まれていなくても、温度に関連するドキュメントが戻されます。
その他の言語では、ABOUTを使用すると、多くの場合は戻されるドキュメントの数が多くなり、結果のソート順序が改善される場合があります。Oracle Textはすべての言語において、ABOUT問合せの結果に対し、関連性の最も高いドキュメントが最も高いスコアとなるようにスコア付けします。
英語とフランス語での動作
英語とフランス語では、ABOUT演算子を使用して概念を問い合せます。システムは、索引のテーマ・コンポーネントの概念情報を検索します。索引にテーマ・コンポーネントを作成するには、INDEX_THEMES BASIC_LEXER属性をYESに設定します。
|
注意: 英語およびフランス語で ABOUT問合せを入力する場合、索引にテーマ・コンポーネントは必要ありません。ただし、索引にテーマ・コンポーネントがあると、ABOUT問合せの結果が最も向上します。 |
Oracle Textでは、問合せワードまたは句に関連する概念を含むドキュメントを取り出します。たとえば、CaliforniaについてのABOUT問合せを入力すると、システムによって、Californiaの都市であるLos AngelesとSan Franciscoという語句を含むドキュメントが戻されます。このABOUT問合せで戻されるドキュメントには、Californiaという語句は必ずしも含まれてはいません。
ABOUT問合せに指定したワードまたは句が、索引に格納されたテーマと完全に一致する必要はありません。Oracle Textは、索引の検索を実行する前に、ワードまたは句を正規化します。
ABOUT演算子は、CONTAINS SQL演算子およびCATSEARCH SQL演算子と併用できます。CATSEARCHの場合は、CONTEXT文法による問合せテンプレートを使用して索引テーマを問い合せる必要があります。「例」の項の「CATSEARCHによるABOUT問合せ」を参照してください。
構文
| 構文 | 説明 |
|---|---|
| about(phrase) | すべての言語において、ABOUT問合せがない同じ問合せよりも、戻される関連ドキュメント数が増加します。phraseパラメータは、1つのワード、句またはフリー・テキスト・フォーマットのワード文字列です。
英語およびフランス語では、索引付け時に 戻されたスコアは関連性スコアです。 Oracle Textでは、phraseに組み込まれた問合せ演算子は無視されます。 索引にテーマ情報のみが含まれている場合、 指定するphraseは、4000文字以内です。 |
問合せを適切な文字で表すと、ABOUT問合せの結果が最も向上します。これは、問合せの正規化が、大/小文字が区別されるナレッジ・カタログに基づくためです。
ただし、ABOUT問合せの結果を取得するために、大/小文字を正確に区別して問合せを入力する必要はありません。システムが、最適な方法で問合せを解釈します。たとえば、CISCOという文字で問合せを入力し、これがナレッジ・カタログで検出されない場合、システムでは検索用の関連概念としてCiscoを使用する場合があります。
ABOUT結果の改善
ABOUT演算子は、英語とフランス語では、提供されているナレッジ・ベースを使用して入力された句を解析します。したがって、ABOUT問合せは、ナレッジ・ベースにある概念の認識と解析に制限されています。
使用しているアプリケーション固有の用語をナレッジ・ベースに追加すると、ABOUT問合せの結果が改善されます。
制限事項
ABOUT問合せで指定する句は、4000文字以内です。
単一のワード
サッカー(soccer)についてのドキュメントを検索するには、次の構文を使用します。
'about(soccer)'
句
句を問合せ語句として入力することで、問合せをさらに詳細化し、国際大会のサッカー・ルール(soccer rules in international competition)についてのドキュメントを含めます。
'about(soccer rules in international competition)'
この英語の例では、soccer、rulesまたはinternational competitionのテーマを持つすべてのドキュメントがOracle Textにより戻されます。
通常、スコア付けの点では、これら3つのテーマをすべて含むドキュメントの方が、これらのテーマのうちの1つまたは2つのみを含むドキュメントより高いスコアを示します。
構成されていない句
次の例のように、構成されていない句で問い合せることもできます。
'about(japanese banking investments in indonesia)'
結合された問合せ
ANDやNOTなど、他の演算子を使用して、ABOUT問合せをワード問合せと結合します。たとえば、結合されたABOUTおよびワード問合せを次のように入力します。
'about(dogs) and cat'
次のように、ABOUT問合せを別のABOUT問合せと結合します。
'about(dogs) not about(labradors)'
|
注意: ABOUTは、'ABOUT (xyz) WITHIN abc'のようにWITHIN演算子と結合できません。 |
CATSEARCHによるABOUT問合せ
ABOUT問合せは、次のように、grammarにCONTEXTを設定した問合せテンプレートを使用して、CATSEARCHとともに入力します。
select pk||' ==> '||text from test
where catsearch(text,
'<query>
<textquery grammar="context">
about(California)
</textquery>
<score datatype="integer"/>
</query>','')>0
order by pk;
問合せ語句のいずれかが1つ以上含まれるドキュメントを検索するには、ACCUM演算子を使用します。この場合、戻されるドキュメントは、検出された問合せ語句の数(および頻度)に基づく累積スコアによってランク付けされます。
構文
| 構文 | 説明 |
|---|---|
| term1,term2
term1 ACCUM term2 |
term1またはterm2を含むドキュメントを戻します。語句の重みによってドキュメントをランク付けし、語句の合計の重みが最も高いドキュメントに最も高いスコアを割り当てます。 |
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の範囲のスコアとなります。これらの範囲内では、通常のスコア付けのアルゴリズムが適用されます。
複数の語句にそれぞれ異なる重みを割り当てることができます。たとえば、次の形式の問合せでは、
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(*)」も参照してください。
各問合せ語句が1つ以上含まれるドキュメントを検索するには、AND演算子を使用します。
構文
| 構文 | 説明 |
|---|---|
| term1&term2
term1 and term2 |
term1およびterm2が両方含まれているドキュメントを戻します。そのオペランドの最小スコアを戻します。すべての問合せ語句が存在する必要があり、スコアの低い方が選択されます。 |
例
blue、blackおよびredという語句が含まれているすべてのドキュメントを取得するには、次の問合せを入力します。
'blue & black & red'
AND問合せでは、各問合せ語句のスコアのうち最も低いスコアが戻ります。この例では、ドキュメント内のblue、blackおよびredの3つの語句のスコアがそれぞれ10、20および30の場合、ドキュメントのスコアは10になります。
関連項目
指定された問合せ語句の上位語としてシソーラスで定義されている語句が含まれるように問合せを拡張するには、BROADER TERM演算子(BT、BTG、BTP、BTI)を使用します。上位語の上位語、さらにその上位語、というようにシソーラス階層を上がるように問合せを拡張できます。
構文
| 構文 | 説明 |
|---|---|
| BT(term[(qualifier)][,level][,thes]) | シソーラスでtermに対する上位語として定義されたすべての語句が含まれるように、問合せを拡張します。 |
| BTG(term[(qualifier)][,level][,thes]) | シソーラスでtermに対する上位汎用語として定義されたすべての語句が含まれるように、問合せを拡張します。 |
| BTP(term[(qualifier)][,level][,thes]) | シソーラスでtermに対する上位語分語として定義されたすべての語句が含まれるように、問合せを拡張します。 |
| BTI(term[(qualifier)][,level][,thes]) | シソーラスでtermに対する上位インスタンス語として定義されたすべての語句が含まれるように、問合せを拡張します。 |
BROADER TERM演算子にオペランドを指定します。termは、thesによって指定されたシソーラスで、語句に対して定義された上位語のエントリが含まれるようにOracle Textによって拡張されます。たとえば、BTG(dog)と指定すると、拡張には、dogに対する上位汎用語として定義されている語句のみが含まれます。拡張演算子はterm引数に指定できません。
この拡張に含まれる上位語の数は、levelの値によって決定されます。
termがthesの同じ階層分岐で2つ以上のノードに現れる同形異義語(同じスペルで複数の意味を持つワードまたは句)の場合は、termに修飾子を指定します。
BROADER TERM問合せで同形異義語に修飾子が指定されていない場合は、すべての同形異義語の上位語が含まれるように問合せが拡張されます。
指定された語句に対する上位語を戻すために、シソーラス階層内を横断するレベル数を指定します。たとえば、BTのレベル1問合せは、上位語が定義されている場合、指定した問合せ語句の上位語エントリを戻します。レベル2問合せは、指定した問合せ語句の上位語エントリ、さらにそれらの上位語の上位語エントリを戻します。
level引数はオプションで、デフォルト値は(1)です。level引数に0(ゼロ)または負の値を設定すると、元の問合せ語句のみを戻します。
指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。 thes引数はオプションで、デフォルト値はDEFAULTです。このデフォルト値を使用する場合は、シソーラス表にDEFAULTという名前のシソーラスが存在している必要があります。
|
注意: thesを指定する場合は、levelも指定する必要があります。 |
例
次の問合せは、tutorialという問合せ語句、またはDEFAULTシソーラスでtutorialのBT語として定義された語句が含まれているすべてのドキュメントを戻します。
'BT(tutorial)'
シソーラス名を指定する場合は、次のようにlevelも指定する必要があります。
'BT(tutorial, 2, mythes)'
machineがcrane(building equipment)の上位語で、birdがcrane(waterfowl)の上位語であり、上位語問合せに修飾子が指定されていない場合、問合せ
BT(crane)
は、次のように拡張されます。
'{crane} or {machine} or {bird}'
上位語問合せでwaterfowlがcraneの修飾子として指定されている場合、問合せ
BT(crane{(waterfowl)})
は、次のように拡張されます。
'{crane} or {bird}'
|
注意: BROADER TERMまたはNARROWER TERM問合せで修飾子を指定する場合、修飾子およびその表記法(カッコ付け)はこの例のようにエスケープする必要があります。 |
関連項目
シソーラスは、CTX_THESパッケージのプロシージャを使用してブラウズします。
ANDおよびORの子ノードのスコアをマージする方法を定義するには、DEFINEMERGE演算子を使用します。DEFINEMERGE演算子は、オペランドにANDまたはORを使用できる演算子のオペランドとして使用できます。スコアは3つの方法でマージできます。最小値を選択する方法、最大値を選択する方法、またはすべての子ノードの平均スコアを計算する方法です。
DEFINESCOREは、DEFINEMERGEを使用する前に使用してください。
構文
DEFINEMERGE ( ( (text_query1), (text_query2), … ) , operator, merge_method )
| 構文 | 説明 |
|---|---|
| text_query1,2 ... | 検索基準を定義します。これらのパラメータには、ANDまたはOR演算子に対して有効な値を設定できます。 |
| operator | 2つのtext_queryパラメータ間の関係を定義します。 |
| merge_method | text_queryのスコアのマージ方法を定義します。有効な値: MIN、MAX、AVG、ADD。 |
例
例3-1 DEFINEMERGEおよびtext_query
次の例では、CONTAINS問合せのtext_query部分のみを示します。
'DEFINEMERGE ( ((dog), (cat)), OR, AVG)'
「dog」や「cat」の語句は、両方の語句の平均関連性スコアを、マージしたスコアとして使用して問い合せます。
'DEFINEMERGE (((dog , cat) , (blue or black)), AND, MIN )'
「dog ACCUM cat」および「blue OR black」という式は、デフォルトのスコア付けスキーマを使用し、次に、2つの最小スコアを、マージしたスコアとして使用して問い合せます。
'DEFINEMERGE( ((DEFINESCORE(dog, DISCRETE)) , (cat)), AND, MAX)'
「dog」の語句にはDISCRETEスコア付けを使用し、「cat」の語句にはデフォルトの関連性スコア付けを使用し、次に、2つの最大スコアを、マージしたスコアとして使用して問い合せます。
関連項目
語句、句または一連のEQUIVALENCE語句のスコア付け方法を定義するには、DEFINESCORE演算子を使用します。スコアリング式の定義は、事前定義済のスコアリング・コンポーネントと数値リテラルの算術式で構成できます。
DEFINEMERGEは、DEFINESCOREの後に使用できます。
構文
DEFINESCORE (query_term, scoring_expression)
問合せ語句または句。次の演算子を含む式も使用できます。
ABOUT |
EQUIV(=) |
FUZZY |
SOUNDEX(!) |
STEM($) |
ワイルド・カード(% _) |
SDATA |
MDATA |
query_termのスコア付け方法を示す算術式。このオペランドは、次のコンポーネントを含む文字列です。
算術演算子: + - * /。優先順位は、乗算および除算(*、/)が加算および減算(+、-)よりも高くなります。
グループ化演算子: ()。カッコを使用すると、算術演算子の優先順位を変更できます。
絶対値関数: ABS(n)はnの絶対値を戻します。nは数値を戻す式です。
対数関数: LOG(n)は、nの基数10の対数値を戻します。nは数値を戻す式です。
事前定義済のスコアリング・コンポーネント: 次の各スコアリング・コンポーネントは、様々な基準に応じて0〜100の値を戻します。
| 名前 | 説明 |
|---|---|
DISCRETE |
ドキュメントに語句が存在する場合はscore = 100を戻します。存在しない場合はscore = 0を戻します。 |
OCCURRENCE |
出現回数に基づいてスコア付けします。 |
RELEVANCE |
ドキュメントの関連性に基づいてスコア付けします。 |
COMPLETION |
対象範囲に基づいてスコア付けします。セクションで一致語句数とすべての語句数(ストップワード数を含む)間の比率が高いほど、ドキュメントのスコアは高くなります。COMPLETIONスコア付けが適用されるのは、WITHIN演算子を使用してゾーン・セクションを検索する場合のみです。 |
IGNORE |
語句に対するスコア付けを無視します。このコンポーネントは単独で使用する必要があります。単独で使用しない場合は、問合せで構文エラーが戻されます。問合せで唯一の語句のスコア付けがIGNOREに設定されている場合は、すべての一致ドキュメントが100の同一スコアで戻されます。 |
|
注意: 数値リテラルの場合は、SQLの数値リテラルのパターンに準拠し、倍精度浮動小数点( -3.4e38〜3.4e38)の範囲内にある数値リテラルを使用できます。 |
scoring_expression構文
<Exp> := <Exp> + <Term> | <Exp> - <Term> | <Term>
<Term> := <Term> * <Factor> | <Term> / <Factor> | <Factor>
<Factor> := <<NumericLiterals >>| DISCRETE | OCCURENCE | RELEVANCE |
COMPLETION | IGNORE | ( <Exp> ) | -<Factor> | Abs(<Exp>) | Log(<Exp>)
例
'DEFINESCORE (dog, OCCURENCE)'
dogというワードを問い合せ、出現スコアを使用して各ドキュメントをスコア付けします。スコアは整数で戻ります。
'DEFINESCORE (Labradors are big dog, RELEVANCE)'
Labradors are big dogsという句を問い合せ、関連性スコアを使用して各ドキュメントをスコア付けします。
'cat and DEFINESCORE (dog, IGNORE)'
dogおよびcatというワードを問い合せます。catのデフォルトの関連性スコアのみをドキュメント全体のスコアとして使用します。スコアは整数で戻ります。
'DEFINESCORE (dog, IGNORE)'
dogというワードを問い合せ、dogというワードが含まれたすべてのドキュメントを戻します。この結果は、すべてのドキュメントのスコアが100になるのと同じです。スコアは整数で戻ります。
'DEFINESCORE (dog, ABS (100-RELAVANCE))'
dogというワードを問い合せ、100から関連性スコアを差し引いた絶対値を使用して各ドキュメントをスコア付けします。スコアは整数で戻ります。
'cat and DEFINESCORE (dog, RELAVANCE*5 - OCCURENCE)'
構文エラー: 「事前定義済のコンポーネントが2つ使用されています。」が戻ります。
問合せテンプレートでDEFINESCOREが使用されている場合は、scoring_expressionがテンプレートで指定した値よりも優先されます。次の例では、「dog」と「cat」を問い合せ、「cat」はOCCURRENCE(COUNT)を使用してスコア付けし、「dog」はRELEVANCEに基づいてスコア付けします。
<query>
<textquery grammar="CONTEXT" lang="english">
DEFINESCORE(dog, RELEVANCE) and cat
</textquery>
<score datatype="INTEGER" algorithm="COUNT"/>
</query>
制限事項
ABOUT演算子がquery_termで使用されている場合、OCCURENECEとCOMPLETIONのスコア付けは適用できません。使用されている場合は、問合せで構文エラーが戻されます。
IGNOREスコアは、MINUS演算子の右側で使用できません。使用した場合は、構文エラーが発生します。
COMPLETIONスコアを適用できるのは、DEFINESCOREをWITHIN演算子とともに使用してゾーン・セクションを検索する場合のみです。次に例を示します。
'DEFINESCORE (dog, COMPLETION) within zonesection'
それ以外の場合は、問合せで構文エラーが戻されます。
WITHINの左側のオペランドの制限事項は、次のとおりです。
すべてのノードで、同じ事前定義済のスコアリング・コンポーネントを使用する必要があります(指定しない場合、事前定義済のスコア付けはRELEVANCEになります)。
ノードでDISCRETEまたはCOMPLETIONを使用する場合、WITHINの左側の子として使用できる演算子はANDおよびOR演算子のみです。
ノードでDISCRETEまたはCOMPLETIONを使用する場合、WITHINでは、すべてのセクション・インスタンスの最大スコアをスコアとして使用します。
ノードでRELEVANCEまたはOCCURENCEを使用する場合、WITHINでは、すべてのセクション・インスタンスのスコアの合計をスコアとして使用します。
一度にscoring_expressionで使用できる事前定義済のスコアリング・コンポーネントは1つのみです。複数の事前定義済のスコアリング・コンポーネントを使用した場合は、構文エラーが発生します。
注意
DEFINESCORE演算子、絶対値関数、対数関数および事前定義済のスコアリング・コンポーネントでは、大/小文字は区別されません。
query_termおよびscoring_expressionパラメータは必須です。
DEFINESCORE演算子の最終スコアは、0〜100の範囲に切り捨てられます。データ型がINTEGERの場合、スコアは切り上げられます。
中間データ型のスコア付けの値は倍精度浮動小数点です。したがって、その値は-3.4e38から3.4e38の範囲に制限されます。ドキュメントの中間スコア付けがこの値を超えた場合、そのスコアは切り捨てられます。整数のスコア付けが必要な場合、計算された後のそのスコアは常に切り上げられます。
DEFINESCORE演算子は、次の演算子のオペランドとして使用できます。
|
|
たとえば、次の文は有効です。
DEFINESCORE('dog', OCCURRENCE) AND DEFINESCORE('cat', RELEVANCE)
「dog」の語句は出現スコア付けを使用して問い合せ、「cat」の語句は関連性スコア付けを使用して問い合せます。
DEFINESCOREが他の演算子のパラメータとして使用されている場合は、エラーが戻されます。たとえば、次の例ではエラーが戻されます。
SYN(DEFINESCORE('cat', OCCURRENCE))
問合せテンプレートで使用されている場合は、scoring_expressionがテンプレートで指定した値よりも優先されます。たとえば、問合せ
<query>
<textquery grammar="CONTEXT" lang="english">
DEFINESCORE(dog, RELEVANCE) and cat
</textquery>
<score datatype="INTEGER" algorithm="COUNT"/>
</query>
は、「dog」と「cat」を問い合せ、「cat」はOCCURRENCE(COUNT)を使用してスコア付けし、「dog」はRELEVANCEに基づいてスコア付けします。
関連項目
問合せ時に条件を満たすワードの置換を指定するには、EQUIV演算子を使用します。
構文
| 構文 | 説明 |
|---|---|
| term1=term2
term1 equiv term2 |
term2がterm1の条件を満たす置換語であることを指定します。スコアは、両方の語句の出現回数の合計として計算されます。 |
例
次の例は、句alsatians are big dogsまたはlabradors are big dogsのいずれかを含むすべてのドキュメントを戻します。
'labradors=alsatians are big dogs'
演算子の優先順位
EQUIV演算子は、拡張演算子(FUZZY、SOUNDEX、STEM)を除く他のすべての演算子より高い優先順位を持ちます。
指定された語句に類似するスペルのワードが含まれるように問合せを拡張するには、fuzzy演算子を使用します。この拡張タイプは、ドキュメント・セットにスペル・ミスが多い場合に、より正確な結果を検索するために有効です。
fuzzy構文を使用すると、結果セットのランク付けができます。このランク付けによって、問合せワードに対する類似度が高いワードを含むドキュメントには、類似度の低いワードを含むドキュメントより高いスコアが割り当てられます。また、拡張する語句の数も制限できます。
STEM拡張とは異なり、fuzzy拡張によって生成されるワード数は、索引内のワードによって異なります。したがって、結果は、索引の内容によって大幅に変わってきます。
サポート対象言語
Oracle Textでは、英語、フランス語、ドイツ語、イタリア語、オランダ語、スペイン語、ポルトガル語、日本語、OCRおよび自動言語識別のfuzzy定義をサポートしています。
ストップワード
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を指定します。
結果に重みを付けない場合は、 |
例
次のCONTAINS問合せについて考えます。
...CONTAINS(TEXT, 'fuzzy(government, 70, 6, weight)', 1) > 0;
この問合せは、類似度スコアが70を超える、索引にあるgovernmentの最初の6つのfuzzyバリエーションに拡張されます。
さらに、結果セットのドキュメントには、governmentに対するそれぞれの類似度に応じて重み付けが行われます。governmentに最も類似しているワードが含まれているドキュメントに、最も高いスコアが割り当てられます。
不要なパラメータは、適切な数のカンマを使用してスキップします。次に例を示します。
'fuzzy(government,,,weight)'
下位互換性のための構文
前のリリースの古いfuzzy構文も引き続きサポートされています。この構文は、次のとおりです。
| パラメータ | 説明 |
|---|---|
| ?term | スペルが似ているすべての語句が、指定した問合せ語句に含まれるように問合せtermを拡張します。fuzzy演算子で処理するには、termは3文字以上である必要があります。 |
指定したセクション・パスを含むすべてのXMLドキュメントを検索するには、この演算子を使用します。また、この演算子を使用すると、セクションの等価性もテストできます。
この演算子を機能させるには、PATH_SECTION_GROUPを使用して索引を作成する必要があります。
構文
| 構文 | 説明 |
|---|---|
| HASPATH(path) | XMLドキュメント・セットを検索し、pathが存在するすべてのドキュメントに対してスコア100を戻します。親と子のパスは、/文字で区切ります。たとえば、A/B/Cと指定できます。
例を参照してください。 |
| HASPATH(A="value") | XMLドキュメント・セットを検索し、valueの内容のみ含まれている要素Aがあるすべてのドキュメントに対してスコア100を戻します。
例を参照してください。 |
HASPATHおよびINPATHでの特殊文字の使用
HASPATHおよびINPATH演算子で特殊文字を使用する場合のルールは次のとおりです。
左中カッコ({)と右中カッコ(})文字は、二重引用符で囲まれた等価オペランド内にある場合を除き、HASPATHまたはINPATH式内では使用できません。このため、HASPATH({/A/B})およびHASPATH(/A/{B})では、エラーが戻されます。ただし、HASPATH(/A[B="{author}"])は正常に解析されます。
円記号(\)を除き、ドル記号($)、パーセント記号(%)、アンダースコア(_)、左中カッコ({)、右中カッコ(})などの特殊文字は、二重または一重引用符で囲まれた等価オペランド内にある場合、特殊な意味を持ちません。(つまりこれらに対しては、ステミング、ワイルド・カード拡張またはこれに類似する処理は実行されません。)ただし、これらは通常のテキストのレクサー処理の対象であり、printjoinとして宣言された文字を除き、空白に変換されます。円記号は、そのすぐ後に続く文字をエスケープします。
たとえば、ハイフン(-)と二重引用符(")がレクサー・プリファレンスでprintjoinとして定義されている場合は、次のようになります。
HASPATH(/A[B="B_TEXT")内の文字列B_TEXTは、句B TEXTとしてレクサー処理されます。
HASPATH(/A[B="B-TEXT")内の文字列B-TEXTは、ワードB-TEXTとしてレクサー処理されます。
HASPATH(/A[B="B'TEXT")内の文字列B'TEXTは、ワードB"TEXTとしてレクサー処理されます。円記号を使用して、BとTEXTの間の二重引用符をエスケープする必要があります。そうしないと、解析エラーが戻されます。
HASPATH(/A[B="{B_TEXT}")内の文字列{B_TEXT}は、句B TEXTとしてレクサー処理されます。
例
パスのテスト
次の問合せの例を示します。
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)の問合せでは、このドキュメントと不適切に一致します。この種の不適切な一致は、空のタグの間にテキストを挿入することで回避できます。
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が含まれているドキュメントを戻します。
たとえば、次のドキュメント
が戻されます。 |
単一レベルのワイルド・カード検索
| 構文 | 説明 |
|---|---|
| term INPATH (A/*/B) | トップレベルの要素Aの孫(2レベル下位)である要素Bにtermが含まれているドキュメントを戻します。
たとえば、次のドキュメント
が戻されます。 |
マルチレベルのワイルド・カード検索
| 構文 | 説明 |
|---|---|
| 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"])
これらの式には、次の制限事項が適用されます。
等価性と非等価性のみがサポートされています。範囲演算子および範囲関数は、サポートされていません。
等式の左側には属性を置く必要があります。タグとリテラルは、左側に置くことができません。
等式の右側にはリテラルを置く必要があります。タグと属性は、右側に置くことができません。
等価性のテストは、使用しているレクサーの設定によって異なります。デフォルト設定の場合の例を示します。
dog INPATH (A[@B= "pot of gold"])
この問合せは、次のセクションと一致します。
<A B="POT OF GOLD">dog</A>
および
<A B="pot of gold">dog</A>
これは、デフォルト設定のレクサーでは、大/小文字が区別されないためです。
<A B="POT IS GOLD">dog</A>
これは、英語ではofおよびisはデフォルトのストップワードであり、ストップワードは任意のストップワードのワードと一致するためです。
<A B="POT_OF_GOLD">dog</A>
これは、デフォルトでは、アンダースコアが結合文字ではないためです。
MDATAセクションが含まれるドキュメントを問い合せるには、MDATA演算子を使用します。MDATAセクションは、複合問合せを高速化するためにドキュメントに追加されたメタデータです。
MDATAはリテラルとして処理されます。たとえば、次の問合せ
MDATA(price, $1.24)
では、$はSTEM演算子として解釈されません。また、.(ピリオド)も空白に変換されません。MDATA演算子の範囲は右(閉じ)カッコまでであるため、右カッコを持つMDATA値は検索されません。
構文
| 構文 |
|---|
| MDATA(sectionname, value) |
検索するMDATAセクションの名前。sectionnameパラメータがDATEのFILTER BY列または一部の数値型にマップされている場合、MDATAはDATEまたは数値等価も検索します。
MDATAセクションの値。たとえば、Booktypeという名前のMDATAセクションが作成されている場合、値の例としてpaperbackがあります。
DATE FILTER BY列にマップされているMDATAセクションに対するMDATA演算子の場合、MDATAの値は日付書式のYYYY-MM-DD HH24:MI:SSに準拠している必要があります。準拠していない場合は、必要な行が戻されません。時間のコンポーネントを省略した場合は、SQLセマンティクスに従って00:00:00にデフォルト設定されます。
例
たとえば、作家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は、特定の問合せ語句が含まれているドキュメントを検索し、2番目の問合せ語句が存在するドキュメントのランクを低くする場合に有効です。
構文
| 構文 | 説明 |
|---|---|
| term1-term2
term1 minus term2 |
term1が含まれているドキュメントを戻します。term1のスコアからterm2のスコアを引いて、スコアを計算します。正数のスコアを持つドキュメントのみが戻されます。 |
例
たとえばcarsという語句についての問合せが、常にFord carsについてのドキュメントに高いスコアを戻すとします。次の式を使用して、Fordに関するドキュメントのスコアを低くできます。
'cars - Ford'
この式は語句carsを含むドキュメントを戻しますが、Fordも含まれている可能性があります。ただし、戻されたドキュメントのスコアは、carsのスコアからFordのスコアを差し引いた値になります。
関連項目
指定された問合せ語句の下位語としてシソーラスで定義されているすべての語句が含まれるように問合せを拡張するには、NARROWER TERM演算子(NT、NTG、NTP、NTI)を使用します。また、下位語の下位語、さらにその下位語、というようにシソーラス階層を下がるように問合せを拡張できます。
構文
| 構文 | 説明 |
|---|---|
| NT(term[(qualifier)][,level][,thes]) | シソーラスでtermに対する下位語として定義されたすべての下位レベルの語句が含まれるように、問合せを拡張します。 |
| NTG(term[(qualifier)][,level][,thes]) | シソーラスでtermに対する下位汎用語として定義されたすべての下位レベルの語句が含まれるように、問合せを拡張します。 |
| NTP(term[(qualifier)][,level][,thes]) | シソーラスでtermに対する下位部分語として定義されたすべての下位レベルの語句が含まれるように、問合せを拡張します。 |
| NTI(term[(qualifier)][,level][,thes]) | シソーラスでtermに対する下位インスタンス語として定義されたすべての下位レベルの語句が含まれるように、問合せを拡張します。 |
NARROWER TERM演算子にオペランドを指定します。termは、thesによって指定されたシソーラスで、語句に対して定義された下位語のエントリが含まれるように拡張されます。この拡張に含まれる下位語の数は、levelの値によって決定されます。拡張演算子はterm引数に指定できません。
termがthesの同じ階層分岐で2つ以上のノードに現れる同形異義語(同じスペルで複数の意味を持つワードまたは句)の場合は、termに修飾子を指定します。
NARROWER TERM問合せで同形異義語に修飾子が指定されていない場合は、すべての同形異義語の下位語が含まれるように問合せが拡張されます。
指定された語句に対する下位語を戻すために、シソーラス階層内を横断するレベル数を指定します。たとえば、NTのレベル1問合せは、下位語が定義されている場合、指定した問合せ語句のすべての下位語エントリを戻します。レベル2問合せは、指定した問合せ語句の下位語エントリ、さらにそれらの下位語の下位語エントリを戻します。
level引数はオプションで、デフォルト値は(1)です。level引数に0(ゼロ)または負の値を設定すると、元の問合せ語句のみを戻します。
指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。 thes引数はオプションで、デフォルト値はDEFAULTです。このデフォルト値を使用する場合は、シソーラス表にDEFAULTという名前のシソーラスが存在している必要があります。
|
注意: thesを指定する場合は、levelも指定する必要があります。 |
例
次の問合せは、catという問合せ語句、またはDEFAULTシソーラスでcatのNT語として定義された語句のいずれかが含まれているすべてのドキュメントを戻します。
'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パッケージのプロシージャを使用してブラウズします。
2つ以上の問合せ語句の出現位置の近さを基準にしてスコアを戻すには、NEAR演算子を使用します。Oracle Textにより、ドキュメント内で互いに近接した語句には高いスコアが、互いに離れた語句には低いスコアが戻されます。
|
注意: NEAR演算子はワード問合せのみで機能します。ABOUT問合せではNEARを使用できません。 |
構文
| 構文 |
|---|
| NEAR((word1, word2,..., wordn) [, max_span [, order]])
下位互換性のための構文: word1 ; word2 |
問合せ語句をカンマで区切って指定します。問合せ語句は、1つのワードまたは句の場合もあり、他の問合せ演算子を使用する場合もあります(「NEARおよびその他の演算子」を参照)。
オプションで、最大クランプのサイズを指定します。デフォルト値は100です。100より大きい数を指定すると、Oracle Textからエラーが戻されます。
クランプはすべての問合せ語句が出現する最小のワード・グループです。すべてのクランプは問合せ語句で始まり、問合せ語句で終わります。
2つの問合せ語句を持つNEAR問合せでは、max_spanがこの2つの語句間の最大距離になります。たとえば、dogがcatの6ワード以内にある場合、dogおよびcatについて問い合せるには、次の問合せを入力します。
'near((dog, cat), 6)'
Oracle Textを使用して、指定した順序で語句を検索するには、TRUEを指定します。デフォルトはFALSEです。
たとえば、最大クランプ・サイズを20にして、monday、tuesdayおよび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演算子のスコア付けは、語句の出現頻度および語句の出現位置の近さを組み合せて行われます。問合せに適合する各ドキュメントに対して、ドキュメント内のクランプの数に比例し、そのクランプの平均サイズに反比例する1〜100までのスコアがOracle Textにより戻されます。小さなクランプは問合せ語句が近接していることを示すため、ドキュメントに小さなクランプが多く存在するほど高いスコアになります。
問合せ語句の数もスコアに影響を与えます。多くの語句(7個程度)で問い合せると、少ない語句(2個程度)で問い合せたときよりも、通常100のスコアを得るために必要なドキュメントのクランプ数が少なくなります。
クランプはすべての問合せ語句が出現する最小のワード・グループです。すべてのクランプは問合せ語句で始まり、問合せ語句で終わります。この項で説明するとおり、クランプ・サイズはmax_spanパラメータで定義します。
クランプのサイズに問合せ語句そのものは含まれません。そのため、問合せNEAR((DOG, CAT), 1)にdog catとdog ate catは一致しますが、dog sat on catは一致しません。
ANDやORなど他の演算子とともにNEAR演算子を使用できます。スコアは通常の方法で計算されます。
たとえば、語句lionおよびtigerが互いに10ワード以内のところに位置する場合、語句tiger、lionおよびcheetahを含むすべてのドキュメントを検索するには、次の問合せを入力します。
'near((lion, tiger), 10) AND cheetah'
戻される各ドキュメントのスコアは、NEAR演算子および語句cheetahのうち低い方のスコアになります。
EQUIVALENCE演算子を使用して、NEAR問合せの1つの問合せ語句を置換することもできます。
'near((stock crash, Japan=Korea), 20)'
この問合せは、JapanまたはKoreaの20ワード以内に語句stock crashを含むすべてのドキュメントを検索します。
次の演算子もNEARおよび;とともに使用できます。
EQUIV
ワード、句またはEQUIVを生成する拡張演算子すべて。次のような演算子があります。
SOUNDEX
FUZZY
ワイルド・カード
STEM
以前のOracle Textリリースの構文を使用してNEAR問合せを記述できます。たとえば、lionがtigerの近くに出現するすべてのドキュメントを検索するには、次のように記述します。
'lion near tiger'
または、セミコロンを使用して次のようにも記述できます。
'lion;tiger'
この問合せは次の問合せと同等です。
'near((lion, tiger), 100, FALSE)'
|
注意: 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.
セクション検索およびNEAR
セクションの検索には、次のように、WITHIN演算子とNEAR演算子を併用します。
'near((dog, cat), 10) WITHIN Headings'
このような式を評価する場合は、Oracle Textにより、指定されたセクション内全体にあるクランプが検索されます。
この例では、セクションHeadings内全体にあるdogおよびcatを含むクランプのみがカウントされます。つまり、語句dogがHeadings内にあり、語句catがdogから5ワードのところにあるがHeadingsの外にある場合、これら2つのワードは式を満たさず、カウントされません。
1つの問合せ語句が含まれているが、もう1つの問合せ語句が含まれていないドキュメントを検索するには、NOT演算子(~)を使用します。
構文
| 構文 | 説明 |
|---|---|
| term1~term2
term1 not term2 |
term1が含まれるが、term2が含まれていないドキュメントを戻します。 |
例
たとえば、animalsという語句が含まれていてdogsという語句は含まれていないドキュメントを取得するには、次の式を使用します。
'animals ~ dogs'
同様に、transportationという語句が含まれていて、automobilesまたはtrainsという語句は含まれていないドキュメントを取得するには、次の式を使用します。
'transportation not (automobiles or trains)'
|
注意: NOT演算子は、他の論理演算子が作成したスコアには影響を与えません。 |
関連項目
問合せ語句が1つ以上含まれるドキュメントを検索するには、OR演算子を使用します。
構文
| 構文 | 説明 |
|---|---|
| term1|term2
term1 or term2 |
term1またはterm2を含むドキュメントを戻します。そのオペランドの最大スコアを戻します。少なくともどちらか1つの問合せ語句が存在する必要があり、スコアの高い方が選択されます。 |
例
catsまたはdogsという語句が含まれているドキュメントを取得するには、次の式のいずれかを使用します。
'cats | dogs' 'cats OR dogs'
スコア付け
OR問合せでは、問合せ語句の最も高いスコアが戻ります。この例では、ドキュメント内でのcatsおよびdogsのスコアが、それぞれ30および40の場合、ドキュメントのスコアは40になります。
関連項目
問合せ内の問合せ語句を、その問合せ語句の優先語としてシソーラスで定義された語句に置換するには、PREFERRED TERM演算子(PT)を使用します。
構文
| 構文 | 説明 |
|---|---|
| PT(term[,thes]) | 問合せで指定されたワードをtermに対する優先語で置換します。 |
PREFERRED TERM演算子にオペランドを指定します。termは、指定されたシソーラスで優先語として定義されている語句に置換されます。ただし、termに対してPTエントリが定義されていない場合は、問合せ式でtermは置換されず、termが拡張の結果となります。
拡張演算子はterm引数に指定できません。
指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数はオプションで、デフォルト値はDEFAULTです。したがって、シソーラス演算子を使用するには、DEFAULTという名前のシソーラスがシソーラス表に存在している必要があります。
例
automobileはシソーラスにcarという優先語があるとします。automobileのPT問合せを行うと、carというワードが含まれているすべてのドキュメントが戻ります。automobileというワードが含まれているドキュメントは戻りません。
関連項目
シソーラスは、CTX_THESパッケージのプロシージャを使用してブラウズします。
問合せ語句の関連語としてシソーラスに定義されたすべての語句が含まれるように問合せを拡張するには、RELATED TERM演算子(RT)を使用します。
構文
| 構文 | 説明 |
|---|---|
| RT(term[,thes]) | シソーラスでtermに対する関連語として定義されたすべての語句が含まれるように、問合せを拡張します。 |
RELATED TERM演算子にオペランドを指定します。term、およびthesでtermに対して定義されたすべての関連エントリが含まれるように、termが拡張されます。
拡張演算子はterm引数に指定できません。
指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数はオプションで、デフォルト値はDEFAULTです。したがって、シソーラス演算子を使用するには、DEFAULTという名前のシソーラスがシソーラス表に存在している必要があります。
例
dogという語句には、wolfという関連語があるとします。dogに対してRT問合せを行うと、dogおよびwolfというワードを含むすべてのドキュメントが戻ります。
関連項目
シソーラスは、CTX_THESパッケージのプロシージャを使用してブラウズします。
構造化データの値が含まれるSDATAセクションと列でテストを実行するには、SDATA演算子を使用します。SDATAセクションは、複合問合せおよび順序付けを高速化します。この演算子は、CONTAINSに対して構造化述語をサポートします。このサポートによって、SQL以外のインタフェース(count_hitsや結果セット・インタフェースなど)が拡張されます。
SDATA演算子は、SDATA以外の子もあるAND演算子の子としてのみ使用する必要があります。
SDATA問合せは、文字列や数値のリテラル、および日付文字列に対して実行します。文字列リテラルおよび日付文字列は、一重引用符または二重引用符で囲みます。数値は引用符で囲まず、SQL書式のNUMBERに準拠する必要があります。次に例を示します。
CONTAINS(text, "dog and SDATA(category = ''news'')")>0 ... SDATA(rating between 1.2 and 3.4) ... SDATA(author LIKE 'FFORDE%') ... SDATA(date >='2005-09-18') ...
閉じカッコは、一重引用符または二重引用符で囲まれている場合にかぎり許可されます。
SDATA演算子は、問合せテンプレートで使用できます。
構文
| 構文 | |
|---|---|
| SData | := "SDATA" "(" SDataPredicate ")" |
| SDataPredicate | := sectionname SDataTest |
| SDataTest | := <SDataSingleOp SDataLiteral> | SDataBetweenOp | <"is" ("not")?"null"> |
| SDataSingleOp | := ("<" | "<=" | "=" | ">=" | ">" | "!=" | "<>" | "like") SDataLiteral |
| SDataBetweenOp | := "between" SDataLiteral "and" SDataLiteral |
| SDataLiteral | := numeric_literal | "'" string_literal "'" | "'" date_string "'" |
検索してテストを実行したり、チェックする対象のSDATAセクションの名前。
SDATAセクションの値。この値は、文字列リテラル、数値リテラルまたは日付文字列のいずれかである必要があります。
囲まれた述語がTRUEを戻す場合、SDATA演算子はスコア100を戻します。それ以外の場合は0を戻します。NULL値の場合、SDATA演算子はスコア0を戻します。これは、SQLではTRUEを戻さないためです。
複数値のセマンティクスは、複数値のSDATAセクションがサポートされていないため定義されていません。
文字列の比較では大/小文字が区別されます。常にBINARY照合が使用されます。
|
注意: DATE FILTER BY列にマップされているSDATAセクションに対するSDATA演算子の場合、SDATAの値は日付書式のYYYY-MM-DDまたはYYYY-MM-DD HH24:MI:SSに準拠している必要があります。準拠していない場合は、必要な行が戻されません。時間のコンポーネントを省略した場合は、SQLセマンティクスに従って00:00:00にデフォルト設定されます。この日付書式は、NLS_DATE_FORMAT環境変数の設定に関係なく常に使用されます。 |
例
たとえば、summerというワードが含まれたフィクション・カテゴリの本を問い合せるとします。CATEGORYという名前のSDATAセクションが宣言されているとの想定で、次のような問合せを実行できます。
SELECT id FROM idx_docs WHERE CONTAINS(text, 'summer AND SDATA(category = "fiction")')>0
制限事項
セクション名が定義されたSDATAセクションでない場合は、エラーが発生します。セクションのソース(タグか列かなど)は重要ではありません。
この構文では、RHS SDATAおよび式は使用できません。
SDATA演算子は、WITHIN、INPATH、HASPATHまたはNEARの子にできません。
名前が指定されたSDATAセクションのデータ型は、提供されているリテラル(およびLIKEなどの演算子)との互換性が必要です。互換性がない場合は、エラーが発生します。
SDATA演算子は、CTXRULEの問合せドキュメントではサポートされていません。
SDATA演算子は、ハイライト表示に影響を与えません。
注意
SDATA演算子は、SDATA以外の子もあるAND演算子の子としてのみ使用することをお薦めします。基本的には、SDATA演算子は2番目の基準(つまり確認や非駆動型)として使用します。たとえば、「評価が> 4のドキュメントの検索」ではなく、「DOGという語句が含まれており、価格が> 5でもあるドキュメントの検索」に使用します。他の使用方法でも正しく処理できますが、適切なパフォーマンスを得ることができない場合があります。
次の例は、推奨する使用方法と同じです。
dog & SDATA(foo = 5)
このSDATAは、SDATA以外の子もあるAND演算子の子です。
dog & (SDATA(foo = 5) | SDATA(x = 1))
このSDATA演算子はORの子ですが、SDATA以外の子を持つAND演算子の子でもあります。
次に、推奨しない使用例を示します。
SDATA(foo = 5)
このSDATAは唯一の基準であるため、駆動型基準です。
dog | SDATA(bar = 9)
この例のSDATAはANDではなく、OR演算子の子です。
SDATA(foo = 5) & SDATA(bar = 7)
この例では、両方のSDATA演算子がANDの子ですが、このAND演算子にはSDATA以外の子がありません。
関連項目
発音が類似したワード(他のワードと似た発音のワード)が含まれるように問合せを拡張するには、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($)演算子を使用します。
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でハイライト表示もされません。
関連項目
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;
このストアド・クエリー式は、hurricane、earthquakeまたはblizzardのいずれかを含むすべてのドキュメントを戻します。
これで、SQEは次のような問合せ式内でコールできます。
SELECT SCORE(1), docid FROM news WHERE CONTAINS(resume, 'sqe(disasters)', 1)> 0 ORDER BY SCORE(1);
制限事項
単一のテキスト問合せでは、ストアド・クエリー式(SQE)を100まで格納できます。テキスト問合せに100を超えるSQE(ネストされたSQEを含む)がある場合、その問合せは失敗し、エラーDRG-50949が発生します。
指定した語句のシノニムとしてシソーラスに定義されているすべての語句が含まれるように問合せを拡張するには、SYNONYM演算子(SYN)を使用します。
構文
| 構文 | 説明 |
|---|---|
| SYN(term[,thes]) | シソーラスでtermに対するシノニムとして定義されたすべての語句が含まれるように、問合せを拡張します。 |
SYNONYM演算子にオペランドを指定します。term、およびthesでtermに対して定義されたすべてのシノニムが含まれるように、termが拡張されます。
拡張演算子はterm引数に指定できません。
指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数はオプションで、デフォルト値はDEFAULTです。このデフォルト値を使用する場合は、シソーラス表にDEFAULTという名前のシソーラスが存在している必要があります。
例
次の問合せ式は、dogという問合せ語句、またはDEFAULTシソーラスでdogのシノニムとして定義された語句が含まれているすべてのドキュメントを戻します。
'SYN(dog)'
SYNONYM演算子内のコンパウンド句
シノニム問合せで問合せ語句のコンパウンド句の拡張問合せは、AND接続詞によって戻ります。
たとえば、temperature + measurement + instrumentsというコンパウンド句は、thermometerという問合せ語句のシノニムとしてシソーラスに定義されています。thermometerのシノニム問合せは次のように拡張されます。
{thermometer} OR ({temperature}&{measurement}&{instruments})
関連項目
シソーラスは、CTX_THESパッケージのプロシージャを使用してブラウズします。
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)演算子を使用します。
構文
| 構文 | 説明 |
|---|---|
| TR(term[, lang, [thes]]) | termに対して定義されたすべての外国語の等価語が含まれるように、termを拡張します。 |
TRANSLATION TERM演算子にオペランドを指定します。termは、thesでtermに対して定義されたすべての外国語エントリが含まれるように拡張されます。拡張演算子はterm引数に指定できません。
オプションで、拡張によってどの外国語の等価語を戻すかを指定します。指定する言語はthesに定義されている言語と一致している必要があります。(1回に指定できる言語は1つのみです。)このパラメータを省略、またはALLを指定すると、定義されたすべての外国語の語句を使用するように拡張されます。
オプションで、指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数のデフォルト値はDEFAULTです。したがって、シソーラス演算子を使用するには、DEFAULTという名前のシソーラスがシソーラス表に存在している必要があります。
|
注意: thesを指定する場合は、langも指定する必要があります。 |
例
catに対して次のエントリを持つシソーラスMY_THESがあるとします。
cat SPANISH: gato FRENCH: chat
catおよびcatのスペイン語訳を含むすべてのドキュメントを検索するには、次の問合せを入力します。
'tr(cat, spanish, my_thes)'
この問合せは次のように拡張されます。
'{cat}|{gato}'
関連項目
シソーラスは、CTX_THESパッケージのプロシージャを使用してブラウズします。
問合せ語句に対して定義されたすべての外国語の等価語、問合せ語句のシノニム、およびそのシノニムの外国語の等価語が含まれるように問合せを拡張するには、TRANSLATION TERM SYNONYM(TRSYN)演算子を使用します。
構文
| 構文 | 説明 |
|---|---|
| TRSYN(term[, lang, [thes]]) | termの外国語の等価語、termのシノニム、およびそのシノニムの外国語の等価語が含まれるように、termを拡張します。 |
この演算子にオペランドを指定します。termは、thesでtermに対して定義されたすべての外国語エントリおよびシノニムが含まれるように拡張されます。拡張演算子はterm引数に指定できません。
オプションで、拡張によってどの外国語の等価語を戻すかを指定します。指定する言語はthesに定義されている言語と一致している必要があります。このパラメータを省略すると、定義されたすべての外国語の語句を使用するように拡張されます。
オプションで、指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数のデフォルト値はDEFAULTです。したがって、シソーラス演算子を使用するには、DEFAULTという名前のシソーラスがシソーラス表に存在している必要があります。
|
注意: thesを指定する場合は、langも指定する必要があります。 |
例
catに対して次のエントリを持つシソーラスMY_THESがあるとします。
cat
SPANISH: gato
FRENCH: chat
SYN lion
SPANISH: leon
cat、catのスペイン語での等価語、catのシノニム、およびlionのスペイン語での等価語を含むすべてのドキュメントを検索するには、次の問合せを入力します。
'trsyn(cat, spanish, my_thes)'
この問合せは次のように拡張されます。
'{cat}|{gato}|{lion}|{leon}'
関連項目
シソーラスは、CTX_THESパッケージのプロシージャを使用してブラウズします。
問合せ語句を、シソーラスの標準階層内(上位語[BT]、下位語[NT])でその問合せ語句について定義されている最上位語と置換するには、問合せ内でTOP TERM演算子(TT)を使用します。最上位語は、問合せ語句に関連する、概念的に最上位の語句です。たとえば、シソーラスでは次のように階層が定義されます。
DOG
BT1 CANINE
BT2 MAMMAL
BT3 VERTEBRATE
BT4 ANIMAL
このシソーラスにおけるdogの最上位語はanimalです。
汎用階層(BTG、NTG)、部分階層(BTP、NTP)およびインスタンス(BTI、NTI)階層内の最上位語は戻されません。
構文
| 構文 | 説明 |
|---|---|
| TT(term[,thes]) | 問合せで指定されたワードを、termに対する標準的な階層(BT、NT)での最上位語で置換します。 |
TOP TERM演算子にオペランドを指定します。termは、指定されたシソーラスで最上位語として定義されているtermに置換されます。ただし、termに対してTTエントリが定義されていない場合は、問合せ式でtermは置換されず、termが拡張の結果となります。
拡張演算子はterm引数に指定できません。
指定された問合せ語句の拡張問合せを戻すために使用するシソーラス名を指定します。thes引数はオプションで、デフォルト値はDEFAULTです。このデフォルト値を使用する場合は、シソーラス表にDEFAULTという名前のシソーラスが存在している必要があります。
例
dogという問合せ語句には、シソーラスの標準階層内にanimalという最上位語があるとします。dogのTT問合せは、animalという句が含まれているすべてのドキュメントを戻します。dogというワードが含まれているドキュメントは戻しません。
関連項目
シソーラスは、CTX_THESパッケージのプロシージャを使用してブラウズします。
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の数値です。 |
例
スポーツ記事の収集がある場合を考えます。ブラジルのサッカー(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」を参照してください。
右側切捨て問合せ
右側切捨てでは、検索文字列の右側にワイルド・カードが置かれます。
たとえば、次の問合せ式では、パターンscalで始まるすべての語句を検索します。
'scal%'
左側切捨てでは、検索文字列の左側にワイルド・カードが置かれます。
king、wing、singなどのワードを検索するには、次のように問合せを記述します。
'_ing'
ingで終わるすべてのワードについては、次の問合せを入力します。
'%ing'
左側切捨て検索および右側切捨て検索を組み合せて、左右切捨て検索を作成します。次の問合せでは、サブストリング%benz%を含むワードのあるすべてのドキュメントを検索します。
'%benz%'
ワイルド・カード問合せのパフォーマンスは、サブストリングまたはプリフィックス索引を追加して改善します。
ワイルド・カード問合せが左側切捨ておよび左右切捨ての場合、サブストリング索引を作成すると、問合せパフォーマンスが向上します。サブストリング索引によって、%ed、_ing、%benz%などの、あらゆる種類の左側切捨てワイルド・カード検索の問合せパフォーマンスが向上します。
ワイルド・カード問合せが右側切捨ての場合は、プリフィックス索引を作成すると、パフォーマンスが向上します。プリフィックス索引によって、to%などのワイルド・カード検索の問合せパフォーマンスが向上します。
問合せをドキュメントのセクションに絞り込むには、WITHIN演算子を使用します。ドキュメントのセクションは次のいずれかです。
ゾーン・セクション
フィールド・セクション
属性セクション
特殊セクション(文または段落)
構文
| 構文 | 説明 |
|---|---|
| expression WITHIN section | 事前定義済のゾーン、フィールドまたは属性section内でexpressionを検索します。
セクションがゾーンの場合、expressionは、セクションがゾーンまたは特殊セクションである セクションがフィールドまたは属性セクションの場合、式は他の |
| expression WITHIN SENTENCE | 文中にexpressionを含むドキュメントを検索します。expressionにはANDまたはNOT問合せを指定します。
expressionは、セクションがゾーンまたは特殊セクションである |
| expression WITHIN PARAGRAPH | 段落中にexpressionを含むドキュメントを検索します。expressionにはANDまたはNOT問合せを指定します。
expressionは、セクションがゾーンまたは特殊セクションである |
WITHIN演算子には、次の制限事項があります。
WITHIN句を句に埋め込むことはできません。たとえば、term1 WITHIN section term2と記述することはできません。
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セクションに出現しているか異なるセクションに出現しているかに関係なく、検索します。
Headingsセクション内で、dogがcatの近くにあるすべてのドキュメントを検索するには、次の問合せを記述します。
'dog near cat WITHIN Headings'
|
注意: NEAR演算子はWITHIN演算子よりも優先順位が高いため、この例では中カッコは必要ありません。この問合せは、(dog near cat) WITHIN Headingsと同等です。 |
WITHIN演算子をネストすると、ゾーン・セクション内のゾーン・セクションを検索できます。
たとえば、あるドキュメント・セットのゾーン・セクションBOOK内に、ゾーン・セクションAUTHORがネストされているとします。ネストされたWITHIN問合せを次のように記述すると、BOOKセクションのAUTHORセクションに出現するscottをすべて検索できます。
'(scott WITHIN AUTHOR) WITHIN BOOK'
フィールド・セクション内の問合せの構文は、ゾーン・セクション内の問合せと同じです。前述の「ゾーン・セクション内の問合せ」で示したほとんどの例の構文は、フィールド・セクションに適用されます。
ただし、フィールド・セクションの動作は、次の点でゾーン・セクションとは異なります。
可視性: フィールド・セクション内のテキストを非表示にします。
反復性: WITHIN問合せは、繰り返されたフィールド・セクションを識別できません。
ネスト性: ネストされたWITHIN問合せは、フィールド・セクションで入力できません。
次に、これらの違いについて説明します。
フィールド・セクションのvisibleフラグ
フィールド・セクションが、CTX_DDL.ADD_FIELD_SECTIONでFALSEに設定されたvisibleフラグで作成されている場合、そのフィールド・セクション内のテキストは、WITHIN演算子を使用してのみ問合せできます。
たとえば、TITLEフィールド・セクションのvisibleフラグがFALSEに設定されているとします。この場合、WITHIN演算子のないdogの問合せでは、次の内容を含むドキュメントを検索しません。
<TITLE>The dog</TITLE> I like my pet.
このようなドキュメントを検索するには、次のようにWITHIN演算子を使用します。
'dog WITHIN TITLE'
また、TITLEをCTX_DDL.ADD_FIELD_SECTIONでフィールド・セクションとして定義するときは、visibleフラグをTRUEに設定します。
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形式でネーミングします。
|
属性セクションtitle内でTaleを検索するには、次の問合せを入力します。
'Tale WITHIN title'
属性セクションの問合せに対する制約
属性セクション内の問合せには、次の制約が適用されます。
属性テキストに通常の問合せを行うと、WITHIN句で修飾されていない場合は、ドキュメントにヒットしません。次のようなXMLドキュメントがあるとします。
<book title="Tale of Two Cities">It was the best of times.</book>
Taleの問合せ自体は、WITHIN title@bookで修飾されていない場合、ドキュメントにヒットしません(この動作は、visibleフラグをFALSEに設定した場合のフィールド・セクションと似ています)。
属性セクションは、ネストされたWITHIN問合せでは使用できません。
句は属性テキストを無視します。たとえば、元のドキュメントが次のようなものであるとします。
Now is the time for all good <word type="noun"> men </word> to come to the aid.
この場合、このドキュメントは、介入的な属性テキストを無視して、通常の問合せgood menにヒットします。
WITHIN問合せは、繰返し属性セクションを識別できます。この動作は、ゾーン・セクションには似ていますが、フィールド・セクションには似ていません。たとえば、次のドキュメントがあるとします。
<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>
このフィールド・セクション制限およびオーバーラップとネスト制限に対して、フィールド・セクション問合せは、特にセクションが各ドキュメントで出現する場合、または検索語句が共通の場合は、通常、ゾーン・セクション問合せよりも高速です。