From d77155122e9bf6a901518580be2f136a2cdf1b27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Tue, 15 Jul 2025 15:01:01 +0200 Subject: [PATCH 1/4] IBX-10311: Changed example of field mapper --- .../custom/config/field_mapper_services.yaml | 2 +- ...php => WebinarEventParentNameFieldMapper.php} | 16 +++++++++------- .../extensibility/solr_document_field_mappers.md | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) rename code_samples/search/custom/src/Search/FieldMapper/{WebinarEventTitleFulltextFieldMapper.php => WebinarEventParentNameFieldMapper.php} (80%) diff --git a/code_samples/search/custom/config/field_mapper_services.yaml b/code_samples/search/custom/config/field_mapper_services.yaml index 4da008c53b..413e3cbd1b 100644 --- a/code_samples/search/custom/config/field_mapper_services.yaml +++ b/code_samples/search/custom/config/field_mapper_services.yaml @@ -1,5 +1,5 @@ services: - App\Search\Mapper\WebinarEventTitleFulltextFieldMapper: + App\Search\FieldMapper\WebinarEventParentNameFieldMapper: arguments: - '@Ibexa\Contracts\Core\Persistence\Content\Handler' - '@Ibexa\Contracts\Core\Persistence\Content\Location\Handler' diff --git a/code_samples/search/custom/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php b/code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php similarity index 80% rename from code_samples/search/custom/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php rename to code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php index 6eae611537..0128a180c7 100644 --- a/code_samples/search/custom/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php +++ b/code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php @@ -8,10 +8,9 @@ use Ibexa\Contracts\Core\Search; use Ibexa\Contracts\Solr\FieldMapper\ContentFieldMapper; -class WebinarEventTitleFulltextFieldMapper extends ContentFieldMapper +class WebinarEventParentNameFieldMapper extends ContentFieldMapper { protected ContentHandler $contentHandler; - protected LocationHandler $locationHandler; public function __construct( @@ -22,13 +21,16 @@ public function __construct( $this->locationHandler = $locationHandler; } - public function accept(Content $content) + public function accept(Content $content): bool { // ContentType with ID 42 is webinar event - return $content->versionInfo->contentInfo->contentTypeId == 42; + return $content->versionInfo->contentInfo->contentTypeId === 42; } - public function mapFields(Content $content) + /** + * @return Search\Field[] + */ + public function mapFields(Content $content): array { $mainLocationId = $content->versionInfo->contentInfo->mainLocationId; $location = $this->locationHandler->load($mainLocationId); @@ -37,9 +39,9 @@ public function mapFields(Content $content) return [ new Search\Field( - 'fulltext', + 'parent_name', $parentContentInfo->name, - new Search\FieldType\FullTextField() + new Search\FieldType\StringField() ), ]; } diff --git a/docs/search/extensibility/solr_document_field_mappers.md b/docs/search/extensibility/solr_document_field_mappers.md index 7ee4247782..e65101b9a5 100644 --- a/docs/search/extensibility/solr_document_field_mappers.md +++ b/docs/search/extensibility/solr_document_field_mappers.md @@ -52,7 +52,7 @@ Mappers can be used on the extension points by registering them with the [servic - Location documents - `ibexa.search.solr.field.mapper.location` -The following example shows how you can index data from the parent location content, to make it available for full-text search on the child content. +The following example shows how you can index data from the parent location content, to make it available for search on the child content. The example relies on a use case of indexing webinar data on the webinar events, which are children of the webinar. The field mapper could then look like this: @@ -60,7 +60,7 @@ The field mapper could then look like this: [[= include_file('code_samples/search/custom/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php') =]] ``` -You index full text data only on the content document, therefore, you would register the service like this: +You index text data only on the content document, therefore, you would register the service like this: ``` yaml [[= include_file('code_samples/search/custom/config/field_mapper_services.yaml') =]] From 2f01f6986dd96c7993880888641f7bc0fd50ee41 Mon Sep 17 00:00:00 2001 From: mateuszdebinski Date: Tue, 15 Jul 2025 13:34:36 +0000 Subject: [PATCH 2/4] PHP & JS CS Fixes --- .../src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php | 1 + 1 file changed, 1 insertion(+) diff --git a/code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php b/code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php index 0128a180c7..25e20e98f1 100644 --- a/code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php +++ b/code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php @@ -11,6 +11,7 @@ class WebinarEventParentNameFieldMapper extends ContentFieldMapper { protected ContentHandler $contentHandler; + protected LocationHandler $locationHandler; public function __construct( From 86c93cf165aeded5378d0e8ba4b24b9937445b2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Wed, 16 Jul 2025 10:54:50 +0200 Subject: [PATCH 3/4] Corrected FQCN --- .../Search/FieldMapper/WebinarEventParentNameFieldMapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php b/code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php index 25e20e98f1..d0e79206db 100644 --- a/code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php +++ b/code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php @@ -29,7 +29,7 @@ public function accept(Content $content): bool } /** - * @return Search\Field[] + * @return \Ibexa\Contracts\Core\Search\Field[] */ public function mapFields(Content $content): array { From a3dbad69528e51692d16427d3074deae71153778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Wed, 6 Aug 2025 10:11:46 +0200 Subject: [PATCH 4/4] Corrected filename --- docs/search/extensibility/solr_document_field_mappers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/search/extensibility/solr_document_field_mappers.md b/docs/search/extensibility/solr_document_field_mappers.md index e65101b9a5..3d4f6b826c 100644 --- a/docs/search/extensibility/solr_document_field_mappers.md +++ b/docs/search/extensibility/solr_document_field_mappers.md @@ -57,7 +57,7 @@ The example relies on a use case of indexing webinar data on the webinar events, The field mapper could then look like this: ```php -[[= include_file('code_samples/search/custom/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php') =]] +[[= include_file('code_samples/search/custom/src/Search/FieldMapper/WebinarEventParentNameFieldMapper.php') =]] ``` You index text data only on the content document, therefore, you would register the service like this: