123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Elasticsearch\Model\Adapter\Index;
- use Magento\Framework\Locale\Resolver as LocaleResolver;
- use Magento\Elasticsearch\Model\Adapter\Index\Config\EsConfigInterface;
- class Builder implements BuilderInterface
- {
- /**
- * @var LocaleResolver
- */
- protected $localeResolver;
- /**
- * @var EsConfigInterface
- */
- protected $esConfig;
- /**
- * Current store ID.
- *
- * @var int
- */
- protected $storeId;
- /**
- * @param LocaleResolver $localeResolver
- * @param EsConfigInterface $esConfig
- */
- public function __construct(
- LocaleResolver $localeResolver,
- EsConfigInterface $esConfig
- ) {
- $this->localeResolver = $localeResolver;
- $this->esConfig = $esConfig;
- }
- /**
- * {@inheritdoc}
- */
- public function build()
- {
- $tokenizer = $this->getTokenizer();
- $filter = $this->getFilter();
- $charFilter = $this->getCharFilter();
- $settings = [
- 'analysis' => [
- 'analyzer' => [
- 'default' => [
- 'type' => 'custom',
- 'tokenizer' => key($tokenizer),
- 'filter' => array_merge(
- ['lowercase', 'keyword_repeat'],
- array_keys($filter)
- ),
- 'char_filter' => array_keys($charFilter)
- ]
- ],
- 'tokenizer' => $tokenizer,
- 'filter' => $filter,
- 'char_filter' => $charFilter,
- ],
- ];
- return $settings;
- }
- /**
- * {@inheritdoc}
- */
- public function setStoreId($storeId)
- {
- $this->storeId = $storeId;
- }
- /**
- * @return array
- */
- protected function getTokenizer()
- {
- $tokenizer = [
- 'default_tokenizer' => [
- 'type' => 'standard',
- ],
- ];
- return $tokenizer;
- }
- /**
- * @return array
- */
- protected function getFilter()
- {
- $filter = [
- 'default_stemmer' => $this->getStemmerConfig(),
- 'unique_stem' => [
- 'type' => 'unique',
- 'only_on_same_position' => true
- ]
- ];
- return $filter;
- }
- /**
- * @return array
- */
- protected function getCharFilter()
- {
- $charFilter = [
- 'default_char_filter' => [
- 'type' => 'html_strip',
- ],
- ];
- return $charFilter;
- }
- /**
- * @return array
- */
- protected function getStemmerConfig()
- {
- $stemmerInfo = $this->esConfig->getStemmerInfo();
- $this->localeResolver->emulate($this->storeId);
- $locale = $this->localeResolver->getLocale();
- if (isset($stemmerInfo[$locale])) {
- return [
- 'type' => $stemmerInfo['type'],
- 'language' => $stemmerInfo[$locale],
- ];
- }
- return [
- 'type' => $stemmerInfo['type'],
- 'language' => $stemmerInfo['default'],
- ];
- }
- }
|