filterStringフィルタのEQL演算子

EQLレコード・フィルタのfilterStringバージョンは、ブール式のWHERE句のタイプで指定されます。

WHERE式では、値がテストされる1つ以上の属性と、1つ以上のテスト条件が使用されます。たとえば、式では、数字と文字列値の比較演算子、NULL値の評価演算子、論理演算子、いくつかの関数を使用できます。EQL文とは異なり、WHEREキーワード自体は問合せ文字列で使用されません。

次の表に、EQLレコード・フィルタ式で使用可能な演算子を示します。
演算子 説明
= 等しい(2つの式が等しいかどうかをテストします) COUNTRY_NAME = 'France'
<> 等しくない(2つの式の条件が相互に等しくないかどうかをテストします) PROD_WEIGHT_CLASS <> 2
> より大きい(1つの式の条件がもう1つの式よりも大きいかどうかをテストします) PROD_MIN_PRICE > 1000
< より小さい(1つの式の条件がもう1つの式よりも小さいかどうかをテストします) QUANTITY_SOLD < 500
>= 以上(1つの式の条件がもう1つの式以上であるかどうかをテストします) PROD_MIN_PRICE >= 75
<= 以下(1つの式の条件がもう1つの式以下であるかどうかをテストします) PROMO_COST <= 1500
BETWEEN low AND high 値の境界範囲を指定します。ANDを使用して、低値(開始値)と高値(終了値)を分けます。 FISCAL_YEAR BETWEEN 2000 AND 2006
IS NULL 単一割当て属性でNULL値の検索を指定します。 CUST_EMAIL IS NULL
IS NOT NULL 単一割当て属性でNULL以外の値の検索を指定します。 PROD_STATUS IS NOT NULL
IS EMPTY (複数割当て属性で)空のセットの検索を指定します。 LOCALES IS EMPTY
IS NOT EMPTY (複数割当て属性で)空以外のセットの検索を指定します。 LOCALES IS NOT EMPTY
AND 2つの条件を組み合せて、どちらの条件もTRUEの場合はTRUEに評価します。 PROD_MIN_PRICE > 1000 AND COUNTRY_NAME = 'Spain'
OR 2つの条件を組み合せて、いずれかの条件がTRUEの場合はTRUEに評価します。 PROD_LIST_PRICE > 50 OR PROD_CATEGORY = 'Hardware'
NOT ブール式の値を反転します。 NOT(COUNTRY_REGION = 'Europe' AND AMOUNT_SOLD > 1000)

問合せで集計関数(SUMなど)は使用できません。

単一割当て属性と複数割当て属性の構文

WHERE式のEQL構文は、属性が単一割当て属性と複数割当て属性のどちらとして構成されているかに応じて異なります。たとえば、Flavors属性が単一割当ての文字列属性である場合は、次の比較構文が動作します。
<filterString>Flavors = 'Peach'</filterString>
一方、Flavorsが複数割当て属性である場合、この構文は失敗し、次のエラー・メッセージが表示されます。
Cannot compare mdex:string-set and mdex:string
このエラーが発生する理由は、EQLでは複数割当て属性が(mdex:string-setデータ・タイプの)セットとして扱われ、文字列(peachなど)をstring-setと比較できないためです。(つまり、EQLでは、単一割当て属性はmdex:stringデータ・タイプであるのに対し、複数割当て属性はmdex:string-setデータ・タイプであるとみなされます。)したがって、次の3つの例のように、式では複数割当ての構文を使用する必要があります。
<filterString>SOME i IN Flavors SATISFIES (i = 'Peach')</filterString>

<filterString>IS_MEMBER_OF('Peach', Flavors)</filterString>

<filterString>'Peach' IN Flavors</filterString>

単一割当て属性と複数割当て属性に関するこの警告は、すべてのデータ・タイプに適用されます。EQLでの複数割当てデータの操作の詳細は、『Oracle Endeca Server EQLガイド』を参照してください。

文字列値での単一引用符の使用

文字列値の比較演算子を使用する場合、テキスト値フィールドで単一引用符を使用するようにしてください。たとえば、COUNTRY_NAME標準属性のタイプがmdex:stringの場合、次のように使用します。
COUNTRY_NAME = 'Spain'  // Correct

COUNTRY_NAME = "Spain"  // Incorrect because double quotes are not allowed

COUNTRY_NAME = Spain  // Incorrect because the attribute stores string values
また、文字列の比較では大文字と小文字が区別されることに注意してください。したがって、
COUNTRY_NAME = 'spain'
は、すべてのCOUNTRY_NAME値がSpainである(つまり、spain値が存在しない)場合は一致しません。
数値の比較演算子を使用する場合、値フィールドではどの引用符も使用しないでください。たとえば、AMOUNT_SOLD標準属性のタイプがmdex:doubleの場合、次のように使用します。
AMOUNT_SOLD = 500  // Correct

AMOUNT_SOLD = "500"  // Incorrect because the attribute stores numeric values

特殊XML文字のエスケープ

対話Webサービスに対して直接問合せを行う場合(たとえば、soapUIツールを使用するなど)、解析エラーが生じないように一部のXML文字をエスケープする必要があります。たとえば、< (より小さい)文字ではなく、&lt;エスケープ文字を使用する必要があります。この項の例では、読みやすくなるようにエスケープされていない文字が使用されます。