File tree Expand file tree Collapse file tree 4 files changed +81
-0
lines changed
tests/Integration/Builders Expand file tree Collapse file tree 4 files changed +81
-0
lines changed Original file line number Diff line number Diff line change @@ -167,6 +167,7 @@ The builder supports various search parameters and provides a number of useful h
167167* [ trackScores] ( docs/available-methods.md#trackscores )
168168* [ trackTotalHits] ( docs/available-methods.md#tracktotalhits )
169169* [ when] ( docs/available-methods.md#when )
170+ * [ scriptFields] ( docs/available-methods.md#scriptfields )
170171
171172### Search Results
172173
Original file line number Diff line number Diff line change @@ -564,3 +564,16 @@ $searchResult = Book::searchQuery($query)
564564 })
565565 ->execute();
566566```
567+
568+ ### scriptFields
569+
570+ This method allows you to [ write scripts] ( https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-using.html ) :
571+
572+ ``` php
573+ $searchResult = Book::searchQuery($query)
574+ ->scriptFields('title_length', [
575+ 'lang' => 'painless',
576+ 'source' => "doc['title'].value.length()",
577+ ])
578+ ->execute();
579+ ```
Original file line number Diff line number Diff line change @@ -63,6 +63,7 @@ class SearchParametersBuilder
6363 private ?bool $ explain ;
6464 private ?int $ terminateAfter ;
6565 private ?bool $ requestCache ;
66+ private array $ scriptFields ;
6667
6768 public function __construct (Model $ model )
6869 {
@@ -321,6 +322,21 @@ public function requestCache(bool $requestCache): self
321322 return $ this ;
322323 }
323324
325+ public function scriptFieldsRaw (array $ scriptFields ): self
326+ {
327+ $ this ->scriptFields = $ scriptFields ;
328+ return $ this ;
329+ }
330+
331+ public function scriptFields (string $ script , array $ parameters ): self
332+ {
333+ if (!isset ($ this ->scriptFields )) {
334+ $ this ->scriptFields = [];
335+ }
336+ $ this ->scriptFields [$ script ] = ['script ' => $ parameters ];
337+ return $ this ;
338+ }
339+
324340 public function buildSearchParameters (): SearchParameters
325341 {
326342 $ searchParameters = new SearchParameters ();
@@ -419,6 +435,10 @@ public function buildSearchParameters(): SearchParameters
419435 $ searchParameters ->requestCache ($ this ->requestCache );
420436 }
421437
438+ if (isset ($ this ->scriptFields )) {
439+ $ searchParameters ->scriptFields ($ this ->scriptFields );
440+ }
441+
422442 return $ searchParameters ;
423443 }
424444
Original file line number Diff line number Diff line change @@ -652,4 +652,51 @@ public function test_search_parameters_with_request_cache_can_be_built(): void
652652
653653 $ this ->assertEquals ($ expected , $ actual );
654654 }
655+
656+ public function test_search_parameters_with_raw_script_fields_can_be_built (): void
657+ {
658+ $ rawScriptFields = [
659+ 'title_length ' => [
660+ 'script ' => [
661+ 'lang ' => 'painless ' ,
662+ 'source ' => "doc['title'].value.length() " ,
663+ ],
664+ ],
665+ ];
666+
667+ $ expected = (new SearchParameters ())
668+ ->indices ([(new Book ())->searchableAs ()])
669+ ->scriptFields ($ rawScriptFields );
670+
671+ $ actual = (new SearchParametersBuilder (new Book ()))
672+ ->scriptFieldsRaw ($ rawScriptFields )
673+ ->buildSearchParameters ();
674+
675+ $ this ->assertEquals ($ expected , $ actual );
676+ }
677+
678+ public function test_search_parameters_with_script_fields_can_be_built (): void
679+ {
680+ $ scriptFields = [
681+ 'title_length ' => [
682+ 'script ' => [
683+ 'lang ' => 'painless ' ,
684+ 'source ' => "doc['title'].value.length() " ,
685+ ],
686+ ],
687+ ];
688+
689+ $ expected = (new SearchParameters ())
690+ ->indices ([(new Book ())->searchableAs ()])
691+ ->scriptFields ($ scriptFields );
692+
693+ $ actual = (new SearchParametersBuilder (new Book ()))
694+ ->scriptFields ('title_length ' , [
695+ 'lang ' => 'painless ' ,
696+ 'source ' => "doc['title'].value.length() " ,
697+ ])
698+ ->buildSearchParameters ();
699+
700+ $ this ->assertEquals ($ expected , $ actual );
701+ }
655702}
You can’t perform that action at this time.
0 commit comments