To enable virtual category indexer
or change a cron schedule go to: Store > Configuration > MageSuite > Virtual Category Indexer > General
Command | Description |
---|---|
indexer:reindex elasticsuite_virtual_category_indexer |
Reindex all virtual categories. It reindex whole catalogsearch_category index |
magesuite:elasticsuite:virtual-category-products-relations:reindex [-s, --strategy [STRATEGY]] [-c , --ids [CATEGORY IDS]] |
Reindex virtual categories with strategy (full, list, category) |
magesuite:elasticsuite:virtual-category-products-relations:delete |
Cleanup/revert indexed virtual categories relations |
Full reindexation is runing automaticaly by cron schedule.
Class | Responsibility |
---|---|
MageSuite\ElasticsuiteVirtualCategoryIndexer\Model\Indexer\VirtualCategoryIndexer | Insert product ids into the table catalog_category_product and refresh catalog and elasticsuite indexes |
MageSuite\ElasticsuiteVirtualCategoryIndexer\Model\ElasticsuiteVirtualCategory\Model\Preview | Allow to get raw data from from response from elasticsearch using getRawData() method |
MageSuite\ElasticsuiteVirtualCategoryIndexer\Model\Catalog\ResourceModel\CategoryProduct | Extension Class for Magento\Catalog\Model\ResourceModel\CategoryProduct . Allow to insert product ids for a virtual category into the table catalog_category_product and get theirs ids for other operations |
MageSuite\ElasticsuiteVirtualCategoryIndexer\Model\ResourceModel\CategoryProductRelations | Resource Model which provide the method to delete category ids from the table catalog_category_product . |
MageSuite\ElasticsuiteVirtualCategoryIndexer\Plugin\Catalog\Category\ReindexOnChange | Plugin which is call before runing the reindex method on category model and causes run virtual category indexer |
MageSuite\ElasticsuiteVirtualCategoryIndexer\Plugin\ElasticsuiteVirtualCategory\Model\Rule\GetCategorySearchQuery | Plugin which change value of is_virtual_category attribute to null . It force sending standard category request to elasticsearch instead of depends of the attribute value. |
Module provide the extension attribute virtual_query
to modify request to elasticsaerch using the plugin.
If it has true
smile works standardly. False
value remove virtual query request.
See: \Smile\ElasticsuiteVirtualCategory\Model\Rule::getCategorySearchQuery
public function getCategorySearchQuery($category, $excludedCategories = []): ?QueryInterface
{
$query = null;
if (!is_object($category)) {
$category = $this->categoryFactory->create()->setStoreId($this->getStoreId())->load($category);
}
if (!in_array($category->getId(), $excludedCategories)) {
$excludedCategories[] = $category->getId();
if ((bool) $category->getIsVirtualCategory() && $category->getIsActive()) {
$query = $this->getVirtualCategoryQuery($category, $excludedCategories, $category->getData('virtual_category_root'));
} elseif ($category->getId() && $category->getIsActive()) {
$query = $this->getStandardCategoryQuery($category, $excludedCategories);
}
if ($query && $category->hasChildren()) {
$query = $this->addChildrenQueries($query, $category, $excludedCategories);
}
}
return $query;
}
Module install a new category attribute virtual_category_reindex_required
. If this attribute has value=1
smile works standardly.
To remove product from categories run full reindexation.
If you see products on the preview in admin area:
it seems that ES is able to return the right product IDs in the indexer.
Make sure that the script provides the right category object here:
vendor/creativestyle/magesuite-elasticsuite-virtual-category-indexer/Model/Indexer/VirtualCategoryIndexer.php:150
should be the same as here:
vendor/creativestyle/magesuite-elasticsuite-virtual-category-indexer/Controller/Adminhtml/Category/Virtual/Preview.php:67