Edit on GitHub

Special Aspects for Elastic Search

Basically elastic search worker works as described in the optimized architecture. Currently Elastic Search 5 and Elastic Search 6 are supported.

Index Configuration

Following aspects need to be considered in index configuration:

General Configuration Options

In the config_options area general Elastic Search settings can be made - like hosts, index settings, etc.

client_config
  • logging: true/false to activate logging of elastic search client
  • indexName: index name to be used, if not provided tenant name is used as index name
index_settings

Index settings that are used when creating a new index. They are passed 1:1 as settings param to the body of the create index command. Details see also Elastic Search Docs.

es_client_params
  • hosts: Array of hosts of the Elastic Search cluster to use.
  • indexType: Necessary for Elastic Search 6 - defines the type name of products in index.

Sample Config

pimcore_ecommerce_framework:
    index_service:
        tenants:
            MyEsTenant:
                config_options:
                    client_config:
                        logging: false
                        indexName: 'ecommerce-demo-elasticsearch'

                    es_client_params:
                        hosts:
                            - '%elasticsearch.host%'
                        indexType: 'Product'

                    index_settings:
                        number_of_shards: 5
                        number_of_replicas: 0
                        analysis:
                            analyzer:
                                my_ngram_analyzer:
                                    tokenizer: my_ngram_tokenizer
                                whitelist_analyzer:
                                    tokenizer: standard
                                    filter:
                                      - white_list_filter
                            tokenizer:
                                my_ngram_tokenizer:
                                    type: nGram
                                    min_gram: 2
                                    max_gram: 15
                                    token_chars: [letter, digit]
                            filter:
                                white_list_filter:
                                    type: keep
                                    keep_words:
                                      - was
                                      - WAS

Data Types for attributes

The type of the data attributes needs to be set to elastic search data types. Be careful, some types changed between Elastic Search 5 and 6 (like string vs. keyword/text).

pimcore_ecommerce_framework:
    index_service:
        tenants:
            MyEsTenant:
                attributes:
                    name:
                        locale: '%%locale%%'
                        type: keyword

In addition to the type configuration, you also can provide custom mappings for a field. If provided, these mapping configurations are used for creating the mapping of the elastic search index.


pimcore_ecommerce_framework:
    index_service:
        tenants:
            MyEsTenant:
                attributes:
                    name:
                        locale: '%%locale%%'
                        type: text
                        options:
                            mapping:
                                type: text
                                store: true
                                index: not_analyzed
                                fields:
                                    analyzed:
                                        type: text
                                        analyzer: german
                                    analyzed_ngram:
                                        type: text
                                        analyzer: my_ngram_analyzer

Reindexing Mode

It is possible that Elastic Search cannot update the mapping, e.g. if data types of attributes change on the fly. For this case, a reindex is necessary. If it is necessary, the E-Commerce Framework automatically switches into a reindex mode. When in reindex mode, all queries go to the current index but in parallel a new index is created based on the data in the store table. The current index is read only and all data changes that take place go directly into the new index. As a result, during reindex the results delivered by Product Lists can contain old data.

As soon the reindex is finished, the current index is switched to the newly created index and the old index is deleted.