Skip to content

Commit 5c92ae3

Browse files
committed
Merge branch '1.3' into sonarcloud_analysis
2 parents 40a5d09 + b363e7b commit 5c92ae3

File tree

260 files changed

+3596
-1025
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

260 files changed

+3596
-1025
lines changed

.github/ci/files/config/packages/test/config.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ pimcore_open_search_client:
3636
default:
3737
hosts: ['%env(PIMCORE_OPEN_SEARCH_HOST)%']
3838

39+
pimcore_elasticsearch_client:
40+
es_clients:
41+
default:
42+
hosts: ['%env(PIMCORE_ELASTIC_SEARCH_HOST)%']
43+
username: 'elastic'
44+
password: 'somethingsecret'
45+
logger_channel: 'pimcore.elasicsearch'
46+
ssl_verification: false
47+
3948
pimcore:
4049
assets:
4150
metadata:

.github/ci/files/config/services_test.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ services:
1313
class: Pimcore\Tests\Support\Helper\DataType\Calculator
1414

1515
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\Search\LocateInTreeServiceInterface:
16-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\Search\LocateInTreeService
16+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\Search\LocateInTreeService
1717
public: true
1818

1919
Pimcore\Bundle\GenericDataIndexBundle\Service\Search\SearchService\SearchResultIdListServiceInterface:

.github/ci/files/config/system.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ pimcore:
5252
applicationlog:
5353
mail_notification:
5454
send_log_summary: false
55-
filter_priority: null
55+
filter_priority: 0
5656
mail_receiver: ''
5757
archive_treshold: '30'
5858
archive_alternative_database: ''

.github/ci/scripts/setup-pimcore-environment-functional-tests.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,11 @@
22

33
.github/ci/scripts/setup-pimcore-environment.sh
44

5+
# Add Elasticsearch config if specified
6+
if [ "$1" == "elasticsearch" ]; then
7+
CONFIG_FILE_PATH="config/packages/test/config.yaml"
8+
echo -e "\n# Added by functional test script\npimcore_generic_data_index:\n index_service:\n client_params:\n client_type: 'elasticsearch'" >> "$CONFIG_FILE_PATH"
9+
fi
10+
511
cp .github/ci/files/composer.json .
612
cp bundles/pimcore/generic-data-index-bundle/codeception.dist.yml .
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
name: "Codeception Tests with Elasticsearch"
2+
3+
on:
4+
# Enable Later.
5+
#schedule:
6+
# - cron: '0 3 * * 1,3,5'
7+
pull_request:
8+
branches:
9+
- "[0-9]+.[0-9]+"
10+
- "[0-9]+.x"
11+
- "feature-*"
12+
push:
13+
branches:
14+
- "[0-9]+.[0-9]+"
15+
- "[0-9]+.x"
16+
17+
env:
18+
PIMCORE_PROJECT_ROOT: ${{ github.workspace }}
19+
APP_ENV: test
20+
PIMCORE_TEST: 1
21+
PIMCORE_TEST_DB_DSN: "mysql://[email protected]:33006/pimcore_test"
22+
PIMCORE_ELASTIC_SEARCH_HOST: "localhost:5300"
23+
CODECEPTION_BUNDLE_PATH: "bundles/pimcore/generic-data-index-bundle/"
24+
25+
jobs:
26+
codeception-tests:
27+
name: "Codeception tests"
28+
runs-on: "ubuntu-20.04"
29+
continue-on-error: ${{ matrix.experimental }}
30+
strategy:
31+
matrix:
32+
include:
33+
- { php-version: "8.3", dependencies: "highest", pimcore_version: "11.x-dev as 11.99.9", experimental: true, search_engine: "elasticsearch"}
34+
35+
services:
36+
mariadb:
37+
image: "mariadb:10.11"
38+
ports:
39+
- 33006:3306
40+
env:
41+
MYSQL_ALLOW_EMPTY_PASSWORD: yes
42+
43+
elastic:
44+
image: elasticsearch:8.5.3
45+
ports:
46+
- 5300:9200
47+
env:
48+
discovery.type: "single-node"
49+
ES_JAVA_OPTS: "-Xms1g -Xmx1g"
50+
xpack.security.enabled: "true"
51+
xpack.security.authc.anonymous.roles: "superuser,kibana_admin,kibana_system,kibana_user"
52+
ELASTIC_USERNAME: "elastic"
53+
ELASTIC_PASSWORD: "somethingsecret"
54+
55+
steps:
56+
- name: "Checkout code"
57+
uses: "actions/checkout@v2"
58+
with:
59+
path: "bundles/pimcore/generic-data-index-bundle"
60+
61+
- name: "Copy .github directory"
62+
env:
63+
REQUIRE_ADMIN_BUNDLE: "${{ matrix.require_admin_bundle }}"
64+
run: |
65+
cp -R bundles/pimcore/generic-data-index-bundle/.github .github
66+
67+
- name: "Install PHP"
68+
uses: "shivammathur/setup-php@v2"
69+
with:
70+
coverage: xdebug
71+
ini-values: display_errors=On, display_startup_errors=On, error_reporting=32767
72+
php-version: "${{ matrix.php-version }}"
73+
74+
- name: Verify MariaDB connection
75+
run: |
76+
cp .github/ci/files/.my.cnf ~/.my.cnf
77+
while ! mysqladmin ping --silent; do
78+
sleep 1
79+
done
80+
81+
- name: "Setup Pimcore environment"
82+
env:
83+
REQUIRE_ADMIN_BUNDLE: "${{ matrix.require_admin_bundle }}"
84+
run: |
85+
mysql -e "CREATE DATABASE pimcore_test CHARSET=utf8mb4;"
86+
cp -R bundles/pimcore/generic-data-index-bundle/tests tests
87+
mkdir src
88+
chmod 755 .github/ci/scripts/setup-pimcore-environment-functional-tests.sh
89+
.github/ci/scripts/setup-pimcore-environment-functional-tests.sh "${{ matrix.search_engine }}"
90+
91+
- name: "Wait for Elasticsearch to be up"
92+
run: |
93+
if [ "${{ matrix.search_engine }}" == "elasticsearch" ]; then
94+
echo "Waiting for Elasticsearch to be ready..."
95+
until curl -s -u elastic:somethingsecret http://localhost:5300/_cluster/health | grep -q '"status":"green"'; do
96+
echo "Waiting... Elasticsearch is not yet available."
97+
sleep 5
98+
done
99+
echo "Elasticsearch is up and running!"
100+
else
101+
echo "Using OpenSearch for testing, skipping Elasticsearch wait."
102+
fi
103+
104+
- name: "Update Pimcore version"
105+
env:
106+
PIMCORE_VERSION: "${{ matrix.pimcore_version }}"
107+
run: |
108+
if [ ! -z "$PIMCORE_VERSION" ]; then
109+
composer require --no-update pimcore/pimcore:"${PIMCORE_VERSION}"
110+
fi
111+
112+
- name: "Install dependencies with Composer"
113+
uses: "ramsey/composer-install@v2"
114+
with:
115+
dependency-versions: "${{ matrix.dependencies }}"
116+
117+
- name: "Run Codeception"
118+
run: |
119+
vendor/bin/codecept run -c . -vvv --xml --coverage-xml

.github/workflows/codeception.yaml renamed to .github/workflows/open-search-codeception.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: "Codeception Tests"
1+
name: "Codeception Tests with OpenSearch"
22

33
on:
44
# Enable Later.
@@ -30,9 +30,9 @@ jobs:
3030
strategy:
3131
matrix:
3232
include:
33-
- { php-version: "8.2", dependencies: "lowest", pimcore_version: "", experimental: false }
34-
- { php-version: "8.3", dependencies: "highest", pimcore_version: "", experimental: false }
35-
- { php-version: "8.3", dependencies: "highest", pimcore_version: "11.x-dev as 11.99.9", experimental: true }
33+
- { php-version: "8.2", dependencies: "lowest", pimcore_version: "", experimental: false, search_engine: "openSearch" }
34+
- { php-version: "8.3", dependencies: "highest", pimcore_version: "", experimental: false, search_engine: "openSearch"}
35+
- { php-version: "8.3", dependencies: "highest", pimcore_version: "11.x-dev as 11.99.9", experimental: true, search_engine: "openSearch"}
3636

3737
services:
3838
mariadb:
@@ -89,7 +89,7 @@ jobs:
8989
cp -R bundles/pimcore/generic-data-index-bundle/tests tests
9090
mkdir src
9191
chmod 755 .github/ci/scripts/setup-pimcore-environment-functional-tests.sh
92-
.github/ci/scripts/setup-pimcore-environment-functional-tests.sh
92+
.github/ci/scripts/setup-pimcore-environment-functional-tests.sh "${{ matrix.search_engine }}"
9393
9494
- name: "Update Pimcore version"
9595
env:

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ title: Generic Data Index
44

55
# Pimcore Generic Data Index
66

7-
The Pimcore Generic Data Index Bundle provides a centralized way to index and search assets and data objects in Pimcore via OpenSearch indices.
8-
It is shipped with the OpenSearch client and provides a central configuration for it in order to be used in other bundles.
7+
The Pimcore Generic Data Index Bundle provides a centralized way to index and search elements (assets, data objects and documents) in Pimcore via indices (e.g OpenSearch, Elasticsearch).
8+
It is shipped with the OpenSearch and Elasticsearch clients and provides a central configuration for them in order to be used in other bundles.
99
This bundle can be extended and customized to fit your specific needs, for example if you would like to extend the search indices with custom attributes.
1010

1111
## Features in a Nutshell
12-
- Based on OpenSearch
12+
- Based on OpenSearch/Elasticsearch
1313
- Centralized data index for multiple bundles (Portal Engine, Studio API/UI, etc.)
1414
- Indexing of all documents, assets and data objects
15-
- Provides search services and models to search, filter and aggregate the data saved in the OpenSearch indices
15+
- Provides search services and models to search, filter and aggregate the data saved in the search indices
1616

1717
## Documentation Overview
1818
- [Installation](./doc/01_Installation/README.md)

composer.json

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818
"minimum-stability": "dev",
1919
"require": {
2020
"php": "~8.2.0 || ~8.3.0 ",
21-
"pimcore/pimcore": "^11.3.0",
22-
"pimcore/static-resolver-bundle": "^1.4.0",
23-
"pimcore/opensearch-client": "^1.0.0",
21+
"pimcore/pimcore": "^11.5",
22+
"pimcore/static-resolver-bundle": "^1.4.0 || ^2.0",
23+
"pimcore/opensearch-client": "^1.1",
24+
"pimcore/elasticsearch-client": "^1.1",
2425
"doctrine/orm": "^2.17.2",
2526
"symfony/scheduler": "^6.4",
2627
"symfony/messenger": "^6.4"
@@ -42,7 +43,10 @@
4243
"autoload": {
4344
"psr-4": {
4445
"Pimcore\\Bundle\\GenericDataIndexBundle\\": "src/"
45-
}
46+
},
47+
"files": [
48+
"src/autoload.php"
49+
]
4650
},
4751
"autoload-dev": {
4852
"psr-4": {

config/pimcore/messenger.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
framework:
22
messenger:
33
enabled: true
4-
failure_transport: pimcore_generic_data_index_failed
54
transports:
6-
pimcore_generic_data_index_queue: 'doctrine://default?queue_name=pimcore_generic_data_index_queue'
5+
pimcore_generic_data_index_queue:
6+
dsn: 'doctrine://default?queue_name=pimcore_generic_data_index_queue'
7+
failure_transport: pimcore_generic_data_index_failed
78
pimcore_generic_data_index_sync: 'sync://'
89
pimcore_generic_data_index_failed: 'doctrine://default?queue_name=pimcore_generic_data_index_failed'
910
routing:
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,79 @@
11
imports:
2-
- { resource: 'services/search-index-adapter/open-search/modifiers/*' }
3-
- { resource: 'services/search-index-adapter/open-search/pql-field-name-transformers.yaml' }
2+
- { resource: 'services/search-index-adapter/default-search/modifiers/*' }
3+
- { resource: 'services/search-index-adapter/default-search/pql-field-name-transformers.yaml' }
44

55
services:
66
_defaults:
77
autowire: true
88
autoconfigure: true
99
public: false
10-
10+
1111
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\SearchIndexServiceInterface:
12-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\OpenSearchService
12+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\DefaultSearchService
1313
arguments:
14-
$openSearchClient: '@generic-data-index.opensearch-client'
14+
$client: '@generic-data-index.search-client'
1515

1616
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\IndexAliasServiceInterface:
17-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\IndexAliasService
17+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\IndexAliasService
1818
arguments:
19-
$openSearchClient: '@generic-data-index.opensearch-client'
19+
$client: '@generic-data-index.search-client'
2020

21-
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\Search\SearchExecutionServiceInterface:
22-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\Search\SearchExecutionService
21+
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\Search\SearchExecutionServiceInterface:
22+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\Search\SearchExecutionService
2323
arguments:
24-
$openSearchClient: '@generic-data-index.opensearch-client'
24+
$client: '@generic-data-index.search-client'
2525

2626
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\BulkOperationServiceInterface:
27-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\BulkOperationService
27+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\BulkOperationService
2828
arguments:
29-
$openSearchClient: '@generic-data-index.opensearch-client'
29+
$client: '@generic-data-index.search-client'
3030

3131
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\PathServiceInterface:
32-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\PathService
32+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\PathService
3333
arguments:
34-
$openSearchClient: '@generic-data-index.opensearch-client'
34+
$client: '@generic-data-index.search-client'
3535

3636
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\Search\Pagination\PaginationInfoServiceInterface:
37-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\Search\Pagination\PaginationInfoService
37+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\Search\Pagination\PaginationInfoService
3838

3939
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\Search\LocateInTreeServiceInterface:
40-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\Search\LocateInTreeService
40+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\Search\LocateInTreeService
4141

4242
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\Search\FetchIdsServiceInterface:
43-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\Search\FetchIdsService
43+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\Search\FetchIdsService
4444

45-
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\Search\FetchIdsBySearchServiceInterface:
46-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\Search\FetchIdsBySearchService
45+
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\Search\FetchIdsBySearchServiceInterface:
46+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\Search\FetchIdsBySearchService
4747

48-
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\MappingAnalyzerServiceInterface:
49-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\MappingAnalyzerService
48+
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\MappingAnalyzerServiceInterface:
49+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\MappingAnalyzerService
5050

5151
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\IndexStatsServiceInterface:
52-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\IndexStatsService
52+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\IndexStatsService
5353
arguments:
54-
$openSearchClient: '@generic-data-index.opensearch-client'
54+
$client: '@generic-data-index.search-client'
5555

5656
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\IndexMappingServiceInterface:
57-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\IndexMappingService
57+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\IndexMappingService
5858

5959
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\Workspace\QueryServiceInterface:
60-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\Workspace\QueryService
60+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\Workspace\QueryService
6161

6262
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\Workspace\ElementWorkspacesQueryServiceInterface:
63-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\Workspace\ElementWorkspacesQueryService
63+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\Workspace\ElementWorkspacesQueryService
6464

6565
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\QueryLanguage\PqlAdapterInterface:
66-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\QueryLanguage\PqlAdapter
66+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\QueryLanguage\PqlAdapter
6767

68-
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\QueryLanguage\SubQueriesProcessorInterface:
69-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\QueryLanguage\SubQueriesProcessor
68+
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\QueryLanguage\SubQueriesProcessorInterface:
69+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\QueryLanguage\SubQueriesProcessor
7070

7171

72-
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\QueryLanguage\FieldNameValidator\:
73-
resource: '../../../src/SearchIndexAdapter/OpenSearch/QueryLanguage/FieldNameValidator'
72+
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\QueryLanguage\FieldNameValidator\:
73+
resource: '../../../src/SearchIndexAdapter/DefaultSearch/QueryLanguage/FieldNameValidator'
7474
tags: ['pimcore.generic_data_index.pql_field_name_validator']
7575

7676
Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DataObject\IndexIconUpdateServiceInterface:
77-
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\OpenSearch\DataObject\IndexIconUpdateService
77+
class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\DataObject\IndexIconUpdateService
7878
arguments:
79-
$openSearchClient: '@generic-data-index.opensearch-client'
79+
$client: '@generic-data-index.search-client'

0 commit comments

Comments
 (0)