Перейти к содержанию
Форум Радиодар

Добавляем расширение gigacommerce (Aimeos ElasticSearch integration for #gigacommerce)


omega80

Рекомендуемые сообщения

Вы можете представить себе возможность публикации 1 миллиарда товаров на сайте интернет магазина?  С помощью расширения Gigacommerce вы сможете сделать это! И это не преувеличение.

image.png

Название: gigacommerce with ElasticSearch

Цена: 899 Евро

image.png

По данным статистики количества размещенных товарных позиций на сайтах (на 2024 год): 

  • на Amazon ~570 миллионов товаров
  • на Ozon ~280 миллионов товаров
  • на Wildberries ~190 миллионов товаров

Так вот, обычная система управления сайтом CMS может обрабатывать не более 500 тысяч уникальных товарных позиций. При планировании размещения более 1 миллиона артикулов необходимо проводить громадные по объему работы по оптимизации базы данных, движка и серверов.

После 10 лет работы с различными CMS системами мы вышли на производителя уникального проекта Aimeos и его мощного расширения Gigacommerce, позволяющего организовать супер мощный кэширующий сервер. 

Файл с описанием и краткой инструкцией:

README.md

 

Полезные команды:

после внесения изменений в настройки сервера Elasticsearch необходимо перезапустить:

sudo systemctl restart elasticsearch

Общая оптимизированная схема проекта для первого запуска:

image.png

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Содержимое файла описания #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.
 

Ссылка на комментарий
Поделиться на другие сайты

Основные этапы подключения Эластики:

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

Ссылка на комментарий
Поделиться на другие сайты

Появилась сложность в индексации в elasticsearch эскортированных товаров. После экспорта товаров из csv файла (размерность 20 тысяч на файл, продолжительность экспорта 4 минуты 12 секунд) все товары без ошибок появляются в админке, но на самом сайте (на фронте) не появляются.

А вот если зайти в товарную карточку и без изменений сохранить - тогда она появляется.

Можно, конечно, выделять по 500 товарных карточек и путем массового изменения (например выбор enable) заставить их появиться на сайте, но после очередного обновления информации (например стоимости товаров из списка поставщика) все эти товары, которые имеются в списке, пропадают.

Ищем решение проблемы, стандартные команды индексации не помогают.

Произвели возврат к базе MariaDB (убрали в настройках подключения к Elasticsearch) - при повторении процедуры импорта весь товар появился на фронте.

image.png

image.png

 

Ссылка на комментарий
Поделиться на другие сайты

команда для вывода первого товара:

curl --user elastic:'PASSWD' -X GET 'http://192.168.0.4:9200/aimeos/_search?size=1&pretty=true'

где PASSWD - это пароль для доступа к Elasticsearch

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Статистика пользователей

    366
    Пользователей
    311
    Максимум онлайн
    GeorgeChiem
    Новый пользователь
    GeorgeChiem
    Регистрация
×
×
  • Создать...