marcelsud / elastic-search-plugin
Sylius的Elasticsearch集成。
v1.0.0-beta.12
2017-08-30 15:59 UTC
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: 2024-09-10 17:58:31 UTC
README
用法
-
安装它
$ composer require sylius/elastic-search-plugin
-
安装Elasticsearch服务器
$ brew install elasticsearch@5.0
-
运行Elasticsearch服务器
$ elasticsearch
-
将以下包添加到
AppKernel.phpnew \ONGR\ElasticsearchBundle\ONGRElasticsearchBundle(), new \SimpleBus\SymfonyBridge\SimpleBusCommandBusBundle(), new \SimpleBus\SymfonyBridge\SimpleBusEventBusBundle(), new \ONGR\FilterManagerBundle\ONGRFilterManagerBundle(), new \Sylius\ElasticSearchPlugin\SyliusElasticSearchPlugin(),
-
创建/设置数据库
$ bin/console ongr:es:index:create $ bin/console do:da:cr $ bin/console do:sch:cr $ bin/console syl:fix:lo
如果创建Elasticsearch索引出现问题,请运行以下命令
$ bin/console ongr:es:index:drop --force $ bin/console ongr:es:index:create
-
在
app/config/config.yml中导入配置文件以进行默认过滤器集配置imports: - { resource: "@SyliusElasticSearchPlugin/Resources/config/app/config.yml" }
更多配置请参阅ONGRFilterManager
-
在
app/config/config.yml中配置ONGR包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
-
导入路由文件
sylius_search: resource: "@SyliusElasticSearchPlugin/Resources/config/routing.yml"
-
示例请求/响应
搜索时需要传递channel参数。要激活过滤器,需要在参数(查询、请求、属性)中传递请求的字段,请参阅配置部分中的参考。
例如
/shop-api/taxon-products/mugs?channel=WEB_DE&price=2000;3000
将激活taxon_slug、price_range和channel过滤器。
请求
/shop-api/taxon-products/mugs?channel=WEB_GB
响应
{
"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"
}
}
}
- 按属性过滤
您需要使用属性查询参数,它是一个关联数组,键是属性名称,值是属性值的数组。例如
$this->client->request('GET', '/shop-api/products', ['attributes' => ['Mug material' => ['Wood']]], [], ['ACCEPT' => 'application/json']);
此过滤器还将聚合所有属性值,并按属性名称对它们进行分组。这是此请求的聚合响应
"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 } } } ] }
您可以将过滤器组合起来,例如,如果您想按特定区域过滤产品,可以添加另一个查询参数
带有区域的示例请求
$this->client->request('GET', '/shop-api/products', ['attributes' => ['Mug material' => ['Wood']], 'locale' => 'en_GB'], [], ['ACCEPT' => 'application/json']);
此请求的聚合响应
"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 } } } ] }
整个响应
{
"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
}
}
}
]
}
}
}
- 排序
-
按名称升序
/shop-api/products?channel=WEB_DE&sort[name]=asc -
按价格降序
/shop-api/products?channel=WEB_DE&sort[price]=desc -
按属性
ATTRIBUTE_CODE升序/shop-api/products?channel=WEB_DE&sort[attributes][ATTRIBUTE_CODE]=asc -
按价格升序,然后按名称降序
/shop-api/products?channel=WEB_DE&sort[price]=asc&sort[name]=desc
- 按属性过滤
-
按属性名称和值
/shop-api/products?channel=WEB_DE&attributes[Attribute name]=value -
按属性代码和值
/shop-api/products?channel=WEB_DE&attributesByCode[ATTRIBUTE_CODE]=value
- 重新索引Elasticsearch
当前实现不支持在实体更新时更新Elasticsearch。为了保持最新状态,请运行以下命令
```
bin/console sylius:elastic-search:update-product-index
```
如果您想重新创建索引,请运行(这将删除它)
```
bin/console sylius:elastic-search:reset-product-index
```