diff --git a/src/Search.php b/src/Search.php
index 0a524d918398056b1d98d58be20412938ba897ee..08b69669f865d22e6209b0974077726dc2fe7670 100644
--- a/src/Search.php
+++ b/src/Search.php
@@ -383,11 +383,11 @@ class Search
     /**
     * Adds suggest into search.
     *
-    * @param Suggest $suggest
+    * @param BuilderInterface $suggest
     *
     * @return $this
     */
-    public function addSuggest(Suggest $suggest)
+    public function addSuggest(BuilderInterface $suggest)
     {
         $this->getEndpoint(SuggestEndpoint::NAME)->add($suggest, $suggest->getName());
 
diff --git a/src/SearchEndpoint/SuggestEndpoint.php b/src/SearchEndpoint/SuggestEndpoint.php
index 323bd2280f29c42fb0459582e788c156db2cb707..2e2e16ac8adb34ec2f80ef4aea4faed5c59956dd 100644
--- a/src/SearchEndpoint/SuggestEndpoint.php
+++ b/src/SearchEndpoint/SuggestEndpoint.php
@@ -11,7 +11,7 @@
 
 namespace ONGR\ElasticsearchDSL\SearchEndpoint;
 
-use ONGR\ElasticsearchDSL\Suggest\Suggest;
+use ONGR\ElasticsearchDSL\Suggest\TermSuggest;
 use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
 
 /**
@@ -31,9 +31,9 @@ class SuggestEndpoint extends AbstractSearchEndpoint
     {
         $output = [];
         if (count($this->getAll()) > 0) {
-            /** @var Suggest $suggest */
+            /** @var TermSuggest $suggest */
             foreach ($this->getAll() as $suggest) {
-                $output[$suggest->getName()] = $suggest->toArray();
+                $output = array_merge($output, $suggest->toArray());
             }
         }
 
diff --git a/src/Suggest/Suggest.php b/src/Suggest/TermSuggest.php
similarity index 91%
rename from src/Suggest/Suggest.php
rename to src/Suggest/TermSuggest.php
index fe70fb947e0ea931a273c58f6e94166058b06c32..d2afa0c2c6f403caa0496144dbb1b8f1da350ac7 100644
--- a/src/Suggest/Suggest.php
+++ b/src/Suggest/TermSuggest.php
@@ -14,7 +14,7 @@ namespace ONGR\ElasticsearchDSL\Suggest;
 use ONGR\ElasticsearchDSL\BuilderInterface;
 use ONGR\ElasticsearchDSL\ParametersTrait;
 
-class Suggest implements BuilderInterface
+class TermSuggest implements BuilderInterface
 {
     use ParametersTrait;
 
@@ -44,7 +44,7 @@ class Suggest implements BuilderInterface
      */
     public function getType()
     {
-        return 'suggest';
+        return 'term_suggest';
     }
 
     /**
@@ -70,10 +70,10 @@ class Suggest implements BuilderInterface
             $this->addParameter('size', self::DEFAULT_SIZE);
         }
 
-        $output = [
+        $output = [$this->name => [
             'text' => $this->text,
             'term' => $this->getParameters(),
-        ];
+        ]];
 
         return $output;
     }
diff --git a/tests/SearchEndpoint/SuggestEndpointTest.php b/tests/SearchEndpoint/SuggestEndpointTest.php
index c1760b80e1a32e236e8046aff55b77fa497fe3c0..7702a56cc8631cae93af71e554636b9e6287a1b5 100644
--- a/tests/SearchEndpoint/SuggestEndpointTest.php
+++ b/tests/SearchEndpoint/SuggestEndpointTest.php
@@ -12,7 +12,7 @@
 namespace ONGR\ElasticsearchDSL\Tests\Unit\SearchEndpoint;
 
 use ONGR\ElasticsearchDSL\SearchEndpoint\SuggestEndpoint;
-use ONGR\ElasticsearchDSL\Suggest\Suggest;
+use ONGR\ElasticsearchDSL\Suggest\TermSuggest;
 use PHPUnit_Framework_MockObject_MockObject as MockObject;
 use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
 
@@ -33,7 +33,7 @@ class SuggestEndpointTest extends \PHPUnit_Framework_TestCase
     {
         $suggestName = 'acme_suggest';
         $text = 'foo';
-        $suggest = new Suggest($suggestName, $text);
+        $suggest = new TermSuggest($suggestName, $text);
         $endpoint = new SuggestEndpoint();
         $endpoint->add($suggest, $suggestName);
         $builders = $endpoint->getAll();
@@ -54,11 +54,11 @@ class SuggestEndpointTest extends \PHPUnit_Framework_TestCase
             'Symfony\Component\Serializer\Normalizer\NormalizerInterface'
         );
 
-        $suggest = new Suggest('foo', 'bar');
+        $suggest = new TermSuggest('foo', 'bar');
         $instance->add($suggest);
 
         $this->assertEquals(
-            ['foo' => $suggest->toArray()],
+            $suggest->toArray(),
             $instance->normalize($normalizerInterface)
         );
     }
diff --git a/tests/SearchTest.php b/tests/SearchTest.php
index fe438aa42f91c9449e18a5cd688aabc18f8abfc2..77d7e40830a6d251c1440270f627a20158dee411 100644
--- a/tests/SearchTest.php
+++ b/tests/SearchTest.php
@@ -15,7 +15,7 @@ use ONGR\ElasticsearchDSL\Query\MissingQuery;
 use ONGR\ElasticsearchDSL\Query\TermQuery;
 use ONGR\ElasticsearchDSL\Search;
 use ONGR\ElasticsearchDSL\Sort\FieldSort;
-use ONGR\ElasticsearchDSL\Suggest\Suggest;
+use ONGR\ElasticsearchDSL\Suggest\TermSuggest;
 
 /**
  * Test for Search.
@@ -266,7 +266,7 @@ class SearchTest extends \PHPUnit_Framework_TestCase
                     ],
                 ],
             ],
-            (new Search())->addSuggest(new Suggest('foo', 'bar', ['field' => 'title', 'size' => 2])),
+            (new Search())->addSuggest(new TermSuggest('foo', 'bar', ['field' => 'title', 'size' => 2])),
         ];
 
         $cases['multiple_suggests'] = [
@@ -283,8 +283,8 @@ class SearchTest extends \PHPUnit_Framework_TestCase
                 ],
             ],
             (new Search())
-                ->addSuggest(new Suggest('foo', 'bar', ['field' => 'title', 'size' => 2]))
-                ->addSuggest(new Suggest('bar', 'foo', ['field' => 'title', 'size' => 2])),
+                ->addSuggest(new TermSuggest('foo', 'bar', ['field' => 'title', 'size' => 2]))
+                ->addSuggest(new TermSuggest('bar', 'foo', ['field' => 'title', 'size' => 2])),
         ];
 
         return $cases;
diff --git a/tests/Suggest/SuggestTest.php b/tests/Suggest/TermSuggestTest.php
similarity index 80%
rename from tests/Suggest/SuggestTest.php
rename to tests/Suggest/TermSuggestTest.php
index a680f476b81dcf97462b5f772750dcb325ebf53a..d20c0bdca9d21312e1ac5acda3190a0cdaa37365 100644
--- a/tests/Suggest/SuggestTest.php
+++ b/tests/Suggest/TermSuggestTest.php
@@ -11,7 +11,7 @@
 
 namespace ONGR\ElasticsearchDSL\Tests\Suggest;
 
-use ONGR\ElasticsearchDSL\Suggest\Suggest;
+use ONGR\ElasticsearchDSL\Suggest\TermSuggest;
 
 class SuggestTest extends \PHPUnit_Framework_TestCase
 {
@@ -20,9 +20,9 @@ class SuggestTest extends \PHPUnit_Framework_TestCase
      */
     public function testSuggestGetType()
     {
-        $suggest = new Suggest('foo', 'bar');
+        $suggest = new TermSuggest('foo', 'bar');
         $result = $suggest->getType();
-        $this->assertEquals('suggest', $result);
+        $this->assertEquals('term_suggest', $result);
     }
 
     /**
@@ -31,14 +31,14 @@ class SuggestTest extends \PHPUnit_Framework_TestCase
     public function testSuggestWithoutFieldAndSize()
     {
         // Case #1 suggest without field and size params.
-        $suggest = new Suggest('foo', 'bar');
-        $expected = [
+        $suggest = new TermSuggest('foo', 'bar');
+        $expected = ['foo' => [
             'text' => 'bar',
             'term' => [
                 'field' => '_all',
                 'size' => 3,
             ],
-        ];
+        ]];
         $this->assertEquals($expected, $suggest->toArray());
     }
 
@@ -47,7 +47,7 @@ class SuggestTest extends \PHPUnit_Framework_TestCase
      */
     public function testToArray()
     {
-        $suggest = new Suggest(
+        $suggest = new TermSuggest(
             'foo',
             'bar',
             [
@@ -56,14 +56,14 @@ class SuggestTest extends \PHPUnit_Framework_TestCase
                 'analyzer' => 'whitespace',
             ]
         );
-        $expected = [
+        $expected = ['foo' => [
             'text' => 'bar',
             'term' => [
                 'field' => 'title',
                 'size' => 5,
                 'analyzer' => 'whitespace',
             ],
-        ];
+        ]];
         $this->assertEquals($expected, $suggest->toArray());
     }
 }