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'], ]; } }