ページの先頭行へ戻る
Big Data Integration ServerV1.4.0 検索編アプリケーション開発ガイド
FUJITSU Software

3.7.1 検索結果をグループ化する

検索式でヒットしたXML文書を任意のキーでグループ化します。グループ化を行うキーは、ソート式に指定します。


3.7.1.1 文字列でグループ化する

XML文書中の任意の要素ノードまたはその要素ノードの属性ノードの値でグループ化を行うことができます。文字列でグループ化を行う場合は、ソート式のキー指定にテキスト式または属性式を指定します。


例として以下の文書があるものとします。


文書A

<doc>
  <employee eno="19980120" position="general manager">
    :
    <name>鈴木太郎</name>
    :
  </employee>
    :
  <detail>
    :
    <destination area="愛知県名古屋市千種区覚王山">愛知支店</destination>
    :
  </detail>
    :
</doc>

文書B

<doc>
  <employee eno="19980120" position="general manager">
    :
    <name>鈴木太郎</name>
    :
  </employee>
    :
  <detail>
    :
    <destination area="東京都千代田区八重洲">東京支店</destination>
    :
  </detail>
    :
</doc>

文書C

<doc>
  <employee eno="20012111" position="manager">
    :
    <name>佐藤花子</name>
    :
  </employee>
    :
  <detail>
    :
    <destination area="東京都千代田区八重洲">東京支店</destination>
    :
  </detail>
    :
</doc>

文書D

<doc>
  <employee eno="20012111" position="manager">
    :
    <name>佐藤花子</name>
    :
  </employee>
    :
  <detail>
    :
    <destination area="愛知県名古屋市千種区今池">愛知支社 </destination>
    :
  </detail>
    :
</doc>

例1

従業員氏名(name)でグループ化します

/doc/employee/name/text()

結果:文書AとBが1つのグループ、文書CとDが1つのグループとして扱われます。


例2

地位(position)でグループ化します。

/doc/employee/@position

結果:文書AとBが1つのグループ、文書CとDが1つのグループとして扱われます。


ポイント

文字列でグループ化を行う場合、文字列の先頭20バイトをキーにしてグループ化します。キー指定が示すXML文書中の値が20バイトよりも大きくなる可能性がある場合は、20バイト目以降が異なる文字列であるのに同一グループとみなされることがあります。このような場合は、キー指定にrlen関数を指定して、先頭から何文字をキーとするかを指定できます。

rlen関数の詳細については、“B.2.4 単一行関数指定”を参照してください。


例3

出張エリア(area)でグループ化したい場合

rlen(/doc/detail/destination/@area,30)

上記のように指定すると、出張エリアの先頭から30文字でグループ化します。


3.7.1.2 数値でグループ化する

XML文書の任意の要素ノードまたはその要素ノードの属性ノードの値を数値とみなしてグループ化します。数値でグループ化するには、ソート式のキー指定に単一行関数指定のval関数を指定します。val関数の引数には、テキスト式または属性式を指定します。

val関数の詳細については、“B.2.4 単一行関数指定”を参照してください。


例として以下の文書があるものとします。


文書A

<doc>
  <employee>
    :
    <department sno="2001">開発部</department>
    :
  </employee>
    :
</doc>

文書B

<doc>
  <employee>
    :
    <department sno="2002">人事部</department>
    :
  </employee>
    :
</doc>

文書C

<doc>
  <employee>
    :
    <department sno="2001">開発部</department>
    :
  </employee>
    :
</doc>

文書D

<doc>
  <employee>
    :
    <department sno="2002">人事部</department>
    :
  </employee>
    :
</doc>

部署番号(sno)が同じXML文書をグループ化したい場合

val(/doc/employee/department/@sno)

結果:文書AとCが1つのグループ、文書BとDが1つのグループとして扱われます。


3.7.1.3 複数のキー指定でグループ化する

複数のキーでグループ化するには、ソート式に“,”で区切って複数のキー指定を指定します。それぞれのキー指定は、数値でも文字列でもかまいません。複数のキー指定を指定すると、指定したすべてのキー指定の値が同じであるXML文書を1つのグループとして扱います。キー指定は8個まで指定できます。


例として以下の文書があるものとします。


文書A

<doc>
  <basic date="2006年03月03日">
    :
  </basic>
  <detail>
    :
    <destination area="神奈川県">本社</destination>
    :
  </detail>
    :
</doc>

文書B

<doc>
  <basic date="2006年03月03日">
    :
  </basic>
  <detail>
    :
    <destination area="神奈川県">本社</destination>
    :
  </detail>
    :
</doc>

文書C

<doc>
  <basic date="2006年03月10日">
    :
  </basic>
  <detail>
    :
    <destination area="神奈川県">本社</destination>
    :
  </detail>
    :
</doc>

出張先(destination)と出張日(date)でグループ化します

/doc/detail/destination/text(),/doc/basic/@date

結果:文書AとBが1つのグループ、文書Cが1つのグループとして扱われます。