Timefieldが一つ前のドキュメントとの差分を取得したい

お世話になります。

あるフィールドにおいて、同一index内のtimefieldが一つ前のドキュメントとの差分を計算して取得したいのですが、そのようなことは可能でしょうか。

scripted field を使用して計算することなどを模索してみたのですが、同一ドキュメント内で異なるフィールドの差分などは取れそうでしたが、別ドキュメントの同じフィールドの差分は取れそうにありませんでした。

やりたいことのイメージ

たとえば下記のようなデータ群で、valueフィールドに対してtimefiledが一つ前のドキュメントとの差分を取りたい場合の期待値は以下のとおりとなります。

_id 期待値 (ひとつ前のドキュメントとの差分)
1 なし
2 10 ( =20-10)
3 80 ( =100-20)
      {
        "_index": "sample-index",
        "_type": "sample-type",
        "_id": "1",
        "_score": 1,
        "_source": {
          "title": "testdata-1",
          "timefiled": "2020-01-01T00:00:00+09:00",
          "value": 10
        }
      },
            {
        "_index": "sample-index",
        "_type": "sample-type",
        "_id": "2",
        "_score": 1,
        "_source": {
          "title": "testdata-2",
          "timefiled": "2020-01-02T00:00:00+09:00",
          "value": 20
        }
      },
      {
        "_index": "sample-index",
        "_type": "sample-type",
        "_id": "3",
        "_score": 1,
        "_source": {
          "title": "testdata-3",
          "timefiled": "2020-01-03T00:00:00+09:00",
          "value": 100
        }
      }

動作環境

  • Elasticsearch 7.3.0
  • Kibana 7.3.0

ご教示いただけますと幸いです。
どうぞ宜しくお願い致します。

@sshota さん、

Serial Differencing Aggregation などはもう試されたでしょうか?
ぱっと見、用途にマッチするように思えます。
https://www.elastic.co/guide/en/elasticsearch/reference/7.5/search-aggregations-pipeline-serialdiff-aggregation.html

@Koji_Kawamura さん

お礼が遅くなり申し訳ないです。
ご教示いただきありがとうございました。

教えていただいた内容で、やりたいことがクリアできそうです。
Serial Differencing Aggregationは知らなかったので大変参考になりました。

まだ試しに触ってみた程度なので、いろいろと不明点は出てきそうですが、
実現したかったことはクリアになりましたので、本トピックはクローズします。

ありがとうございました。

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.