marcelsud / elastic-search-plugin
Elastic search integration for Sylius.
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 44
Type:sylius-bundle
pkg:composer/marcelsud/elastic-search-plugin
Requires
- php: ^7.1
- ongr/elasticsearch-bundle: ^5.0
- ongr/elasticsearch-dsl: ^5.0
- ongr/filter-manager-bundle: ^2.0
- ramsey/uuid: ^3.7
- simple-bus/symfony-bridge: ^4.1
- sylius/sylius: ^1.0@beta
Requires (Dev)
- behat/behat: ^3.2
- behat/mink: ^1.7
- behat/mink-browserkit-driver: ^1.3
- behat/mink-extension: ^2.2
- behat/mink-selenium2-driver: ^1.3
- doctrine/common: <2.8
- friends-of-behat/context-service-extension: ^0.3
- friends-of-behat/cross-container-extension: ^0.2
- friends-of-behat/performance-extension: ^1.0
- friends-of-behat/service-container-extension: ^0.3
- friends-of-behat/symfony-extension: ^0.2.1
- friends-of-behat/variadic-extension: ^0.1
- lakion/api-test-case: ^1.1
- lakion/mink-debug-extension: ^1.2.3
- matthiasnoback/symfony-config-test: ^2.1
- matthiasnoback/symfony-dependency-injection-test: ^1.1
- php-http/guzzle6-adapter: ^1.1
- phpspec/phpspec: ^3.2
- phpunit/phpunit: ^5.6
- dev-master
- v1.0.0-beta.12
- v1.0.0-beta.11
- v1.0.0-beta.10
- v1.0.0-beta.9
- v1.0.0-beta.8
- v1.0.0-beta.7
- v1.0.0-beta.6
- v1.0.0-beta.5
- v1.0.0-beta.4
- v1.0.0-beta.3
- v1.0.0-beta.2
- v1.0.0-beta.1
- v1.0.0-alpha.14
- v1.0.0-alpha.13
- v1.0.0-alpha.12
- v1.0.0-alpha.11
- v1.0.0-alpha.10
- v1.0.0-alpha.9
- v1.0.0-alpha.8
- v1.0.0-alpha.7
- v1.0.0-alpha.6
- v1.0.0-alpha.5
- v1.0.0-alpha.4
- v1.0.0-alpha.3
- v1.0.0-alpha.2
- v1.0.0-alpha.1
- dev-aggregation-attributes-filters
- dev-update-readme-3
- dev-remove-ui-related-stuff
This package is not auto-updated.
Last update: 2025-10-21 22:49:50 UTC
README
Usage
- 
Install it: $ composer require sylius/elastic-search-plugin 
- 
Install elastic search server: $ brew install elasticsearch@5.0 
- 
Run elastic search server: $ elasticsearch 
- 
Add those bundles to AppKernel.php:new \ONGR\ElasticsearchBundle\ONGRElasticsearchBundle(), new \SimpleBus\SymfonyBridge\SimpleBusCommandBusBundle(), new \SimpleBus\SymfonyBridge\SimpleBusEventBusBundle(), new \ONGR\FilterManagerBundle\ONGRFilterManagerBundle(), new \Sylius\ElasticSearchPlugin\SyliusElasticSearchPlugin(), 
- 
Create/Setup database: $ bin/console ongr:es:index:create $ bin/console do:da:cr $ bin/console do:sch:cr $ bin/console syl:fix:lo If there is a problem with creating elastic search index run those commands: $ bin/console ongr:es:index:drop --force $ bin/console ongr:es:index:create 
- 
Import config file in app/config/config.ymlfor default filter set configuration:imports: - { resource: "@SyliusElasticSearchPlugin/Resources/config/app/config.yml" } For more configuration take a look at ONGRFilterManager 
- 
Configure ONGR bundle in app/config/config.yml:ongr_elasticsearch: managers: default: index: index_name: sylius mappings: SyliusElasticSearchPlugin: {} sylius_elastic_search: attribute_whitelist: ['MUG_COLLECTION_CODE', 'MUG_MATERIAL_CODE'] #Only attibutes with these codes will be indexed 
- 
Import routing file: sylius_search: resource: "@SyliusElasticSearchPlugin/Resources/config/routing.yml" 
- 
Example Request/Response: 
It's required to pass channel argument to the search.
To activate filter you need to pass in parameter (query, request, attribute) requested field see reference in configuration section.
For e.g:
    /shop-api/taxon-products/mugs?channel=WEB_DE&price=2000;3000
It will activate taxon_slug, price_range and channel filter.
Request:
    /shop-api/taxon-products/mugs?channel=WEB_GB
Response:
{
    "items": [
        {
            "code": "LOGAN_MUG_CODE",
            "name": "Logan Mug",
            "slug": "logan-mug",
            "taxons": [
                {
                    "code": "MUG",
                    "slug": "mugs",
                    "position": 0,
                    "images": [],
                    "description": "@string@"
                }
            ],
            "variants": [
                {
                    "code": "LOGAN_MUG_CODE",
                    "name": "Logan Mug",
                    "price": {
                        "current": 1999,
                        "currency": "GBP"
                    },
                    "images": []
                }
            ],
            "attributes": [
                {
                    "code": "MUG_COLLECTION_CODE",
                    "name": "Mug collection",
                    "value": "HOLIDAY COLLECTION"
                },
                {
                    "code": "MUG_MATERIAL_CODE",
                    "name": "Mug material",
                    "value": "Wood"
                }
            ],
            "images": [],
            "channelCode": "WEB_GB",
            "localeCode": "en_GB",
            "mainTaxon": {
                "code": "MUG",
                "slug": "mugs",
                "images": [],
                "description": "@string@"
            }
        },
        {
            "code": "LOGAN_MUG_CODE",
            "name": "Logan Becher",
            "slug": "logan-becher",
            "taxons": [
                {
                    "code": "MUG",
                    "slug": "mugs",
                    "position": 0,
                    "images": [],
                    "description": "@string@"
                }
            ],
            "variants": [
                {
                    "code": "LOGAN_MUG_CODE",
                    "name": "Logan Becher",
                    "price": {
                        "current": 1999,
                        "currency": "GBP"
                    },
                    "images": []
                }
            ],
            "attributes": [
                {
                    "code": "MUG_COLLECTION_CODE",
                    "name": "Mug collection",
                    "value": "FEIERTAGSKOLLEKTION"
                },
                {
                    "code": "MUG_MATERIAL_CODE",
                    "name": "Mug material",
                    "value": "Holz"
                }
            ],
            "images": [],
            "channelCode": "WEB_GB",
            "localeCode": "de_DE",
            "mainTaxon": {
                "code": "MUG",
                "slug": "mugs",
                "images": [],
                "description": "@string@"
            }
        }
    ],
    "filters": {
        "channel": {
            "state": {
                "active": false,
                "urlParameters": [],
                "name": "channel",
                "options": []
            },
            "tags": [],
            "urlParameters": {
                "taxon_slug": "mugs"
            },
            "resetUrlParameters": {
                "taxon_slug": "mugs"
            },
            "name": "channel",
            "choices": [
                {
                    "active": false,
                    "default": false,
                    "urlParameters": {
                        "taxon_slug": "mugs",
                        "channel": "WEB_GB"
                    },
                    "label": "WEB_GB",
                    "count": 2
                }
            ]
        },
        "taxon_slug": {
            "state": {
                "active": true,
                "value": "mugs",
                "urlParameters": {
                    "taxon_slug": "mugs"
                },
                "name": "taxon_slug",
                "options": []
            },
            "tags": [],
            "urlParameters": {
                "taxon_slug": "mugs"
            },
            "resetUrlParameters": [],
            "name": "taxon_slug",
            "choices": [
                {
                    "active": true,
                    "default": false,
                    "urlParameters": [],
                    "label": "mugs",
                    "count": 2
                },
                {
                    "active": false,
                    "default": false,
                    "urlParameters": {
                        "taxon_slug": "t-shirts"
                    },
                    "label": "t-shirts",
                    "count": 2
                }
            ]
        },
        "price_range": {
            "state": {
                "active": false,
                "urlParameters": [],
                "name": "price_range",
                "options": []
            },
            "tags": [],
            "urlParameters": {
                "taxon_slug": "mugs"
            },
            "resetUrlParameters": {
                "taxon_slug": "mugs"
            },
            "name": "price_range",
            "minBounds": 1999,
            "maxBounds": 1999
        },
        "locale": {
            "state": {
                "active": false,
                "urlParameters": [],
                "name": "locale",
                "options": []
            },
            "tags": [],
            "urlParameters": {
                "taxon_slug": "mugs"
            },
            "resetUrlParameters": {
                "taxon_slug": "mugs"
            },
            "name": "locale",
            "choices": [
                {
                    "active": false,
                    "default": false,
                    "urlParameters": {
                        "taxon_slug": "mugs",
                        "locale_code": "de_DE"
                    },
                    "label": "de_DE",
                    "count": 1
                },
                {
                    "active": false,
                    "default": false,
                    "urlParameters": {
                        "taxon_slug": "mugs",
                        "locale_code": "en_GB"
                    },
                    "label": "en_GB",
                    "count": 1
                }
            ]
        },
        "attribute_values": {
            "state": {
                "active": false,
                "urlParameters": [],
                "name": "attribute_values",
                "options": []
            },
            "tags": [],
            "urlParameters": {
                "taxon_slug": "mugs"
            },
            "resetUrlParameters": {
                "taxon_slug": "mugs"
            },
            "name": "attribute_values",
            "choices": [
                {
                    "active": false,
                    "default": false,
                    "urlParameters": {
                        "taxon_slug": "mugs",
                        "attributeValues": [
                            "FEIERTAGSKOLLEKTION"
                        ]
                    },
                    "label": "FEIERTAGSKOLLEKTION",
                    "count": 1
                },
                {
                    "active": false,
                    "default": false,
                    "urlParameters": {
                        "taxon_slug": "mugs",
                        "attributeValues": [
                            "HOLIDAY COLLECTION"
                        ]
                    },
                    "label": "HOLIDAY COLLECTION",
                    "count": 1
                },
                {
                    "active": false,
                    "default": false,
                    "urlParameters": {
                        "taxon_slug": "mugs",
                        "attributeValues": [
                            "Holz"
                        ]
                    },
                    "label": "Holz",
                    "count": 1
                },
                {
                    "active": false,
                    "default": false,
                    "urlParameters": {
                        "taxon_slug": "mugs",
                        "attributeValues": [
                            "Wood"
                        ]
                    },
                    "label": "Wood",
                    "count": 1
                }
            ]
        },
        "paginator": {
            "state": {
                "active": false,
                "value": 1,
                "urlParameters": [],
                "name": "paginator",
                "options": []
            },
            "tags": [],
            "urlParameters": {
                "taxon_slug": "mugs"
            },
            "resetUrlParameters": {
                "taxon_slug": "mugs"
            },
            "name": "paginator",
            "currentPage": 1,
            "totalItems": 2,
            "maxPages": 10,
            "itemsPerPage": 10,
            "numPages": 1,
            "options": []
        },
        "search": {
            "state": {
                "active": false,
                "urlParameters": [],
                "name": "search",
                "options": []
            },
            "tags": [],
            "urlParameters": {
                "taxon_slug": "mugs"
            },
            "resetUrlParameters": {
                "taxon_slug": "mugs"
            },
            "name": "search"
        }
    }
}
- Filtering by attributes:
You need use attributes query parameter which is an associative array where key is the attribute name and value is an array of attribute values. For e.g:
$this->client->request('GET', '/shop-api/products', ['attributes' => ['Mug material' => ['Wood']]], [], ['ACCEPT' => 'application/json']);
This filter also aggregates all attribute values and it will group them by attribute name Aggregation response from this request:
"attributes":{ "state":{ "active":true, "value":{ "Mug material":[ "Wood" ] }, "urlParameters":{ "attributes":{ "Mug material":[ "Wood" ] } }, "name":"attributes", "options":[ ] }, "tags":[ ], "urlParameters":{ "attributes":{ "Mug material":[ "Wood" ] } }, "resetUrlParameters":[ ], "name":"attributes", "items":[ { "tags":[ ], "urlParameters":[ ], "resetUrlParameters":[ ], "name":"Mug collection", "choices":{ "HOLIDAY COLLECTION":{ "active":false, "default":false, "urlParameters":{ "attributes":{ "Mug material":[ "Wood" ], "Mug collection":[ "HOLIDAY COLLECTION" ] } }, "label":"HOLIDAY COLLECTION", "count":1 } } }, { "tags":[ ], "urlParameters":[ ], "resetUrlParameters":[ ], "name":"Mug material", "choices":{ "Holz":{ "active":false, "default":false, "urlParameters":{ "attributes":{ "Mug material":[ "Wood", "Holz" ] } }, "label":"Holz", "count":1 }, "Wood":{ "active":true, "default":false, "urlParameters":{ "attributes":{ "Mug material":[ ] } }, "label":"Wood", "count":1 } } } ] }
You can combine filters so for example if you want your products to be filtered in specific locale you can add another query parameter
Example request with locale:
$this->client->request('GET', '/shop-api/products', ['attributes' => ['Mug material' => ['Wood']], 'locale' => 'en_GB'], [], ['ACCEPT' => 'application/json']);
Aggregation response from this request:
"attributes":{ "state":{ "active":true, "value":{ "Mug material":[ "Wood" ] }, "urlParameters":{ "attributes":{ "Mug material":[ "Wood" ] } }, "name":"attributes", "options":[ ] }, "tags":[ ], "urlParameters":{ "locale":"en_GB", "attributes":{ "Mug material":[ "Wood" ] } }, "resetUrlParameters":{ "locale":"en_GB" }, "name":"attributes", "items":[ { "tags":[ ], "urlParameters":[ ], "resetUrlParameters":{ "locale":"en_GB" }, "name":"Mug collection", "choices":{ "HOLIDAY COLLECTION":{ "active":false, "default":false, "urlParameters":{ "locale":"en_GB", "attributes":{ "Mug material":[ "Wood" ], "Mug collection":[ "HOLIDAY COLLECTION" ] } }, "label":"HOLIDAY COLLECTION", "count":1 } } }, { "tags":[ ], "urlParameters":[ ], "resetUrlParameters":{ "locale":"en_GB" }, "name":"Mug material", "choices":{ "Wood":{ "active":true, "default":false, "urlParameters":{ "locale":"en_GB", "attributes":{ "Mug material":[ ] } }, "label":"Wood", "count":1 } } } ] }
Whole response:
{
   "items":[
      {
         "code":"LOGAN_MUG_CODE",
         "name":"Logan Mug",
         "slug":"logan-mug",
         "taxons":{
            "main":"MUG",
            "others":[
               "MUG",
               "CATEGORY",
               "BRAND"
            ]
         },
         "variants":[
            {
               "code":"LOGAN_MUG_CODE",
               "name":"Logan Mug",
               "price":{
                  "current":1999,
                  "currency":"GBP"
               },
               "images":[
               ]
            }
         ],
         "attributes":[
            {
               "code":"MUG_COLLECTION_CODE",
               "name":"Mug collection",
               "value":"HOLIDAY COLLECTION"
            },
            {
               "code":"MUG_MATERIAL_CODE",
               "name":"Mug material",
               "value":"Wood"
            }
         ],
         "images":[
         ],
         "channelCode":"WEB_GB",
         "localeCode":"en_GB"
      }
   ],
   "filters":{
      "channel":{
         "state":{
            "active":false,
            "urlParameters":[
            ],
            "name":"channel",
            "options":[
            ]
         },
         "tags":[
         ],
         "urlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "resetUrlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "name":"channel",
         "choices":[
            {
               "active":false,
               "default":false,
               "urlParameters":{
                  "locale":"en_GB",
                  "attributes":{
                     "Mug material":[
                        "Wood"
                     ]
                  },
                  "channel":"WEB_GB"
               },
               "label":"WEB_GB",
               "count":1
            }
         ]
      },
      "taxon_code":{
         "state":{
            "active":false,
            "urlParameters":[
            ],
            "name":"taxon_code",
            "options":[
            ]
         },
         "tags":[
         ],
         "urlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "resetUrlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "name":"taxon_code",
         "choices":[
            {
               "active":false,
               "default":false,
               "urlParameters":{
                  "locale":"en_GB",
                  "attributes":{
                     "Mug material":[
                        "Wood"
                     ]
                  },
                  "taxonCode":"BRAND"
               },
               "label":"BRAND",
               "count":1
            },
            {
               "active":false,
               "default":false,
               "urlParameters":{
                  "locale":"en_GB",
                  "attributes":{
                     "Mug material":[
                        "Wood"
                     ]
                  },
                  "taxonCode":"CATEGORY"
               },
               "label":"CATEGORY",
               "count":1
            },
            {
               "active":false,
               "default":false,
               "urlParameters":{
                  "locale":"en_GB",
                  "attributes":{
                     "Mug material":[
                        "Wood"
                     ]
                  },
                  "taxonCode":"MUG"
               },
               "label":"MUG",
               "count":1
            }
         ]
      },
      "price_range":{
         "state":{
            "active":false,
            "urlParameters":[
            ],
            "name":"price_range",
            "options":[
            ]
         },
         "tags":[
         ],
         "urlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "resetUrlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "name":"price_range",
         "minBounds":1999,
         "maxBounds":2999
      },
      "locale":{
         "state":{
            "active":true,
            "value":"en_GB",
            "urlParameters":{
               "locale":"en_GB"
            },
            "name":"locale",
            "options":[
            ]
         },
         "tags":[
         ],
         "urlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "resetUrlParameters":{
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "name":"locale",
         "choices":[
            {
               "active":true,
               "default":false,
               "urlParameters":{
                  "attributes":{
                     "Mug material":[
                        "Wood"
                     ]
                  }
               },
               "label":"en_GB",
               "count":1
            }
         ]
      },
      "paginator":{
         "state":{
            "active":false,
            "value":1,
            "urlParameters":[
            ],
            "name":"paginator",
            "options":[
            ]
         },
         "tags":[
         ],
         "urlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "resetUrlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "name":"paginator",
         "currentPage":1,
         "totalItems":1,
         "maxPages":10,
         "itemsPerPage":10,
         "numPages":1,
         "options":[
         ]
      },
      "search":{
         "state":{
            "active":false,
            "urlParameters":[
            ],
            "name":"search",
            "options":[
            ]
         },
         "tags":[
         ],
         "urlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "resetUrlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "name":"search"
      },
      "attributes":{
         "state":{
            "active":true,
            "value":{
               "Mug material":[
                  "Wood"
               ]
            },
            "urlParameters":{
               "attributes":{
                  "Mug material":[
                     "Wood"
                  ]
               }
            },
            "name":"attributes",
            "options":[
            ]
         },
         "tags":[
         ],
         "urlParameters":{
            "locale":"en_GB",
            "attributes":{
               "Mug material":[
                  "Wood"
               ]
            }
         },
         "resetUrlParameters":{
            "locale":"en_GB"
         },
         "name":"attributes",
         "items":[
            {
               "tags":[
               ],
               "urlParameters":[
               ],
               "resetUrlParameters":{
                  "locale":"en_GB"
               },
               "name":"Mug collection",
               "choices":{
                  "HOLIDAY COLLECTION":{
                     "active":false,
                     "default":false,
                     "urlParameters":{
                        "locale":"en_GB",
                        "attributes":{
                           "Mug material":[
                              "Wood"
                           ],
                           "Mug collection":[
                              "HOLIDAY COLLECTION"
                           ]
                        }
                     },
                     "label":"HOLIDAY COLLECTION",
                     "count":1
                  }
               }
            },
            {
               "tags":[
               ],
               "urlParameters":[
               ],
               "resetUrlParameters":{
                  "locale":"en_GB"
               },
               "name":"Mug material",
               "choices":{
                  "Wood":{
                     "active":true,
                     "default":false,
                     "urlParameters":{
                        "locale":"en_GB",
                        "attributes":{
                           "Mug material":[
                           ]
                        }
                     },
                     "label":"Wood",
                     "count":1
                  }
               }
            }
         ]
      }
   }
}
- Sorting
- 
By name ascending: /shop-api/products?channel=WEB_DE&sort[name]=asc
- 
By price descending: /shop-api/products?channel=WEB_DE&sort[price]=desc
- 
By attribute ATTRIBUTE_CODEascending:/shop-api/products?channel=WEB_DE&sort[attributes][ATTRIBUTE_CODE]=asc
- 
By price ascending, then by name descending: /shop-api/products?channel=WEB_DE&sort[price]=asc&sort[name]=desc
- Filtering by attribute
- 
By attribute name and value: /shop-api/products?channel=WEB_DE&attributes[Attribute name]=value
- 
By attribute code and value: /shop-api/products?channel=WEB_DE&attributesByCode[ATTRIBUTE_CODE]=value
- Reindexing Elasticsearch
The current implementation does not support updating Elasticsearch when an entity is updated. In order to stay up-to-date, run the following command:
```
    bin/console sylius:elastic-search:update-product-index
```
If you want to recreate the index, run (it will drop it):
```
    bin/console sylius:elastic-search:reset-product-index
```