Your IP : 216.73.216.43


Current Path : /home/rtorresani/www/vendor/magento/module-elasticsearch/SearchAdapter/Filter/Builder/
Upload File :
Current File : //home/rtorresani/www/vendor/magento/module-elasticsearch/SearchAdapter/Filter/Builder/Term.php

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Magento\Elasticsearch\SearchAdapter\Filter\Builder;

use Magento\Elasticsearch\Model\Adapter\FieldMapper\Product\AttributeProvider;
use Magento\Framework\Search\Request\Filter\Term as TermFilterRequest;
use Magento\Framework\Search\Request\FilterInterface as RequestFilterInterface;
use Magento\Elasticsearch\Model\Adapter\FieldMapperInterface;
use Magento\Elasticsearch\Model\Adapter\FieldMapper\Product\FieldProvider\FieldType\ConverterInterface
    as FieldTypeConverterInterface;

/**
 * Term filter builder
 */
class Term implements FilterInterface
{
    /**
     * @var FieldMapperInterface
     */
    private $fieldMapper;

    /**
     * @var AttributeProvider
     */
    private $attributeAdapterProvider;

    /**
     * @var array
     * @see \Magento\Elasticsearch\Elasticsearch5\Model\Adapter\FieldMapper\Product\FieldProvider\FieldType\Resolver\IntegerType::$integerTypeAttributes
     */
    private $integerTypeAttributes = ['category_ids'];

    /**
     * @param FieldMapperInterface $fieldMapper
     * @param AttributeProvider $attributeAdapterProvider
     * @param array $integerTypeAttributes
     */
    public function __construct(
        FieldMapperInterface $fieldMapper,
        AttributeProvider $attributeAdapterProvider,
        array $integerTypeAttributes = []
    ) {
        $this->fieldMapper = $fieldMapper;
        $this->attributeAdapterProvider = $attributeAdapterProvider;
        $this->integerTypeAttributes = array_merge($this->integerTypeAttributes, $integerTypeAttributes);
    }

    /**
     * Build term filter request
     *
     * @param RequestFilterInterface|TermFilterRequest $filter
     * @return array
     */
    public function buildFilter(RequestFilterInterface $filter)
    {
        $filterQuery = [];

        $attribute = $this->attributeAdapterProvider->getByAttributeCode($filter->getField());
        $fieldName = $this->fieldMapper->getFieldName($filter->getField());

        if ($attribute->isTextType() && !in_array($attribute->getAttributeCode(), $this->integerTypeAttributes)) {
            $suffix = FieldTypeConverterInterface::INTERNAL_DATA_TYPE_KEYWORD;
            $fieldName .= '.' . $suffix;
        }

        if ($filter->getValue() !== false) {
            $operator = is_array($filter->getValue()) ? 'terms' : 'term';
            $filterQuery []= [
                $operator => [
                    $fieldName => $filter->getValue(),
                ],
            ];
        }
        return $filterQuery;
    }
}