Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
14 / 14 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
1 / 1 |
ConfigBuilder | |
100.00% |
14 / 14 |
|
100.00% |
2 / 2 |
2 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
1 | |||
buildConfig | |
100.00% |
11 / 11 |
|
100.00% |
1 / 1 |
1 |
1 | <?php |
2 | namespace Wikibase\Search\Elastic; |
3 | |
4 | use CirrusSearch\Maintenance\AnalysisConfigBuilder; |
5 | use MediaWiki\Config\Config; |
6 | |
7 | /** |
8 | * Utility class to build analyzer configs for ElasticSearch |
9 | */ |
10 | class 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 | } |