scopeConfig = $scopeConfig; $this->clientResolver = $clientResolver ?: ObjectManager::getInstance()->get(ClientResolver::class); $this->engineResolver = $engineResolver ?: ObjectManager::getInstance()->get(EngineResolverInterface::class); $this->prefix = $prefix ?: $this->clientResolver->getCurrentEngine(); $this->engineList = $engineList; } /** * @inheritdoc * * @since 100.1.0 */ public function prepareClientOptions($options = []) { $defaultOptions = [ 'hostname' => $this->getElasticsearchConfigData('server_hostname'), 'port' => $this->getElasticsearchConfigData('server_port'), 'index' => $this->getElasticsearchConfigData('index_prefix'), 'enableAuth' => $this->getElasticsearchConfigData('enable_auth'), 'username' => $this->getElasticsearchConfigData('username'), 'password' => $this->getElasticsearchConfigData('password'), 'timeout' => $this->getElasticsearchConfigData('server_timeout') ? : self::ELASTICSEARCH_DEFAULT_TIMEOUT, ]; $options = array_merge($defaultOptions, $options); return $options; } /** * Retrieve information from Elasticsearch search engine configuration * * @param string $field * @param int $storeId * @return string|int * @since 100.1.0 */ public function getElasticsearchConfigData($field, $storeId = null) { return $this->getSearchConfigData($this->prefix . '_' . $field, $storeId); } /** * Retrieve information from search engine configuration * * @param string $field * @param int|null $storeId * @return string|int * @since 100.1.0 */ public function getSearchConfigData($field, $storeId = null) { $path = 'catalog/search/' . $field; return $this->scopeConfig->getValue($path, ScopeInterface::SCOPE_STORE, $storeId); } /** * Return true if third party search engine is used * * @return bool * @since 100.1.0 */ public function isElasticsearchEnabled() { return in_array($this->engineResolver->getCurrentSearchEngine(), $this->engineList); } /** * Get Elasticsearch index prefix * * @return string * @since 100.1.0 */ public function getIndexPrefix() { return $this->getElasticsearchConfigData('index_prefix'); } /** * Get Elasticsearch entity type * * @return string * @since 100.1.0 */ public function getEntityType() { return self::ELASTICSEARCH_TYPE_DOCUMENT; } }