From e8c895a056dee0f2668ed8d081a2021a45490174 Mon Sep 17 00:00:00 2001 From: Ambroise Maupate Date: Mon, 13 Mar 2023 16:44:24 +0100 Subject: [PATCH] feat: Rename getCompositeIdentifier to getIdempotentIdentifier and provided a fallback. BREAKING CHANGE: All Solr documents MUST have a idempotent ID field to ease up Solr indexing (no more need to delete previous index entry before indexing an entity). --- .../src/SearchEngine/AbstractSolarium.php | 14 ++++++++++++-- .../src/SearchEngine/SolariumDocument.php | 2 +- .../SearchEngine/SolariumDocumentTranslation.php | 2 +- .../src/SearchEngine/SolariumNodeSource.php | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/RoadizCoreBundle/src/SearchEngine/AbstractSolarium.php b/lib/RoadizCoreBundle/src/SearchEngine/AbstractSolarium.php index 7e5eb218..d4ac841a 100644 --- a/lib/RoadizCoreBundle/src/SearchEngine/AbstractSolarium.php +++ b/lib/RoadizCoreBundle/src/SearchEngine/AbstractSolarium.php @@ -196,7 +196,7 @@ public function cleanAndCommit(): void public function index(): bool { if ($this->document instanceof Document) { - $this->document->setKey('id', $this->getCompositeIdentifier()); + $this->document->setKey('id', $this->getIdempotentIdentifier()); try { foreach ($this->getFieldsAssoc() as $key => $value) { @@ -310,5 +310,15 @@ public function cleanTextContent(?string $content, bool $stripMarkdown = true): return $content; } - abstract protected function getCompositeIdentifier(): string; + /** + * You MUST override this method to provide an idempotent identifier. + * This identifier MUST be the same for the same entity. + * + * @return string + */ + protected function getIdempotentIdentifier(): string + { + // This is a fallback for backward compatibility. + return uniqid('', true); + } } diff --git a/lib/RoadizCoreBundle/src/SearchEngine/SolariumDocument.php b/lib/RoadizCoreBundle/src/SearchEngine/SolariumDocument.php index 319d132f..666606c2 100644 --- a/lib/RoadizCoreBundle/src/SearchEngine/SolariumDocument.php +++ b/lib/RoadizCoreBundle/src/SearchEngine/SolariumDocument.php @@ -206,7 +206,7 @@ public function index(): bool return true; } - protected function getCompositeIdentifier(): string + protected function getIdempotentIdentifier(): string { throw new \InvalidArgumentException('SolariumDocument should not provide any ID'); } diff --git a/lib/RoadizCoreBundle/src/SearchEngine/SolariumDocumentTranslation.php b/lib/RoadizCoreBundle/src/SearchEngine/SolariumDocumentTranslation.php index 5ad317de..9f0fad0a 100644 --- a/lib/RoadizCoreBundle/src/SearchEngine/SolariumDocumentTranslation.php +++ b/lib/RoadizCoreBundle/src/SearchEngine/SolariumDocumentTranslation.php @@ -67,7 +67,7 @@ public function clean(Query $update): bool return true; } - protected function getCompositeIdentifier(): string + protected function getIdempotentIdentifier(): string { $namespace = explode('\\', get_class($this->documentTranslation)); // get last 3 parts of namespace diff --git a/lib/RoadizCoreBundle/src/SearchEngine/SolariumNodeSource.php b/lib/RoadizCoreBundle/src/SearchEngine/SolariumNodeSource.php index 5ed06134..cf21bdf5 100644 --- a/lib/RoadizCoreBundle/src/SearchEngine/SolariumNodeSource.php +++ b/lib/RoadizCoreBundle/src/SearchEngine/SolariumNodeSource.php @@ -72,7 +72,7 @@ public function clean(Query $update): bool return true; } - protected function getCompositeIdentifier(): string + protected function getIdempotentIdentifier(): string { $namespace = explode('\\', get_class($this->nodeSource)); // get last 3 parts of namespace