Index Strings As Numeric Attributes
Introduction# A
In some situations, it makes sense to index a numeric representation of a string attribute, for example for sorting by clothing size. Size is usually a string (S, M, L, etc), but sorting alphabetically will yield strange results (S, L, M). It makes sense to replace these values with a numeric attribute to sort.
It is possible to add a new attribute containing this value by implementing a custom observer.
To make changes to the attributes being indexed, observe the algolia_after_create_product_object
event with a custom observer.
This tutorial assumes knowledge of writing a custom observer. More info can be found here.
Create observer# A
Create the Observer/TransformAttribute.php
file, and add a new Observer class in it.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace Algolia\CustomAlgolia\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class TransformAttribute implements ObserverInterface
{
public function execute(Observer $observer)
{
$record = $observer->getData('custom_data');
// $sizes = ['S', 'M', 'L'];
$sizes = $record['sizes'];
// S => 1, M => 2, L => 3
$replacementNumbers = [1, 2, 3];
$record['numeric_sizes'] = array_replace($sizes, $replacementNumbers);
}
}
The code in the execute
block can be modified as needed. In this example, the clothing sizes are transformed into numeric values.
Register the observer# A
To register your observer, add the following snippet to the etc/events.xml
file:
1
2
3
<event name="algolia_after_create_product_object">
<observer name="customalgolia_transform_attribute" instance="Algolia\CustomAlgolia\Observer\TransformAttribute" />
</event>
Reindex data# A
With the custom observer in place, the catalog needs to be reindexed in order to for the changes to take effect. Read more about (re)indexing here.