50.1 QUERY_EXPERT_SEARCHファンクション

このファンクションは、エンド・ユーザー検索問合せを対応するOracle Text構文に変換し、高度な検索機能と正確な検索機能を有効にします。

検索式を処理し、Oracle Textで使用できるカスタム検索問合せを生成して、効率的で正確なテキストベースの検索を実行します。

検索式の構文について

パラメータとして提供される検索式は、特定の構文に従い、次の要素を含めることができます:

  • 演算子 - 検索式には、検索動作を変更する特定の演算子を含めることができます:
    • AND - AND演算子は、複数の検索語を組み合せるために使用されます。たとえば、"red AND blue"は、redblueの両方を含むドキュメントを取得します。
    • OR - OR演算子は、Oracle TextのACCUM演算子にマップされ、検索語を組み合せたり、いずれかの語を含むドキュメントを取得するために使用されます。たとえば、"red OR blue"は、redまたはblueのいずれかを含むドキュメントを取得し、両方の用語と一致するドキュメントのスコアは高くなります。
    • NOT - NOT演算子は、検索結果から特定の用語を除外するために使用されます。たとえば、"red NOT blue"は、redを含むがblueを含まないドキュメントを取得します。
    • AROUND(d) - AROUND演算子は、Oracle TextのNEAR演算子の抽象化です。これは、互いに一定の距離(d)内で用語を見つけるために使用されます。距離パラメータ(d)は、2つの問合せ用語間で許可される単語の最大数を表します。たとえば、"red AROUND(3) blue"は、redblueが互いに3語以下で存在するドキュメントを取得し、両方の語が近い場合はスコアが高くなります。
  • カッコ - カッコを使用して、検索語をグループ化し、評価の順序を指定できます。たとえば、"(red OR blue) AND green"は、redまたはblueおよびgreenのいずれかを含むドキュメントを取得します。
  • 引用符で囲まれたフレーズ - フレーズ("red apple"など)を引用符で囲んで、正確なフレーズが検索されるようにします。たとえば、"red apple"は、正確なフレーズred appleを含むドキュメントを取得します。
  • あいまいな接頭辞 - この構文では、FUZZYキーワードの後にオプションのプラス(+)またはマイナス(-)記号を付けてあいまいさを増減することで、ファジー・マッチが可能になります。たとえば、"fuzzy+: red apple"は、あいまいさを増やしてredおよびappleのファジー・マッチを実行します。
  • 重み付け問合せ用語 - 検索式では、キャレット記号(^)とそれに続く数値を使用して、用語の重要度または重みを示す重み付け検索用語がサポートされます。たとえば、"red^3 apple"は、appleと比較して、redという語に高い重みを割り当てます。

構文

APEX_SEARCH.QUERY_EXPERT_SEARCH (
    p_search_expression IN VARCHAR2 )
RETURN CLOB;

パラメータ

パラメータ 説明
p_search_expression Oracle Text構文に変換するエンド・ユーザー検索問合せ。様々な検索演算子およびキーワードを含めることができます。

戻り値

このファンクションは、指定された検索式に基づいて生成されたOracle Text問合せを戻します。

例1

select query_expert_search('(red or white) "summer shorts"') from dual;

TEXT_QUERY
----------------------------------------
({red} ACCUM {white}) AND {summer shorts}

例2

select query_expert_search('fuzzy-: catz dogz') from dual;

TEXT_QUERY
----------------------------------------
FUZZY({catz},80,100,W) AND FUZZY({dogz},80,100,W)

例3

select query_expert_search('oracle^3 apex') from dual;

TEXT_QUERY
----------------------------------------
{oracle}*3 AND {apex}