diff --git a/README.md b/README.md new file mode 100644 index 0000000..3002ca7 --- /dev/null +++ b/README.md @@ -0,0 +1,141 @@ +

+

The perfect starting point to build your Algolia integration for PHP Framework

+

+ +## ✨ Features + +- Thin & minimal low-level HTTP client to interact with Algolia's API +- Supports php `^5.6` +- Additional index methods +- Splitting Records +- Generate Settings + +## 💡 Getting Started + +First, install Algolia PHP Helper API Client via the [composer](https://getcomposer.org/) package manager: +```bash +composer require algolia/algoliasearch-client-php-helper +``` +## Supported platforms + +The PHP-Helper is compatible with PHP version 5.6 and later. Build on top from our [PHP Client](https://github.com/algolia/algoliasearch-client-php). + +## Algolia PHP Client +You should consider reading this [part](https://www.algolia.com/doc/api-client/getting-started/install/php/) of our documentation if you have never tried our [PHP Client](https://github.com/algolia/algoliasearch-client-php). +## Additional index methods + +### Count + +```php + +$numberOfRecords = $index->count(); + +``` +## Advanced + +### Splitting Records + +For performance reasons, objects in Algolia should be 10kb or less. Large records can be split into smaller records by splitting on a logical chunk such as paragraphs or sentences. + +#### HTML Splitter + +Sometimes, you will need a more elaborate logic to split specific types of content. A good example is HTML. +`The Algolia\AlgoliaSearch\Helper\Splitters\HtmlSplitter` lets you split HTML content into coherent records. + +Additionally, the `HtmlSplitter` provides another layer of logic. Because HTML is hierarchy-based, the splitter also adds an attribute in each record: `importance`. +This value is calculated for each record, based on the hierarchy of the current chunk. The splitter also updates the settings by adding [custom ranking](/doc/guides/managing-results/must-do/custom-ranking/) based on the `importance` attribute. + +```php + + $splitter = new HtmlSplitter(); + $records = $splitter->split($array); + + $index->saveObjects($array,['autoGenerateObjectIDIfNotExist' => true]); + + $index->setSettings( + [ + 'customRanking' => ['asc('importance')'] + ] + ); + + +``` + +By default, the HTML splitter parses these tags: `h1`,`h2`,`h3`,`h4`,`h5`,`h6` and `p`. +However, if you want to check less or more tags, you can do it like this: + +```php +{ + $tags = [ + 'h1', + 'h2', + 'h3', + 'p', + ]; + + $splitter = new HtmlSplitter($tags); + + $records = $splitter->split($array); +} +``` + +## Writing splitters +If you want to split other kinds of content, you can create your own splitter class. + +One of the primary benefits of creating a splitter class is the ability +to type-hint any dependencies your splitter may need in its constructor. +The declared dependencies will automatically be resolved and injected +into the splitter instance. + +Writing a splitter is simple. Create a new class that implements +`Algolia\ScoutExtended\Contracts\SplitterContract`, and the `split` +method should split the given `$value` as needed: + +```php +namespace App\Search\Splitters; + +use Algolia\AlgoliaSearch\Helper\Contracts\SplitterContract; + +class CustomSplitter implements SplitterContract +{ + /** + * Splits the given value. + * + * @param mixed $value + * + * @return array + */ + public function split($searchable, $value): array + { + // Your splitting logic. + return $array; + } +} +``` +## Generate Settings +Performance is important. However, for a search to be successful, results need to be relevant to the user. PHP-Helper provides a tool that you may use to optimize the search experience based on your data. + +### Settings Factory + +To optimize your search based on your data, you need to configure properly all settings for your index. With Algolia you are able to directly set settings on the `Algolia dashboard`. This step may take time and is a bit complex. + +The `SettingsFactory` class provide a method `create()`which will take as input one sample of your data and generate automatically settings for you. + +```php + +$array = [ + 'category_name' => 'Foo', + 'likes_count' => 'Bar', + 'slug' => 'Baz', + 'name_password' => 'Bam' +]; + +$detectedSettings = SettingsFactory::create($array); + +$this->index->setSettings($settings) +``` + +Keep in mind, this is the first step to bring the best search for your use case, you'll need to iterate and update settings on your own. +## 📄 License + +Algolia PHP API Client is an open-sourced software licensed under the [MIT license](LICENSE.md).