diff --git a/docs/Query/Span/SpanNear.md b/docs/Query/Span/SpanNear.md
index f063e2d83a71aa56732bbdec2bb154f8962846fa..9079d478f7e01238d9ef23755ba742a5cae42856 100644
--- a/docs/Query/Span/SpanNear.md
+++ b/docs/Query/Span/SpanNear.md
@@ -1 +1,40 @@
-Documentation in progress...
\ No newline at end of file
+# Span Near Query
+
+> More info about span near query is in the [official elasticsearch docs][1]
+
+Matches spans which are near one another. One can specify slop, the maximum number of intervening unmatched positions, as well as whether matches are required to be in-order. The span near query maps to Lucene SpanNearQuery. Here is an example:
+
+## Simple example
+
+```JSON
+{
+    "query": {
+        "span_near" : {
+            "clauses" : [
+                { "span_term" : { "field" : "value1" } },
+                { "span_term" : { "field" : "value2" } },
+                { "span_term" : { "field" : "value3" } }
+            ],
+            "slop" : 12,
+            "in_order" : false
+        }
+    }
+}
+```
+
+In DSL:
+
+```php
+$search = new Search();
+$spanNearQuery = new SpanNearQuery();
+$spanNearQuery->addQuery(new SpanTermQuery('field', 'value1'));
+$spanNearQuery->addQuery(new SpanTermQuery('field', 'value2'));
+$spanNearQuery->addQuery(new SpanTermQuery('field', 'value3'));
+$spanNearQuery->addParameter('slop', 12);
+$spanNearQuery->addParameter('in_order', false);
+$search->addQuery($spanNearQuery);
+
+$queryArray = $search->toArray();
+```
+
+[1]: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-near-query.html
diff --git a/src/BuilderBag.php b/src/BuilderBag.php
index 439febc6aabdc4e549ab48254de4c7b1e81667a0..997667fc110c2f794876a2e20e09602c93b6b33c 100644
--- a/src/BuilderBag.php
+++ b/src/BuilderBag.php
@@ -43,7 +43,7 @@ class BuilderBag
         if (method_exists($builder, 'getName')) {
             $name = $builder->getName();
         } else {
-            $name = uniqid();
+            $name = bin2hex(random_bytes(30));
         }
 
         $this->bag[$name] = $builder;
diff --git a/src/Query/Joining/NestedQuery.php b/src/Query/Joining/NestedQuery.php
index 4db5960a63e0948b47bccada85f82699535d1da9..e43ff18be4414ed6aa829cf096512492bbd69efd 100644
--- a/src/Query/Joining/NestedQuery.php
+++ b/src/Query/Joining/NestedQuery.php
@@ -67,4 +67,24 @@ class NestedQuery implements BuilderInterface
             )
         ];
     }
+
+    /**
+     * Returns nested query object.
+     *
+     * @return BuilderInterface
+     */
+    public function getQuery()
+    {
+        return $this->query;
+    }
+
+    /**
+     * Returns path this query is set for.
+     *
+     * @return string
+     */
+    public function getPath()
+    {
+        return $this->path;
+    }
 }
diff --git a/src/Search.php b/src/Search.php
index 5f84bba0cd9c97e91912b1f3618283ccd044235b..5dedceaf673a441438bee994d9bbc59eb6712718 100644
--- a/src/Search.php
+++ b/src/Search.php
@@ -663,6 +663,8 @@ class Search
             'lenient',
             'explain',
             '_source',
+            '_source_exclude',
+            '_source_include',
             'stored_fields',
             'sort',
             'track_scores',
diff --git a/src/SearchEndpoint/AbstractSearchEndpoint.php b/src/SearchEndpoint/AbstractSearchEndpoint.php
index ff008e59ddf5567c67fdb028a2194b7fdf4417d3..d3e851dcb4847b747daad3005bdec55e51164cb1 100644
--- a/src/SearchEndpoint/AbstractSearchEndpoint.php
+++ b/src/SearchEndpoint/AbstractSearchEndpoint.php
@@ -37,7 +37,7 @@ abstract class AbstractSearchEndpoint extends AbstractNormalizable implements Se
         }
 
         if (!$key) {
-            $key = uniqid();
+            $key = bin2hex(random_bytes(30));
         }
 
         $this->container[$key] = $builder;