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;