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.
To work properly Pimcore requires the Elasticsearch bindings, install them with:
composer require elasticsearch/elasticsearch.
Following aspects need to be considered in index configuration:
General Configuration Options
config_options area general Elastic Search settings can be made - like hosts, index settings, etc.
falseto activate logging of elastic search client
indexName: index name to be used, if not provided tenant name is used as index name
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.
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.
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.
You can also skip the
mapping, then ES will try to create dynamic mapping.
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
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.