diff --git a/src/Search.php b/src/Search.php
index 9760d652aa626f4ff07cc14838b6cb973de5a43a..2c72946b5adc0785601a90b8b32f7b4de4cf70ba 100644
--- a/src/Search.php
+++ b/src/Search.php
@@ -13,11 +13,13 @@ namespace ONGR\ElasticsearchDSL;
 
 use ONGR\ElasticsearchDSL\Aggregation\AbstractAggregation;
 use ONGR\ElasticsearchDSL\Highlight\Highlight;
+use ONGR\ElasticsearchDSL\InnerHit\AbstractInnerHit;
 use ONGR\ElasticsearchDSL\Query\BoolQuery;
 use ONGR\ElasticsearchDSL\SearchEndpoint\AbstractSearchEndpoint;
 use ONGR\ElasticsearchDSL\SearchEndpoint\AggregationsEndpoint;
 use ONGR\ElasticsearchDSL\SearchEndpoint\FilterEndpoint;
 use ONGR\ElasticsearchDSL\SearchEndpoint\HighlightEndpoint;
+use ONGR\ElasticsearchDSL\SearchEndpoint\InnerHitsEndpoint;
 use ONGR\ElasticsearchDSL\SearchEndpoint\PostFilterEndpoint;
 use ONGR\ElasticsearchDSL\SearchEndpoint\QueryEndpoint;
 use ONGR\ElasticsearchDSL\SearchEndpoint\SearchEndpointFactory;
@@ -328,6 +330,30 @@ class Search
         return $this->getEndpoint(AggregationsEndpoint::NAME)->getAll();
     }
 
+    /**
+     * Adds inner hit into search.
+     *
+     * @param AbstractInnerHit $innerHit
+     *
+     * @return $this
+     */
+    public function addInnerHit(AbstractInnerHit $innerHit)
+    {
+        $this->getEndpoint(InnerHitsEndpoint::NAME)->add($innerHit, $innerHit->getName());
+
+        return $this;
+    }
+
+    /**
+     * Returns all inner hits.
+     *
+     * @return BuilderInterface[]
+     */
+    public function getInnerHits()
+    {
+        return $this->getEndpoint(InnerHitsEndpoint::NAME)->getAll();
+    }
+
     /**
      * Adds sort to search.
      *
diff --git a/src/SearchEndpoint/InnerHitsEndpoint.php b/src/SearchEndpoint/InnerHitsEndpoint.php
new file mode 100644
index 0000000000000000000000000000000000000000..b3d4213090960b1683198a8a0fc1078498b92980
--- /dev/null
+++ b/src/SearchEndpoint/InnerHitsEndpoint.php
@@ -0,0 +1,42 @@
+<?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\SearchEndpoint;
+
+use ONGR\ElasticsearchDSL\InnerHit\AbstractInnerHit;
+use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
+
+/**
+ * Search inner hits dsl endpoint.
+ */
+class InnerHitsEndpoint extends AbstractSearchEndpoint
+{
+    /**
+     * Endpoint name
+     */
+    const NAME = 'inner_hits';
+
+    /**
+     * {@inheritdoc}
+     */
+    public function normalize(NormalizerInterface $normalizer, $format = null, array $context = [])
+    {
+        $output = [];
+        if (count($this->getAll()) > 0) {
+            /** @var AbstractInnerHit $innerHit */
+            foreach ($this->getAll() as $innerHit) {
+                $output[$innerHit->getName()] = $innerHit->toArray();
+            }
+        }
+
+        return $output;
+    }
+}
diff --git a/src/SearchEndpoint/SearchEndpointFactory.php b/src/SearchEndpoint/SearchEndpointFactory.php
index 291a631479b5f94eba66a6a4f6cda191e1348622..abfcf6112fdb86db708974913a992d2e64d63296 100644
--- a/src/SearchEndpoint/SearchEndpointFactory.php
+++ b/src/SearchEndpoint/SearchEndpointFactory.php
@@ -27,6 +27,7 @@ class SearchEndpointFactory
         'highlight' => 'ONGR\ElasticsearchDSL\SearchEndpoint\HighlightEndpoint',
         'aggregations' => 'ONGR\ElasticsearchDSL\SearchEndpoint\AggregationsEndpoint',
         'suggest' => 'ONGR\ElasticsearchDSL\SearchEndpoint\SuggestEndpoint',
+        'inner_hits' => 'ONGR\ElasticsearchDSL\SearchEndpoint\InnerHitsEndpoint',
     ];
 
     /**