問合せの状態ではコレクションを指定できます。
StateタイプのCollectionName要素では、問合せで使用するコレクションの名前を指定できます。状態ごとに最大1つのコレクションを指定できます。ただし、問合せでは複数の状態を使用でき、各状態で必要に応じてコレクション名を指定できます。
コレクションを状態に関連付けた場合、その状態によって実行される操作は、そのコレクションを参照します。たとえば、状態でコレクション名を指定したレコード検索では、そのコレクション内でのみレコードが検索されます。ただし、コレクションに1つ以上のフィルタ・ルールが構成されている場合は、SelectionFilterまたはSelectedRefinementFilterの問合せによってそのフィルタ・ルールがトリガーされ、そのターゲット・コレクション内のレコードが使用されます。フィルタ・ルールの詳細は、「フィルタ・ルール」を参照してください。
<Request>
...
<State>
<Name>?</Name>
<CollectionName>?<CollectionName>
...
</State>
...
</Request>
変数の意味は次のとおりです。
名前付きの状態がある場合は、問合せ内のContentElementConfigにその状態を指定できます。
<Request xmlns="http://www.endeca.com/MDEX/conversation/3/0">
<Language>en</Language>
<State>
<Name>SalesRecs</Name>
<CollectionName>Sales</CollectionName>
<SelectionFilter Id="SalesFltr">
<filterString>FactSales_SalesAmount > 1000</filterString>
</SelectionFilter>
</State>
<State>
<Name>ResellerRecs</Name>
<CollectionName>Resellers</CollectionName>
</State>
<RecordListConfig Id="Results">
<StateName>SalesRecs</StateName>
</RecordCountConfig>
</Request>
<cs:Results ...>
<State ...>
<Name>SalesRecs</Name>
<CollectionName>Sales</CollectionName>
<DataSourceFilter>
<filterString>"FactSales_ProductKey" IS NOT NULL</filterString>
</DataSourceFilter>
<SelectionFilter Id="SalesFltr">
<filterString>FactSales_SalesAmount > 1000</filterString>
</SelectionFilter>
</State>
<State ...>
<Name>ResellerRecs</Name>
<CollectionName>Resellers</CollectionName>
<DataSourceFilter>
<filterString>"DimReseller_ResellerKey" IS NOT NULL</filterString>
</DataSourceFilter>
<SelectionFilter>
<filterString>"DimReseller_AnnualSales" > 1000</filterString>
<AppliedFilterRule>
<Source FilterId="SalesFltr">
<StateName>SalesRecs</StateName>
</Source>
<TargetPropertyKey>DimReseller_AnnualSales</TargetPropertyKey>
</AppliedFilterRule>
</SelectionFilter>
</State>
<cs:RecordCount Id="Results">
<cs:NumRecords>115</cs:NumRecords>
</cs:RecordCount>
</cs:Results>
レスポンスでは、Resellersコレクションに対して暗黙的なSelectionFilterフィルタが実行されたことがResellerRecs状態に示されていることに注意してください。AppliedFilterRule要素には、暗黙的なフィルタのソース(フィルタIDと状態)がリストされています。
<Fault>
<faultcode>env:Server</faultcode>
<faultstring>OES-000190: Collection 'Producs' does not exist.</faultstring>
<detail>
<Fault xmlns:ns2="http://www.endeca.com/MDEX/eql_parser/types"
xmlns:ns3="http://www.endeca.com/MDEX/conversation/3/0"/>
</detail>
</Fault>
<cs:Results ...>
<State ...>
<Name>ResellerRecs</Name>
<CollectionName>Resellers</CollectionName>
<DataSourceFilter>
<filterString>"DimReseller_ResellerKey" IS NOT NULL</filterString>
</DataSourceFilter>
<SelectionFilter>
<filterString>"DimReseller_AnnualSales" > 1000</filterString>
<AppliedFilterRule>
<Source FilterId="SalesFltr">
<StateName>SalesRecs</StateName>
</Source>
<TargetPropertyKey>DimReseller_AnnualSales</TargetPropertyKey>
</AppliedFilterRule>
</SelectionFilter>
</State>
...
</cs:Results>
コレクションの一意のプロパティ・キー(この例ではProductKey)を使用してDataSourceFilterを追加する目的は、コレクション内のレコードに検索範囲を限定することにあります。
EQL問合せ内のFROM句では、コレクションは直接参照できませんが状態は参照できます。ただし、状態でコレクション名を指定している場合は、状態を介してコレクションを使用できます。
<Request>
<Language>en</Language>
<State>
<Name>TotalSales</Name>
<CollectionName>Sales</CollectionName>
</State>
<ns:EQLConfig Id="EQLQuery">
<StateName>TotalSales</StateName>
<EQLQueryString>
RETURN Results AS
SELECT ARB(FactSales_SalesAmount) AS totalAmount
FROM TotalSales
GROUP BY FactSales_OrderQuantity
</EQLQueryString>
</EQLConfig>
</Request>
FROM句では、ソースとしてTotalSales状態を指定しています。TotalSales状態はSalesコレクションを指定しているため、そのコレクションのレコードが使用されます。