1. Go to this page and download the library: Download artvys/search library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
artvys / search example snippets
use Your\Project\SearchSources\UsersSearchSource;
use Your\Project\SearchSources\InvoicesSearchSource;
use Your\Project\SearchSources\ExternalAPISearchSource;
use Artvys\Search\Engines\Compiled\SearchSourceRegistry;
use Artvys\Search\Engines\Compiled\Compilers\IO\IOCompilerFactory;
use Artvys\Search\Engines\Compiled\FetchingStrategies\FirstFitFetchingStrategy;
use Artvys\Search\Engines\Compiled\CompiledSearchEngine;
$registry = new SearchSourceRegistry();
$registry->register(new UsersSearchSource(), ['@']);
$registry->register(new InvoicesSearchSource(), ['#']);
$registry->register(new ExternalAPISearchSource(), ['api'], false);
$compilerFactory = new IOCompilerFactory($registry);
$fetchingStrategy = new FirstFitFetchingStrategy();
$engine = new CompiledSearchEngine($compilerFactory, $fetchingStrategy);
use Your\Project\SearchSources\UsersSearchSource;
use Your\Project\SearchSources\InvoicesSearchSource;
use Your\Project\SearchSources\ExternalAPISearchSource;
use Artvys\Search\Engines\Compiled\SearchSourceRegistry;
use Artvys\Search\Engines\Compiled\Compilers\IO\IOCompilerFactory;
use Artvys\Search\Engines\Compiled\FetchingStrategies\FirstFitFetchingStrategy;
use Artvys\Search\Engines\Compiled\CompiledSearchEngine;
use Artvys\Search\Engines\Compiled\Compilers\IO\SearchSourceProvider;
use Artvys\Search\SearchEngine;
$container->add(SearchSourceProvider::class, function() {
$registry = new SearchSourceRegistry();
$registry->register(new UsersSearchSource(), ['@']);
$registry->register(new InvoicesSearchSource(), ['#']);
$registry->register(new ExternalAPISearchSource(), ['api'], false);
return $registry;
});
$container->add(SearchEngine::class, function($c) {
$compilerFactory = new IOCompilerFactory($c->get(SearchSourceProvider::class));
$fetchingStrategy = new FirstFitFetchingStrategy();
return new CompiledSearchEngine($compilerFactory, $fetchingStrategy);
});
$results = $engine->search('Foo bar', 10);
use Artvys\Search\SearchEngine;
class SearchController {
public SearchEngine $searchEngine;
public function __construct(SearchEngine $searchEngine) {
$this->searchEngine = $searchEngine;
}
public function search(Request $request): Response {
return new JsonResponse($this->searchEngine->search($request->query('search'), $request->query('limit', 10)));
}
}
use Your\Project\SearchSources\TicketsSearchSource;
use Your\Project\SearchSources\InvoicesSearchSource;
use Artvys\Search\Engines\Compiled\SearchSourceRegistry;
$registry = new SearchSourceRegistry();
$registry->register(new TicketsSearchSource(), ['#']);
$registry->register(new InvoicesSearchSource(), ['#']);
use Artvys\Search\Engines\Compiled\SearchSources\Static\StaticSearchSource;
use Artvys\Search\SearchResult;
use Generator;
class UsersNavigationSearchSource extends StaticSearchSource {
protected function allResults(): Generator {
yield SearchResult::make('All users', 'Index page for all Users.', 'https://foo.bar');
yield SearchResult::make('Create a users', 'Page for the creation of a new user.', 'https://foo.bar');
}
}
use Your\Project\DBResultQueryBuilder;
use Artvys\Search\Engines\Compiled\SearchSources\Field\FieldSearchSource;
use Artvys\Search\Engines\Compiled\SearchSources\Field\SearchFieldBuilder;
use Artvys\Search\Engines\Compiled\CompiledQuery;
use Artvys\Search\Engines\Compiled\SearchSources\Field\Field;
use Artvys\Search\Engines\Compiled\SearchSources\Field\ResultQueryBuilder;
class UsersSearchSource extends FieldSearchSource {
protected function fields(SearchFieldBuilder $builder, CompiledQuery $query, int $limit): void {
$builder->add(Field::contains('name'))
->add(Field::contains('description'));
}
protected function makeResultQueryBuilder(): ResultQueryBuilder {
return new DBResultQueryBuilder('users');
}
}
use Artvys\Search\SearchEngine;
class CachedSearchEngine implements SearchEngine {
private SearchEngine $engine;
private Cache $cache;
private CacheKeyGenerator $cacheKeyGenerator;
private int $expiresInSeconds;
public function __construct(SearchEngine $engine, Cache $cache, CacheKeyGenerator $cacheKeyGenerator, int $expiresInSeconds = 3600) {
$this->engine = $engine;
$this->cache = $cache;
$this->cacheKeyGenerator = $cacheKeyGenerator;
$this->expiresInSeconds = $expiresInSeconds;
}
public function search(string $query, int $limit): array {
$key = $this->cacheKeyGenerator->generate($query, $limit);
if (!$this->cache->has($key)) {
$results = $this->engine->search($query, $limit);
$this->cache->remember($key, $results, $this->expiresInSeconds);
}
return $this->cache->get($key);
}
}
use Your\Project\CachedSearchEngine;
use Artvys\Search\Engines\Compiled\CompiledSearchEngine;
$engine = new CachedSearchEngine(
new CompiledSearchEngine(...),
new Cache(...),
new CacheKeyGenerator(...),
600
);
use \Artvys\Search\Engines\Compiled\SearchSource;
class CachedSearchSource implements SearchSource {
private SearchSource $source;
private Cache $cache;
private CacheKeyGenerator $cacheKeyGenerator;
private int $expiresInSeconds;
public function __construct(SearchSource $source, Cache $cache, CacheKeyGenerator $cacheKeyGenerator, int $expiresInSeconds = 3600) {
$this->source = $source;
$this->cache = $cache;
$this->cacheKeyGenerator = $cacheKeyGenerator;
$this->expiresInSeconds = $expiresInSeconds;
}
public function search(CompiledQuery $query, int $limit): array {
$key = $this->cacheKeyGenerator->generate((string)$query, $limit);
if (!$this->cache->has($key)) {
$results = $this->source->search($query, $limit);
$this->cache->remember($key, $results, $this->expiresInSeconds);
}
return $this->cache->get($key);
}
}
use Your\Project\SearchSources\UsersSearchSource;
use Artvys\Search\Engines\Compiled\SearchSourceRegistry;
$registry = new SearchSourceRegistry();
$registry->register(new CachedSearchSource(new UsersSearchSource()), ['#']);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.