INDEXATION FOR NEWBIES

What is the indexation ?

...

Country A

...

Country B

...

Country Z

...

Index1_A

Index7_Z

{
  "Id":"1287499",
  "is_b2c":"1",
  "is_b2b":"1",
  "product_status":"2",
  "material_status":"0",
  "delivery_sla":"B",
  "color_label":"GREEN",
  "design_key":"1287499",
  "design_label":"WELDINGROD GREEN",
  "categories":"AINR10645,own_emea_RA",
  "color_code":"0499",
  "color_family":"G",
  "diameter":"4 mm",
  "family":"var_ACCESSORIES",
  "length":"50000 mm",
  "order_online":"0",
  "packing_unit":"UN",
  "pattern":"UNICOLOR",
  "surface_per_box":"50 m²",
  "total_thickness":"4 mm",
  "variation_name":"WELDINGROD GREEN",
  "product_type":"WELDING",
  "accessory_type":"WEL02"
},
{"Id":"1287500","is_b2c":"1","is_b2b":"1","product_status":"2","material_status":"0","categories":"AINR10645,own_emea_RA","color_code":"0500","color_family":"U","color_label":"BLUE","design_key":"1287500","design_label":"WELDINGROD BLUE","diameter":"4 mm","family":"var_ACCESSORIES","length":"50000 mm","delivery_sla":"C","order_online":"0","packing_unit":"UN","pattern":"UNICOLOR","total_thickness":"4 mm","variation_name":"WELDINGROD BLUE","product_type":"WELDING","accessory_type":"WEL02"},{"Id":"1287501","is_b2c":"1","is_b2b":"1","product_status":"2","material_status":"0","categories":"AINR10645,own_emea_RA","color_code":"0501","color_family":"CG","color_label":"G","design_key":"1287501","design_label":"WELDINGROD MEDIUMGREY","diameter":"4 mm","family":"var_ACCESSORIES","length":"50000 mm","delivery_sla":"B","order_online":"0","packing_unit":"UN","pattern":"UNICOLOR","surface_per_box":"50 m²","total_thickness":"4 mm","variation_name":"WELDINGROD MEDIUMGREY","product_type":"WELDING","accessory_type":"WEL02"},
{"Id":"1287502","is_b2c":"1","is_b2b":"1","product_status":"2","material_status":"0","categories":"AINR10645,own_emea_RA","color_code":"0502","color_family":"CG","color_label":"LIGHT BROWN","delivery_sla":"B","design_key":"1287502","design_label":"WELDINGROD LIGHTBROWN","diameter":"4 mm","family":"var_ACCESSORIES","length":"50000 mm","order_online":"0","packing_unit":"UN","pattern":"UNICOLOR","surface_per_box":"50 m²","total_thickness":"4 mm","variation_name":"WELDINGROD LIGHTBROWN","accessory_type":"WEL02","product_type":"WELDING"},
{"Id":"1287503","is_b2c":"1","is_b2b":"1","product_status":"2","material_status":"0","categories":"AINR10645,own_emea_RA","color_code":"0503","color_family":"BW","color_label":"BROWN","delivery_sla":"B","design_key":"1287503","design_label":"WELDINGROD BROWN","diameter":"4 mm","family":"var_ACCESSORIES","length":"50000 mm","order_online":"0","packing_unit":"UN","pattern":"UNICOLOR","surface_per_box":"50 m²","total_thickness":"4 mm","variation_name":"WELDINGROD BROWN","product_type":"WELDING","accessory_type":"WEL02"},
{"Id":"1287504","is_b2c":"1","is_b2b":"1","product_status":"2","material_status":"0","design_key":"1287504","color_family":"Y","color_label":"MEDIUM YELLOW","design_label":"WELDINGROD MEDIUMYELLOW","diameter":"4 mm","family":"var_ACCESSORIES","length":"50000 mm","order_online":"0","total_thickness":"4 mm","variation_name":"WELDINGROD MEDIUMYELLOW","delivery_sla":"B","packing_unit":"UN","pattern":"UNICOLOR","surface_per_box":"50 m²","categories":"AINR10645,own_emea_RA","color_code":"0504","accessory_type":"WEL02","product_type":"WELDING"},
{"Id":"1287505","is_b2c":"1","is_b2b":"1","product_status":"2","material_status":"0","categories":"AINR10645,own_emea_RA","color_code":"0505","color_family":"Y","color_label":"DARK YELLOW","design_key":"1287505","design_label":"WELDINGROD DARKYELLOW","diameter":"4 mm","family":"var_ACCESSORIES","length":"50000 mm","delivery_sla":"B","order_online":"0","packing_unit":"UN","pattern":"UNICOLOR","surface_per_box":"50 m²","total_thickness":"4 mm","variation_name":"WELDINGROD DARKYELLOW","product_type":"WELDING","accessory_type":"WEL02"},
{"Id":"1287506","is_b2c":"0","is_b2b":"0","product_status":"","material_status":"5","collections":"-1","categories":"AINR10645,own_emea_RA","accessory_type":"WEL02","product_type":"WELDING","family":"ACCESSORIES"},
{"Id":"1287507","is_b2c":"0","is_b2b":"0","product_status":"","material_status":"0","collections":"-1","categories":"AINR10645,own_emea_RA","accessory_type":"WEL02","product_type":"WELDING","family":"ACCESSORIES"},
{"Id":"1287508","is_b2c":"0","is_b2b":"0","product_status":"","material_status":"1","collections":"-1","family":"ACCESSORIES","product_type":"WELDING","categories":"AINR10645,own_emea_RA","accessory_type":"WEL02"},
{"Id":"1287509","is_b2c":"1","is_b2b":"1","product_status":"2","material_status":"0","pattern":"UNICOLOR","surface_per_box":"50 m²","total_thickness":"4 mm","variation_name":"WELDINGROD LIGHT GREENBLUE","color_label":"LIGHT GREEN BLUE","design_key":"1287509","design_label":"WELDINGROD LIGHT GREENBLUE","diameter":"4 mm","family":"var_ACCESSORIES","length":"50000 mm","delivery_sla":"B","order_online":"0","packing_unit":"UN","categories":"AINR10645,own_emea_RA","color_code":"0509","color_family":"U","accessory_type":"WEL02","product_type":"WELDING"},
{"Id":"1287510","is_b2c":"0","is_b2b":"0","product_status":"","material_status":"9","collections":"-1","categories":"AINR10645,own_emea_RA","accessory_type":"WEL02","family":"ACCESSORIES","product_type":"WELDING"},
{"Id":"1287511","is_b2c":"0","is_b2b":"0","product_status":"","material_status":"1","collections":"-1","product_type":"WELDING","family":"ACCESSORIES","categories":"AINR10645,own_emea_RA","accessory_type":"WEL02"},
{"Id":"1287512","is_b2c":"0","is_b2b":"0","product_status":"","material_status":"1","collections":"-1","categories":"AINR10645,own_emea_RA","accessory_type":"WEL02","family":"ACCESSORIES","product_type":"WELDING"},
{"Id":"1287513","is_b2c":"1","is_b2b":"1","product_status":"2","material_status":"0","categories":"AINR10645,own_emea_RA","color_code":"0513","color_family":"R","color_label":"LIGHT RED BLUE","delivery_sla":"B","design_key":"1287513","design_label":"WELDINGROD LIGHT REDBLUE","diameter":"4 mm","family":"var_ACCESSORIES","length":"50000 mm","order_online":"0","packing_unit":"UN","pattern":"UNICOLOR","surface_per_box":"50 m²","total_thickness":"4 mm","variation_name":"WELDINGROD LIGHT REDBLUE","accessory_type":"WEL02","product_type":"WELDING"},
{"Id":"1287514","is_b2c":"0","is_b2b":"0","product_status":"","material_status":"0","collections":"-1","product_type":"WELDING","family":"ACCESSORIES","categories":"AINR10645,own_emea_RA","accessory_type":"WEL02"},
{"Id":"1287515","is_b2c":"1","is_b2b":"1","product_status":"2","material_status":"0","categories":"AINR10645,own_emea_RA","color_code":"0515","color_family":"R","color_label":"DARK RED BLUE","delivery_sla":"B","design_key":"1287515","design_label":"WELDINGROD DARK REDBLUE","diameter":"4 mm","family":"var_ACCESSORIES","length":"50000 mm","order_online":"0","packing_unit":"UN","pattern":"UNICOLOR","surface_per_box":"50 m²","total_thickness":"4 mm","variation_name":"WELDINGROD DARK REDBLUE","product_type":"WELDING","accessory_type":"WEL02"}

Provider.php

ServiceA.php

ServiceZ.php

Data.json

<?php

/**
 * Class CollectionProvider
 */
class CollectionProvider
{
    /**
     * Insert the collections in ES
     */
    public function populate(args)
    {
      
      $collections = getCollectionsFromFiles(); // Does a lot of Stuff
      foreach ($collections as $collection) {
      	$this->collectionIndex->addDocument($collection); // Add a document to an index
      }
    }
}

Mapper.php

Model.php

ServiceB.php

<?php

namespace AppBundle\Elastica\Model;

use Elastica\Document;

class Sku extends Document
{

    public function getData()
    {
        $rawTechnicalCharacteristics = [];
        if (null !== $this->technicalCharacteristics) {
            foreach ($this->technicalCharacteristics as $type => $technicalCharacteristic) {
                $rawTechnicalCharacteristics[$type] = $technicalCharacteristic->getValue();
            }
        }

        return [
            'sku_id'                              => $this->getId(),
            'sku_name'                            => $this->getName(),
            'sku_backing'                         => $this->getBacking(),
            'sku_color_name'                      => $this->getColorName(),
            'sku_thumbnail'                       => $this->getThumbnail(),
            'sku_product_type_label'              => $this->getProductTypeLabel(),
            'sku_format_type'                     => $this->getFormatType(),
            'sku_format_shape'                    => $this->getFormatShape(),
	    // And a hell lot more 
            'sku_length_per_box'                  => $this->getLengthPerBox(),
            'sku_locking_system'                  => $this->getLockingSystem(),
            'sku_staining_method'                 => $this->getStainingMethod(),
            'sku_dye_method'                      => $this->getDyeMethod(),
        ];
    }
}

When do I need to Index?

Title Text

<?php

namespace AppBundle\Elastica\Model;

use Elastica\Document;

class Sku extends Document
{

    public function getData()
    {
        $rawTechnicalCharacteristics = [];
        if (null !== $this->technicalCharacteristics) {
            foreach ($this->technicalCharacteristics as $type => $technicalCharacteristic) {
                $rawTechnicalCharacteristics[$type] = $technicalCharacteristic->getValue();
            }
        }

        return [
            'sku_id'                              => $this->getId(),
            'sku_name'                            => $this->getName(),
            'sku_backing'                         => $this->getBacking(),
            'sku_color_name'                      => $this->getColorName(),
            'sku_thumbnail'                       => $this->getThumbnail(),
            'sku_product_type_label'              => $this->getProductTypeLabel(),
            'sku_format_type'                     => $this->getFormatType(),
            'sku_format_shape'                    => $this->getFormatShape(),
	    // And a hell lot more 
            'sku_length_per_box'                  => $this->getLengthPerBox(),
            'sku_locking_system'                  => $this->getLockingSystem(),
            'sku_staining_method'                 => $this->getStainingMethod(),
            'sku_dye_method'                      => $this->getDyeMethod(),
        ];
    }
}

AsA wise developper, I start an indexation when I modify the getData function

<?php

namespace AppBundle\Elastica\Mapper;

class SkuMapper extends AbstractMapper
{        
    /**
     * @param array $technicalCharacteristics
     * @return Sku
     */
    private function getModel(array $technicalCharacteristics) {
    	$sku = new Sku();
        
		// A lot of mapping stuff before...

        if (!empty($technicalCharacteristics['thumbnail_image']) &&
            !empty($technicalCharacteristics['thumbnail_image']->getValue())) {
            $sku->setThumbnail($technicalCharacteristics['thumbnail_image']->getValue());
        } elseif ($sku->isAccessory() &&
            !empty($sku->getPatternCode()) &&
            isset($sku->getAccessoryType()['label']) &&
            isset($sku->getAccessoryType()['code'])
        ) {
            $sku->setThumbnail(
                $this->accessoryService->getThumbnail(
                    $sku->getPatternCode(),
                    $sku->getAccessoryType()['label'],
                    $sku->getAccessoryType()['code']
                )
            );
        }
        
       	// A lot of mapping stuff after...
        
        return $sku;
    }
}
<?php

namespace AppBundle\Elastica\Mapper;

class SkuMapper extends AbstractMapper
{        
    /**
     * @param array $technicalCharacteristics
     * @return Sku
     */
    private function getModel(array $technicalCharacteristics) {
    	$sku = new Sku();
        
		// A lot of mapping stuff before...

        if (!empty($technicalCharacteristics['thumbnail_image']) &&
            !empty($sku->setThumbnail($technicalCharacteristics['thumbnail_image']->getValue()))) {
            $sku->setThumbnail($technicalCharacteristics['thumbnail_image']->getValue());
        } elseif ($sku->isAccessory() &&
            !empty($sku->getPatternCode()) &&
            isset($sku->getAccessoryType()['label']) &&
            isset($sku->getAccessoryType()['code'])
        ) {
            $sku->setThumbnail(
                $this->accessoryService->getThumbnail(
                    $sku->getPatternCode(),
                    $sku->getAccessoryType()['label'],
                    $sku->getAccessoryType()['code']
                )
            );
        }
        
       	// A lot of mapping stuff after...
        
        return $sku;
    }
}

AsA wise developper, I start an indexation when I modify a Mapper

NBC FOR NEWBIES

PO: We need this new thumbnail field to have beautiful images displayed!

Gotcha! I'm on it!

<?php

namespace AppBundle\Elastica\Model;

use Elastica\Document;

class Sku extends Document
{

    public function getData()
    {
        $rawTechnicalCharacteristics = [];
        if (null !== $this->technicalCharacteristics) {
            foreach ($this->technicalCharacteristics as $type => $technicalCharacteristic) {
                $rawTechnicalCharacteristics[$type] = $technicalCharacteristic->getValue();
            }
        }

        return [
            'sku_id'                              => $this->getId(),
            'sku_name'                            => $this->getName(),
            'sku_backing'                         => $this->getBacking(),
            'sku_color_name'                      => $this->getColorName(),
            'sku_thumbnail'                       => $this->getThumbnail(),
            'sku_product_type_label'              => $this->getProductTypeLabel(),
            'sku_format_type'                     => $this->getFormatType(),
            'sku_format_shape'                    => $this->getFormatShape(),
	    // And a hell lot more 
            'sku_length_per_box'                  => $this->getLengthPerBox(),
            'sku_locking_system'                  => $this->getLockingSystem(),
            'sku_staining_method'                 => $this->getStainingMethod(),
            'sku_dye_method'                      => $this->getDyeMethod(),
        ];
    }
}
<?php

namespace AppBundle\Elastica\Model;

use Elastica\Document;

class Sku extends Document
{

    public function getData()
    {
        $rawTechnicalCharacteristics = [];
        if (null !== $this->technicalCharacteristics) {
            foreach ($this->technicalCharacteristics as $type => $technicalCharacteristic) {
                $rawTechnicalCharacteristics[$type] = $technicalCharacteristic->getValue();
            }
        }

        return [
            'sku_id'                              => $this->getId(),
            'sku_name'                            => $this->getName(),
            'sku_backing'                         => $this->getBacking(),
            'sku_color_name'                      => $this->getColorName(),
            'sku_product_type_label'              => $this->getProductTypeLabel(),
            'sku_format_type'                     => $this->getFormatType(),
            'sku_format_shape'                    => $this->getFormatShape(),
	    // And a hell lot more 
            'sku_length_per_box'                  => $this->getLengthPerBox(),
            'sku_locking_system'                  => $this->getLockingSystem(),
            'sku_staining_method'                 => $this->getStainingMethod(),
            'sku_dye_method'                      => $this->getDyeMethod(),
        ];
    }
}
class SkuRepository extends SearchRepository
{
    /**
     * @param array $skuIds
     *
     * @return Query
     */
    public function getSamplesFromSkuIdsQuery(array $skuIds) :Query
    {
        $query = new Query();
        $boolSkuQuery = new BoolQuery();

        $boolSkuQuery->addShould(new Query\Terms('sku_id.raw', $skuIds));

        $query->setQuery($boolSkuQuery);
        $query->setSource([
            'include' => [
                'sku_samples',
                'sku_color_code',
                'sku_color_name',
                'sku_texture_code',
                'sku_pattern_code',
                'sku_thumbnail',
            ],
        ]);

        return $query;
    }
}

Indexation Process

Deployment Process

Ticket merged

deck

By Gabriel Andrin

deck

  • 706