EQLフィルタの構文

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

DataSourceFilterStringSelectionFilterStringの両方の構文では、EQLのWHERE句で使用される式と同様の式が使用されます。構文は次のとおりです。
<DataSourceFilterString>WHERE booleanExpression</DataSourceFilterString>

<SelectionFilterString>WHERE booleanExpression</SelectionFilterString>

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

次の表に、使用可能な演算子を示します。
Operator 説明
= 等しい(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
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など)は使用できません。 IN式もサポートされません。

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

文字列値の比較演算子を使用する場合、テキスト値フィールドで単一引用符を使用するようにしてください。たとえば、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
数値の比較演算子を使用する場合、値フィールドではどの引用符も使用しないでください。たとえば、AMOUNT_SOLD標準属性のタイプがmdex:doubleの場合、次のように使用します。
AMOUNT_SOLD = 500  // Correct

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

特殊XML文字のエスケープ

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

エラー・メッセージを解析するための言語IDの設定

Request複合タイプには、EQL解析で生じるエラー・メッセージの言語を設定するオプションのLanguage要素があります。サポートされる言語とその対応する言語IDは次のとおりです。
  • 中国語(簡体字): zh_CN
  • 中国語(繁体字): zh_TW
  • 英語: en
  • フランス語: fr
  • ドイツ語: de
  • イタリア語: it
  • 日本語: ja
  • 韓国語: ko
  • ポルトガル語: pt
  • スペイン語: es

言語IDを指定しない場合、en (英語)がデフォルトになります。

このLanguage要素の目的は、SearchFilterタイプ(レコード検索の場合)とValueSearchConfigタイプ(値検索の場合)におけるLanguage属性とは異なることに注意してください。

次の例に、リクエスト内でEQL解析エラー・メッセージのLanguage要素を指定する場所を示します。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <Request xmlns="http://www.endeca.com/MDEX/conversation/2/0">
        <Language>fr</Language>
        <State>
          <DataSourceFilterString>
            COUNTRY_NAME = 'France'
          </DataSourceFilterString>
          <SelectionFilterString>
            AMOUNT_SOLD > 1000
          </SelectionFilterString>
        </State>
        <ContentElementConfig xsi:type="RecordListConfig"
          HandlerFunction="RecordListHandler"
          HandlerNamespace="http://www.endeca.com/MDEX/conversation/handlers/2010"
          Id="RecordList" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        </ContentElementConfig>
       </Request>
    </soapenv:Body>
</soapenv:Envelope>

この例では、DataSourceFilterStringは最初に、COUNTRY_NAME割当てに値Franceのないレコードをすべて除外します。値が1000よりも大きいAMOUNT_SOLD割当てのレコードをすべて返します。