diff --git a/src/Aggregation/Bucketing/DiversifiedSamplerAggregation.php b/src/Aggregation/Bucketing/DiversifiedSamplerAggregation.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6c3461aeb629d6cfa71c324d3caa6dd43d7b778
--- /dev/null
+++ b/src/Aggregation/Bucketing/DiversifiedSamplerAggregation.php
@@ -0,0 +1,85 @@
+<?php
+
+/*
+ * This file is part of the ONGR package.
+ *
+ * (c) NFQ Technologies UAB <info@nfq.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace ONGR\ElasticsearchDSL\Aggregation\Bucketing;
+
+use ONGR\ElasticsearchDSL\Aggregation\AbstractAggregation;
+use ONGR\ElasticsearchDSL\Aggregation\Type\BucketingTrait;
+
+/**
+ * Class representing geo diversified sampler aggregation.
+ *
+ * @link https://goo.gl/yzXvqD
+ */
+class DiversifiedSamplerAggregation extends AbstractAggregation
+{
+    use BucketingTrait;
+
+    /**
+     * Defines how many results will be received from each shard
+     * @param integer $shardSize
+     */
+    private $shardSize;
+
+    /**
+     * DiversifiedSamplerAggregation constructor.
+     *
+     * @param string $name Aggregation name
+     * @param string $field Elasticsearch field name
+     * @param int $shardSize Shard size, by default it's 100
+     */
+    public function __construct($name, $field = null, $shardSize = null)
+    {
+        parent::__construct($name);
+
+        $this->setField($field);
+        $this->setShardSize($shardSize);
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getShardSize()
+    {
+        return $this->shardSize;
+    }
+
+    /**
+     * @param mixed $shardSize
+     */
+    public function setShardSize($shardSize)
+    {
+        $this->shardSize = $shardSize;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function getType()
+    {
+        return 'diversified_sampler';
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function getArray()
+    {
+        $out = array_filter(
+            [
+                'field' => $this->getField(),
+                'shard_size' => $this->getShardSize(),
+            ]
+        );
+
+        return $out;
+    }
+}