diff --git a/src/Typesense/Index.php b/src/Typesense/Index.php index 7d14076..2e918af 100644 --- a/src/Typesense/Index.php +++ b/src/Typesense/Index.php @@ -7,6 +7,7 @@ use Statamic\Facades\Blink; use Statamic\Search\Documents; use Statamic\Search\Index as BaseIndex; +use Statamic\Search\Result; use Statamic\Support\Arr; use Typesense\Client; use Typesense\Exceptions\ObjectNotFound; @@ -184,4 +185,14 @@ public function client() { return $this->client; } + + public function extraAugmentedResultData(Result $result) + { + + if (is_null($highlight = Arr::get($result->getRawResult(), 'search_highlight')) && ! empty($highlight)) { + return []; + } + + return ['search_highlight' => Arr::get(Arr::first($highlight), 'snippet')]; + } } diff --git a/tests/Unit/IndexTest.php b/tests/Unit/IndexTest.php index bce387e..4d320d4 100644 --- a/tests/Unit/IndexTest.php +++ b/tests/Unit/IndexTest.php @@ -132,4 +132,35 @@ public function it_sorts_by_specified_order() $this->assertSame(['Entry 2', 'Entry 1'], collect($results['results'])->pluck('title')->all()); } + + #[Test] + public function it_adds_search_highlight() + { + $entry1 = Facades\Entry::make() + ->id('test-2') + ->collection('pages') + ->data(['title' => 'Entry 1']) + ->save(); + + $results = Facades\Search::index('typesense_index')->searchUsingApi('Entry 1'); + + $this->assertEquals('Entry 1', $results['results'][0]['search_highlight']['title']['snippet']); + } + + #[Test] + public function it_augments_with_search_highlight() + { + $entry1 = Facades\Entry::make() + ->id('test-2') + ->collection('pages') + ->data(['title' => 'Entry 1']) + ->save(); + + $index = Facades\Search::index('typesense_index'); + $result = $index->search('Entry 1')->get()->first(); + + $augmentedData = $index->extraAugmentedResultData($result); + + $this->assertSame(['search_highlight' => 'Entry 1'], $augmentedData); + } }