1. Go to this page and download the library: Download s2/rose 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/ */
s2 / rose example snippets
$pdo = new \PDO('mysql:host=127.0.0.1;dbname=s2_rose_test;charset=utf8', 'username', 'passwd');
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
use S2\Rose\Storage\Database\PdoStorage;
$storage = new PdoStorage($pdo, 'table_prefix_');
$storage->erase();
use S2\Rose\Stemmer\PorterStemmerEnglish;
use S2\Rose\Stemmer\PorterStemmerRussian;
// For optimization primary language goes first (in this case Russian)
$stemmer = new PorterStemmerRussian(new PorterStemmerEnglish());
use S2\Rose\Indexer;
$indexer = new Indexer($storage, $stemmer);
use S2\Rose\Entity\Indexable;
// Main parameters
$indexable = new Indexable(
'id_1', // External ID - an identifier in your system
'Test page title', // Title
'This is the first page to be indexed. I have to make up a content.',
1 // Instance ID - an optional ID of your subsystem
);
// Other optional parameters
$indexable
->setKeywords('singlekeyword, multiple keywords') // The same as Meta Keywords
->setDescription('Description can be used in snippets') // The same as Meta Description
->setDate(new \DateTime('2016-08-24 00:00:00'))
->setUrl('url1')
->setRelevanceRatio(3.14) // Multiplier for important pages
;
$indexer->index($indexable);
$indexable = new Indexable(
'id_2',
'Test page title 2',
'This is the second page to be indexed. Let\'s compose something new.'
);
$indexable->setKeywords('content, page');
$indexer->index($indexable);
$indexer->removeById($externalId, $instanceId);
use S2\Rose\Finder;
use S2\Rose\Entity\Query;
$finder = new Finder($storage, $stemmer);
$resultSet = $finder->find(new Query('content'));
foreach ($resultSet->getItems() as $item) {
// first iteration: second iteration:
$item->getId(); // 'id_2' 'id_1'
$item->getInstanceId(); // null 1
$item->getTitle(); // 'Test page title 2' 'Test page title'
$item->getUrl(); // '' 'url1'
$item->getDescription(); // '' 'Description can be used in snippets'
$item->getDate(); // null new \DateTime('2016-08-24 00:00:00')
$item->getRelevance(); // 4.1610856664112195 0.26907154598642522
$item->getSnippet(); // 'This is the second page...' 'I have to make up a <i>content</i>.'
}
$query = new Query('content');
$query
->setLimit(10) // 10 results per page
->setOffset(20) // third page
;
$resultSet = $finder->find($query);
$resultSet->getTotalCount(); // Returns total amount of found items (for pagination links)
$resultSet = $finder->find((new Query('content'))->setInstanceId(1));
foreach ($resultSet->getItems() as $item) {
// first iteration only:
$item->getId(); // 'id_1'
$item->getInstanceId(); // 1
}
use S2\Rose\Entity\ExternalContent;
use S2\Rose\Snippet\SnippetBuilder;
$finder->setSnippetLineSeparator(' · '); // Set snippet line separator. Default is '... '.
$resultSet->getItems()[0]->getSnippet();
// 'I have to make up a <i>content</i>. · I have changed the <i>content</i>.'
use S2\Rose\Extractor\ExtractorInterface;
use S2\Rose\Indexer;
class CustomExtractor implements ExtractorInterface
{
// ...
// Please refer to the source code
// to figure out how to create an extractor.
}
$indexer = new Indexer($storage, $stemmer, new CustomExtractor(), new Logger());
$similarItems = $readStorage->getSimilar(new ExternalId('id_2'));
// The result contains the following data:
// $similarItems[0] = [
// 'tocWithMetadata' => new TocEntryWithMetadata(...),
// 'external_id' => 'id_1',
// 'instance_id' => '1',
// 'title' => 'Test page title',
// 'snippet' => 'This is the first page to be indexed.',
// 'snippet2' => 'I have to make up a content.',
// ],
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.