Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ConfigBuilder
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
2 / 2
2
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 buildConfig
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2namespace Wikibase\Search\Elastic;
3
4use CirrusSearch\Maintenance\AnalysisConfigBuilder;
5use MediaWiki\Config\Config;
6
7/**
8 * Utility class to build analyzer configs for ElasticSearch
9 */
10class ConfigBuilder {
11
12    /**
13     * @param string[] $languageList
14     * @param Config $searchSettings
15     * @param AnalysisConfigBuilder $builder
16     */
17    public function __construct(
18        private readonly array $languageList,
19        private readonly Config $searchSettings,
20        private readonly AnalysisConfigBuilder $builder,
21    ) {
22    }
23
24    /**
25     * Build a new all-language analyzer configuration.
26     * This adds analyzers, filters, etc. which are required for language-specific
27     * indexing of Wikidata fields.
28     * @param array[] &$config Existing config which will be modified with new analyzers
29     */
30    public function buildConfig( array &$config ) {
31        $stemmingSettings = $this->searchSettings->get( 'UseStemming' );
32
33        $stemmedLanguages = array_filter( $this->languageList,
34            static function ( $lang ) use ( $stemmingSettings ) {
35                return !empty( $stemmingSettings[$lang]['index'] );
36            }
37        );
38        $nonStemmedLanguages = array_diff( $this->languageList, $stemmedLanguages );
39        $this->builder->buildLanguageConfigs( $config, $stemmedLanguages,
40            [ 'plain', 'plain_search', 'text', 'text_search' ] );
41        $this->builder->buildLanguageConfigs( $config, $nonStemmedLanguages,
42            [ 'plain', 'plain_search' ] );
43    }
44
45}