mirror of
https://github.com/Codappix/search_core.git
synced 2024-12-22 22:36:10 +01:00
FEATURE: Provide basic caching
This commit is contained in:
parent
4c99009ea0
commit
f955a9b70a
7 changed files with 77 additions and 3 deletions
|
@ -188,6 +188,20 @@ class SearchRequest implements SearchRequestInterface
|
|||
return $this->offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used, e.g. by caching to determine identifier.
|
||||
*/
|
||||
public function __sleep()
|
||||
{
|
||||
return [
|
||||
'query',
|
||||
'filter',
|
||||
'facets',
|
||||
'offset',
|
||||
'limit',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \BadMethodCallException
|
||||
*/
|
||||
|
|
|
@ -30,6 +30,8 @@ use Codappix\SearchCore\DataProcessing\Service as DataProcessorService;
|
|||
use Codappix\SearchCore\Domain\Model\FacetRequest;
|
||||
use Codappix\SearchCore\Domain\Model\SearchResult;
|
||||
use Codappix\SearchCore\Utility\ArrayUtility;
|
||||
use TYPO3\CMS\Core\Cache\CacheManager;
|
||||
use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
|
||||
use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
|
||||
|
||||
/**
|
||||
|
@ -57,22 +59,30 @@ class SearchService implements SearchServiceInterface
|
|||
*/
|
||||
protected $dataProcessorService;
|
||||
|
||||
/**
|
||||
* @var FrontendInterface
|
||||
*/
|
||||
protected $cache;
|
||||
|
||||
/**
|
||||
* @param ConnectionInterface $connection
|
||||
* @param ConfigurationContainerInterface $configuration
|
||||
* @param ObjectManagerInterface $objectManager
|
||||
* @param DataProcessorService $dataProcessorService
|
||||
* @param CacheManager $cacheManager
|
||||
*/
|
||||
public function __construct(
|
||||
ConnectionInterface $connection,
|
||||
ConfigurationContainerInterface $configuration,
|
||||
ObjectManagerInterface $objectManager,
|
||||
DataProcessorService $dataProcessorService
|
||||
DataProcessorService $dataProcessorService,
|
||||
CacheManager $cacheManager
|
||||
) {
|
||||
$this->connection = $connection;
|
||||
$this->configuration = $configuration;
|
||||
$this->objectManager = $objectManager;
|
||||
$this->dataProcessorService = $dataProcessorService;
|
||||
$this->cache = $cacheManager->getCache('search_core');
|
||||
}
|
||||
|
||||
public function search(SearchRequestInterface $searchRequest): SearchResultInterface
|
||||
|
@ -85,7 +95,15 @@ class SearchService implements SearchServiceInterface
|
|||
$searchRequest->setConnection($this->connection);
|
||||
$searchRequest->setSearchService($this);
|
||||
|
||||
return $this->processResult($this->connection->search($searchRequest));
|
||||
$identifier = sha1('search' . serialize($searchRequest));
|
||||
if ($this->cache->has($identifier)) {
|
||||
return $this->cache->get($identifier);
|
||||
}
|
||||
|
||||
$result = $this->processResult($this->connection->search($searchRequest));
|
||||
$this->cache->set($identifier, $result);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,6 +4,7 @@ v0.1.0
|
|||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
0.1.0/2018-added-caching
|
||||
0.1.0/2018-added-content-element-wizard
|
||||
0.1.0/2018-changed-interfaces
|
||||
0.1.0/2018-elasticsearch-upgrade
|
||||
|
|
22
Documentation/source/changelog/0.1.0/2018-added-caching.rst
Normal file
22
Documentation/source/changelog/0.1.0/2018-added-caching.rst
Normal file
|
@ -0,0 +1,22 @@
|
|||
Feature "Added caching"
|
||||
=======================
|
||||
|
||||
Processing searches are now cacheable, the TYPO3 caching framework is used for
|
||||
caching. By default the ``NullBackend`` is used to keep old behaviour, which matches
|
||||
searches the best.
|
||||
|
||||
Still if the same search is run multiple times during a single request, the
|
||||
``TransientMemoryBackend`` is a nice option.
|
||||
|
||||
Depending on search backend, one might also use a different backend for caching and
|
||||
configure some TTL.
|
||||
|
||||
.. note::
|
||||
|
||||
Paging is currently not supported for caching.
|
||||
|
||||
Using ``NullBackend`` or ``TransientMemoryBackend`` will work, but using persistent
|
||||
backends in combination with fluid pagination widget will lead to errors right
|
||||
now.
|
||||
|
||||
For further information, check out official :ref:`t3explained:caching` documentation.
|
|
@ -304,6 +304,7 @@ texinfo_documents = [
|
|||
intersphinx_mapping = {
|
||||
't3tcaref': ('https://docs.typo3.org/typo3cms/TCAReference/', None),
|
||||
't3tsref': ('https://docs.typo3.org/typo3cms/TyposcriptReference/', None),
|
||||
't3explained': ('https://docs.typo3.org/typo3cms/CoreApiReference/', None),
|
||||
}
|
||||
extlinks = {
|
||||
'project': ('https://github.com/Codappix/search_core/projects/%s', 'Github project: '),
|
||||
|
|
|
@ -30,6 +30,8 @@ use Codappix\SearchCore\Domain\Model\SearchRequest;
|
|||
use Codappix\SearchCore\Domain\Model\SearchResult;
|
||||
use Codappix\SearchCore\Domain\Search\SearchService;
|
||||
use Codappix\SearchCore\Tests\Unit\AbstractUnitTestCase;
|
||||
use TYPO3\CMS\Core\Cache\CacheManager;
|
||||
use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
|
||||
use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
|
||||
|
||||
class SearchServiceTest extends AbstractUnitTestCase
|
||||
|
@ -68,6 +70,13 @@ class SearchServiceTest extends AbstractUnitTestCase
|
|||
{
|
||||
parent::setUp();
|
||||
|
||||
$cacheMock = $this->getMockBuilder(FrontendInterface::class)->getMock();
|
||||
$cacheManagerMock = $this->getMockBuilder(CacheManager::class)->getMock();
|
||||
$cacheManagerMock->expects($this->any())
|
||||
->method('getCache')
|
||||
->with('search_core')
|
||||
->willReturn($cacheMock);
|
||||
|
||||
$this->result = $this->getMockBuilder(SearchResultInterface::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -88,7 +97,8 @@ class SearchServiceTest extends AbstractUnitTestCase
|
|||
$this->connection,
|
||||
$this->configuration,
|
||||
$this->objectManager,
|
||||
$this->dataProcessorService
|
||||
$this->dataProcessorService,
|
||||
$cacheManagerMock
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -54,6 +54,14 @@
|
|||
'<INCLUDE_TYPOSCRIPT: source="FILE:EXT:' . $extension . '/Configuration/TSconfig/Page/Mod/Wizards/NewContentElement.tsconfig">'
|
||||
);
|
||||
|
||||
if (!is_array($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['search_core'])) {
|
||||
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['search_core'] = [];
|
||||
}
|
||||
if (!isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['search_core']['backend'])) {
|
||||
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['search_core']['backend'] =
|
||||
\TYPO3\CMS\Core\Cache\Backend\NullBackend::class;
|
||||
}
|
||||
|
||||
if (empty($configuration) ||
|
||||
(isset($configuration['disable.']['elasticsearch']) &&
|
||||
filter_var($configuration['disable.']['elasticsearch'], FILTER_VALIDATE_BOOLEAN) === false)
|
||||
|
|
Loading…
Reference in a new issue