Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ConfigBuilder
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
2
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
3 / 3
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     * @var AnalysisConfigBuilder
14     */
15    private $builder;
16    /**
17     * @var string[]
18     */
19    private $languageList;
20    /**
21     * @var Config
22     */
23    private $searchSettings;
24
25    /**
26     * @param string[] $languageList
27     * @param Config $searchSettings
28     * @param AnalysisConfigBuilder $builder
29     */
30    public function __construct( array $languageList, Config $searchSettings, AnalysisConfigBuilder $builder ) {
31        $this->builder = $builder;
32        $this->languageList = $languageList;
33        $this->searchSettings = $searchSettings;
34    }
35
36    /**
37     * Build a new all-language analyzer configuration.
38     * This adds analyzers, filters, etc. which are required for language-specific
39     * indexing of Wikidata fields.
40     * @param array[] &$config Existing config which will be modified with new analyzers
41     */
42    public function buildConfig( array &$config ) {
43        $stemmingSettings = $this->searchSettings->get( 'UseStemming' );
44
45        $stemmedLanguages = array_filter( $this->languageList,
46            static function ( $lang ) use ( $stemmingSettings ) {
47                return !empty( $stemmingSettings[$lang]['index'] );
48            }
49        );
50        $nonStemmedLanguages = array_diff( $this->languageList, $stemmedLanguages );
51        $this->builder->buildLanguageConfigs( $config, $stemmedLanguages,
52            [ 'plain', 'plain_search', 'text', 'text_search' ] );
53        $this->builder->buildLanguageConfigs( $config, $nonStemmedLanguages,
54            [ 'plain', 'plain_search' ] );
55    }
56
57}