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

3.7.2 検索結果を集計する

集計を行う場合、グループキーも同時に取り出すのが一般的です。リターン式には、集合関数指定と、ソート式で指定したキー指定が指定できます。各リターン項目は“,”で区切ります。複数のリターン項目を指定した場合は、結果として返す各リターン項目の値が区切り文字で区切られます。

例として、検索式により以下の6件のXML文書がヒットしたものとして説明します。


文書A

<doc>
    :
<basic date="2006年11月3日" expense="15500円">
    :
</basic>
  <detail>
    <destination area="神奈川県横浜市港北区">本社</destination>
    :
    <train>8600円</train><taxi></taxi><hotel>6900円</hotel>
    :
  </detail>
    :
</doc>

文書B

<doc>
    :
<basic date="2006年10月11日" expense="1000円">
    :
</basic>
  <detail>
    <destination area="神奈川県横浜市港北区">本社</destination>
    :
    <train>900円</train><taxi></taxi><hotel></hotel>
    :
  </detail>
    :
</doc>

文書C

<doc>
    :
  <basic date="2006年11月25日" expense="21000円">
    :
</basic>
  <detail>
    <destination area="神奈川県横浜市港北区">本社</destination>
    :
    <train>13000円</train><taxi></taxi><hotel>8000円</hotel>
    :
  </detail>
    :
</doc>

文書D

<doc>
    :
<basic date="2006年9月29日" expense="4200円">
    :
</basic>
  <detail>
    <destination area="東京都千代田区">東京営業所</destination>
    :
    <train>1600円</train><taxi>600円</taxi><hotel></hotel>
    :
  </detail>
    :
</doc>

文書E

<doc>
    :
<basic date="2006年11月12日" expense="1300円">
    :
</basic>
  <detail>
    <destination area="東京都千代田区">東京営業所</destination>
    :
    <train>400円</train><taxi>900円</taxi><hotel></hotel>
    :
  </detail>
    :
</doc>

文書F

<doc>
    :
<basic date="2006年10月30日" expense="9500円">
    :
</basic>
  <detail>
    <destination area="東京都千代田区">東京営業所</destination>
    :
    <train>280円</train><taxi>680円</taxi><hotel>8500円</hotel>
    :
  </detail>
    :
</doc>

以降の例の共通事項として、次のソート式が指定されているものとします。

ソート式 : /doc/detail/destination/@area

参考

集計を行う場合のソート式は、グループ化するキーを指定しますが、指定したキーでソートも行います。集計のためのソート式にも、“DESC”が指定できます。“DESC”を指定すると、グループ化キーの大きいものから集計結果を取り出すことができます。


注意

以下は、文字コード“UTF-8”を使用した場合の結果例です。


例1

交通費(train)の平均を求めます。

リターン式 : /doc/detail/destination/@area,avg(/doc/detail/train/text())

結果:Java APIの場合

神奈川県横浜市港北区,7500
東京都千代田区,760

例2

タクシーの利用者数を数えます。

リターン式 :/doc/detail/destination/@area,count(/doc/detail/taxi/text())

結果:Java APIの場合

神奈川県横浜市港北区,0
東京都千代田区,3

参考

集合関数の引数となるテキスト式が示す値がない場合は、集計の対象に含めません。上記の例では、本社に出張した人は誰もタクシーを利用していません。このため、countの結果は0になります。

taxi要素ノードに“0”という値を格納している場合は、集計の対象になります。このようなデータを格納している場合は、検索式にタクシー料金が0より大きいという条件を指定して、検索の対象から除外することで集計の対象から除外できます。


例3

タクシー料金(taxi)の最大値と宿泊費(hotel)の合計、および出張回数を求めます。

リターン式 : /doc/detail/destination/@area,max(/doc/detail/taxi/text()),sum(/doc/detail/hotel/text()),count(/doc/detail/destination/text())

結果:Java APIの場合

神奈川県横浜市港北区,,14900,3
東京都千代田区,900,8500,3

ポイント

集合関数の引数となるテキスト式が示す値がない場合は、集計の対象に含めません。上記の例では、本社に出張した人は誰もタクシーを利用していません。このため、最大の値がありません。