From bc8b0ae8cefb32986fe86072685ee1e03aa0af16 Mon Sep 17 00:00:00 2001 From: Alexander Schranz Date: Sun, 4 Feb 2024 17:20:08 +0100 Subject: [PATCH] Add highlight implementation for redisearch adapter --- .../src/RediSearchSchemaManager.php | 2 +- .../src/RediSearchSearcher.php | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/seal-redisearch-adapter/src/RediSearchSchemaManager.php b/packages/seal-redisearch-adapter/src/RediSearchSchemaManager.php index 9665ffd8..a11262f3 100644 --- a/packages/seal-redisearch-adapter/src/RediSearchSchemaManager.php +++ b/packages/seal-redisearch-adapter/src/RediSearchSchemaManager.php @@ -173,7 +173,7 @@ private function createJsonFields(array $fields, string $prefix = '', string $js 'sortable' => $field->sortable, 'filterable' => $field->filterable, ], - $field instanceof Field\ObjectField => $indexFields = \array_replace($indexFields, $this->createJsonFields($field->fields, $name, $jsonPath)), + $field instanceof Field\ObjectField => $indexFields = \array_replace($indexFields, $this->createJsonFields($field->fields, $name . '.', $jsonPath)), $field instanceof Field\TypedField => \array_map(function ($fields, $type) use ($name, &$indexFields, $jsonPath, $field) { $newJsonPath = $jsonPath . '[\'' . $type . '\']'; if ($field->multiple) { diff --git a/packages/seal-redisearch-adapter/src/RediSearchSearcher.php b/packages/seal-redisearch-adapter/src/RediSearchSearcher.php index 35e5c747..45482d43 100644 --- a/packages/seal-redisearch-adapter/src/RediSearchSearcher.php +++ b/packages/seal-redisearch-adapter/src/RediSearchSearcher.php @@ -96,6 +96,20 @@ public function search(Search $search): Result } } + if ($search->highlightFields !== []) { + $arguments[] = 'HIGHLIGHT'; + $arguments[] = 'FIELDS'; + $arguments[] = \count($search->highlightFields); + + foreach ($search->highlightFields as $highlightField) { + $arguments[] = $highlightField; + } + + $arguments[] = 'TAGS'; + $arguments[] = $search->highlightPreTag; + $arguments[] = $search->highlightPostTag; + } + $arguments[] = 'DIALECT'; $arguments[] = '3';