omega80 Опубликовано 24 января Поделиться Опубликовано 24 января Вы можете представить себе возможность публикации 1 миллиарда товаров на сайте интернет магазина? С помощью расширения Gigacommerce вы сможете сделать это! И это не преувеличение. Название: gigacommerce with ElasticSearch Цена: 899 Евро По данным статистики количества размещенных товарных позиций на сайтах (на 2024 год): на Amazon ~570 миллионов товаров на Ozon ~280 миллионов товаров на Wildberries ~190 миллионов товаров Так вот, обычная система управления сайтом CMS может обрабатывать не более 500 тысяч уникальных товарных позиций. При планировании размещения более 1 миллиона артикулов необходимо проводить громадные по объему работы по оптимизации базы данных, движка и серверов. После 10 лет работы с различными CMS системами мы вышли на производителя уникального проекта Aimeos и его мощного расширения Gigacommerce, позволяющего организовать супер мощный кэширующий сервер. Файл с описанием и краткой инструкцией: README.md Полезные команды: после внесения изменений в настройки сервера Elasticsearch необходимо перезапустить: sudo systemctl restart elasticsearch Общая оптимизированная схема проекта для первого запуска: Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 5 февраля Автор Поделиться Опубликовано 5 февраля Содержимое файла описания #gigacommerce (Elasticsearch): # ai-elastic Aimeos ElasticSearch integration for #gigacommerce ## Support ElasticSearch versions * 7.x * 8.x ElasticSearch 5.x and 6.x are supported up to Aimeos 2020.10 LTS only. ## Configuration ### ElasticSearch server Add this to your Aimeos configuration file (Symfony requires YAML format) or without the `'resource'` key to your `resource.php` config file: ``` 'resource' => [ // if products are completely available in ES (products not in DB) 'es' => [ 'hosts' => [ '127.0.0.1:9200', ], 'index' => 'aimeos', 'SSLVerification' => false, // for self-signed certificates 'basicAuthentication' => ['elastic', '<password>'], // ElasticSearch 8+ 'selectorClass' => '\Elasticsearch\ConnectionPool\Selectors\StickyRoundRobinSelector', 'settings' => [ 'number_of_shards' => 5, // adapt to your needs 'number_of_replicas' => 0, // adapt to your needs 'max_result_window' => 10000, // maximum number of results retrieved // 'refresh_interval' => -1, // for initial indexing only ], // 'norefresh' => false, // for initial indexing only ], // if products from database are indexed in ES (products in DB and ES) 'es-index' => [ 'hosts' => [ '127.0.0.1:9200', ], 'index' => 'aimeos', 'SSLVerification' => false, // for self-signed certificates 'basicAuthentication' => ['elastic', '<password>'], // ElasticSearch 8+ 'selectorClass' => '\Elasticsearch\ConnectionPool\Selectors\StickyRoundRobinSelector', 'settings' => [ 'number_of_shards' => 5, // adapt to your needs 'number_of_replicas' => 0, // adapt to your needs 'max_result_window' => 10000, // maximum number of results retrieved // 'refresh_interval' => -1, // for initial indexing only ], // 'norefresh' => false, // for initial indexing only ], // if stock levels should be stored in ES (stock levels not in DB) 'es-stock' => [ 'hosts' => [ '127.0.0.1:9200', ], 'index' => 'aimeos_stock', 'SSLVerification' => false, // for self-signed certificates 'basicAuthentication' => ['elastic', '<password>'], // ElasticSearch 8+ 'selectorClass' => '\Elasticsearch\ConnectionPool\Selectors\StickyRoundRobinSelector', 'settings' => [ 'number_of_shards' => 5, // adapt to your needs 'number_of_replicas' => 0, // adapt to your needs 'max_result_window' => 10000, // maximum number of results retrieved // 'refresh_interval' => -1, // for initial indexing only ], // 'norefresh' => false, // for initial indexing only ] ] ``` For the number of shards, you should start with the number of CPUs of your server. As upper limit, each shard shouldn't contain much more than 50GB of data. If you have more than one ElasticSearch node, replicas are good for fault tolerance and can handle more search requests but are bad for initial indexing performance. You should better add replicas after your initial indexing is done. ### Using ElasticSearch To use ElasticSearch for index, product and stock data, add this to your Aimeos configuration file or without the `'mshop'` key to your `mshop.php` config file: ``` 'mshop' => [ 'index' => [ 'manager' => [ 'name' => 'Elastic', // Only if products are not in DB // 'name' => 'ElasticIndex', // If products exist in DB 'attribute' => [ 'name' => 'Elastic', ], 'catalog' => [ 'name' => 'Elastic', ], 'price' => [ 'name' => 'Elastic', ], 'supplier' => [ 'name' => 'Elastic', ], 'text' => [ 'name' => 'Elastic', ], ] ], // Only if products are not in DB 'product' => [ 'manager' => [ 'name' => 'Elastic', 'lists' => [ 'name' => 'Elastic', 'type' => [ 'name' => 'Elastic', ], ], 'property' => [ 'name' => 'Elastic', 'type' => [ 'name' => 'Elastic', ], ], 'type' => [ 'name' => 'Elastic', ], ] ], // Only if products are not in DB 'stock' => [ 'manager' => [ 'name' => 'Elastic', 'type' => [ 'name' => 'Elastic', ], ] ] ] ``` If you want to use ElasticSearch as secondary cache for the products in the mshop_product table, the `mshop/product/manager/elastic/only` must be set to `false` and only the index manager must be configured as `name => Elastic`. ### Additional configuration options These settings can be used to tune indexing speed: **mshop/index/manager/chunksize** (default: 10000): Number of documents sent to the ElasticSearch server in one index request during index rebuild. Higher values may result in faster indexing but requires more memory. **mshop/index/manager/elastic/maxchunks** (default: 20): Number of concurrent index requests sent to the ElasticSearch server at once. Higher values may result in faster indexing but requires more memory. Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 6 февраля Автор Поделиться Опубликовано 6 февраля Основные этапы подключения Эластики: 1) сервер - aimeos 2) сервер - Elasticsearch После стандартной установки сервера Elasticsearch на нем необходимо открыть внешний доступ: network.host: 0.0.0.0 # Разрешить подключения с других IP http.port: 9200 discovery.type: single-node # Для тестовых сред xpack.security.enabled: false # Отключите, если не требуется и после этого перезапустить Elasticsearch: sudo systemctl restart elastic На сервере Aimeos необходимо добавить в файл с настройками следующие строки: 'mshop' => [ 'index' => [ 'manager' => [ 'name' => 'Elasticsearch', 'host' => 'your-elasticsearch-host', // IP или домен удалённого сервера 'port' => 9200, // Порт Elasticsearch 'username' => 'your-username', // Если требуется аутентификация 'password' => 'your-password', ], ], ], Также в этот же файл Aimeos (ниже) необходимо добавить в раздел "'resource' => [": // if products are completely available in ES (products not in DB) 'es' => [ 'hosts' => [ '127.0.0.1:9200', ], 'index' => 'aimeos', 'SSLVerification' => false, // for self-signed certificates 'basicAuthentication' => ['elastic', '<password>'], // ElasticSearch 8+ 'selectorClass' => '\Elasticsearch\ConnectionPool\Selectors\StickyRoundRobinSelector', 'settings' => [ 'number_of_shards' => 5, // adapt to your needs 'number_of_replicas' => 0, // adapt to your needs 'max_result_window' => 10000, // maximum number of results retrieved // 'refresh_interval' => -1, // for initial indexing only ], // 'norefresh' => false, // for initial indexing only ], Команда для переиндексации: php artisan aimeos:setup --option=setup/default/demo:0 либо 1, если нужны демоданные. Проверка индексов на сервере Elasticsearch: http://YOURIP:9200/_cat/indices?v Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 18 февраля Автор Поделиться Опубликовано 18 февраля Появилась сложность в индексации в elasticsearch эскортированных товаров. После экспорта товаров из csv файла (размерность 20 тысяч на файл, продолжительность экспорта 4 минуты 12 секунд) все товары без ошибок появляются в админке, но на самом сайте (на фронте) не появляются. А вот если зайти в товарную карточку и без изменений сохранить - тогда она появляется. Можно, конечно, выделять по 500 товарных карточек и путем массового изменения (например выбор enable) заставить их появиться на сайте, но после очередного обновления информации (например стоимости товаров из списка поставщика) все эти товары, которые имеются в списке, пропадают. Ищем решение проблемы, стандартные команды индексации не помогают. Произвели возврат к базе MariaDB (убрали в настройках подключения к Elasticsearch) - при повторении процедуры импорта весь товар появился на фронте. Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 19 февраля Автор Поделиться Опубликовано 19 февраля BIC0000001-0020548.csv Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 20 февраля Автор Поделиться Опубликовано 20 февраля Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 21 февраля Автор Поделиться Опубликовано 21 февраля команда для вывода первого товара: curl --user elastic:'PASSWD' -X GET 'http://192.168.0.4:9200/aimeos/_search?size=1&pretty=true' где PASSWD - это пароль для доступа к Elasticsearch Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 21 февраля Автор Поделиться Опубликовано 21 февраля Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 24 февраля Автор Поделиться Опубликовано 24 февраля Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 24 февраля Автор Поделиться Опубликовано 24 февраля Ошибка была в обработчике импорта, разработчик уже внес исправление и теперь всё отлично импортируется! Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 26 февраля Автор Поделиться Опубликовано 26 февраля Ссылка на комментарий Поделиться на другие сайты Поделиться
omega80 Опубликовано 26 февраля Автор Поделиться Опубликовано 26 февраля Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти