Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 61 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
Hooks | |
0.00% |
0 / 61 |
|
0.00% |
0 / 3 |
72 | |
0.00% |
0 / 1 |
onWikibaseRepoEntityTypes | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
6 | |||
onCirrusSearchProfileService | |
0.00% |
0 / 46 |
|
0.00% |
0 / 1 |
12 | |||
onShowSearchHit | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
12 |
1 | <?php |
2 | |
3 | namespace Wikibase\Lexeme\Search\Elastic; |
4 | |
5 | use CirrusSearch\Profile\ConfigProfileRepository; |
6 | use CirrusSearch\Profile\SearchProfileService; |
7 | use MediaWiki\MediaWikiServices; |
8 | use MediaWiki\Search\Hook\ShowSearchHitHook; |
9 | use MediaWiki\Specials\SpecialSearch; |
10 | use SearchResult; |
11 | use Wikibase\Lib\WikibaseSettings; |
12 | use Wikibase\Search\Elastic\EntitySearchElastic; |
13 | |
14 | /** |
15 | * MediaWiki hook handlers for the WikibaseLexemeCirrusSearch extension. |
16 | * |
17 | * @license GPL-2.0-or-later |
18 | */ |
19 | class Hooks implements ShowSearchHitHook { |
20 | |
21 | /** |
22 | * Adds the definition of the lexeme entity type to the definitions array Wikibase uses. |
23 | * |
24 | * @see WikibaseLexeme.entitytypes.php |
25 | * @see WikibaseLexeme.entitytypes.repo.php |
26 | * |
27 | * @param array[] $entityTypeDefinitions |
28 | */ |
29 | public static function onWikibaseRepoEntityTypes( array &$entityTypeDefinitions ) { |
30 | if ( empty( $GLOBALS['wgLexemeUseCirrus'] ) ) { |
31 | return; |
32 | } |
33 | $entityTypeDefinitions = wfArrayPlus2d( |
34 | require __DIR__ . '/../WikibaseSearch.entitytypes.repo.php', |
35 | $entityTypeDefinitions |
36 | ); |
37 | } |
38 | |
39 | /** |
40 | * Register our cirrus profiles. |
41 | * |
42 | * @param SearchProfileService $service |
43 | */ |
44 | public static function onCirrusSearchProfileService( SearchProfileService $service ) { |
45 | $config = MediaWikiServices::getInstance()->getMainConfig(); |
46 | |
47 | // Do not add Lexeme specific search stuff if we are not a repo |
48 | if ( !WikibaseSettings::isRepoEnabled() || !$config->get( 'LexemeEnableRepo' ) ) { |
49 | return; |
50 | } |
51 | |
52 | // register base profiles available on all wikibase installs |
53 | $service->registerFileRepository( EntitySearchElastic::WIKIBASE_PREFIX_QUERY_BUILDER, |
54 | 'lexeme_base', __DIR__ . '/../config/LexemePrefixSearchProfiles.php' ); |
55 | $service->registerFileRepository( SearchProfileService::RESCORE_FUNCTION_CHAINS, |
56 | 'lexeme_base', __DIR__ . '/../config/LexemeRescoreFunctions.php' ); |
57 | $service->registerFileRepository( SearchProfileService::RESCORE, |
58 | 'lexeme_base', __DIR__ . '/../config/LexemeRescoreProfiles.php' ); |
59 | $service->registerFileRepository( SearchProfileService::FT_QUERY_BUILDER, |
60 | 'lexeme_base', __DIR__ . '/../config/LexemeSearchProfiles.php' ); |
61 | |
62 | // register custom profiles provided in the WikibaseLexeme config settings |
63 | $service->registerRepository( |
64 | new ConfigProfileRepository( EntitySearchElastic::WIKIBASE_PREFIX_QUERY_BUILDER, |
65 | 'lexeme_config', 'LexemePrefixSearchProfiles', $config ) |
66 | ); |
67 | // Rescore functions for lexemes |
68 | $service->registerRepository( |
69 | new ConfigProfileRepository( SearchProfileService::RESCORE_FUNCTION_CHAINS, |
70 | 'lexeme_config', 'LexemeRescoreFunctions', $config ) |
71 | ); |
72 | |
73 | // Determine the default rescore profile to use for entity autocomplete search |
74 | $service->registerDefaultProfile( SearchProfileService::RESCORE, |
75 | LexemeSearchEntity::CONTEXT_LEXEME_PREFIX, |
76 | EntitySearchElastic::DEFAULT_RESCORE_PROFILE ); |
77 | $service->registerConfigOverride( SearchProfileService::RESCORE, |
78 | LexemeSearchEntity::CONTEXT_LEXEME_PREFIX, $config, 'LexemePrefixRescoreProfile' ); |
79 | // add the possibility to override the profile by setting the URI param cirrusRescoreProfile |
80 | $service->registerUriParamOverride( SearchProfileService::RESCORE, |
81 | LexemeSearchEntity::CONTEXT_LEXEME_PREFIX, 'cirrusRescoreProfile' ); |
82 | |
83 | // Determine the default query builder profile to use for entity autocomplete search |
84 | $service->registerDefaultProfile( EntitySearchElastic::WIKIBASE_PREFIX_QUERY_BUILDER, |
85 | LexemeSearchEntity::CONTEXT_LEXEME_PREFIX, |
86 | EntitySearchElastic::DEFAULT_QUERY_BUILDER_PROFILE ); |
87 | $service->registerConfigOverride( EntitySearchElastic::WIKIBASE_PREFIX_QUERY_BUILDER, |
88 | LexemeSearchEntity::CONTEXT_LEXEME_PREFIX, $config, 'LexemePrefixSearchProfile' ); |
89 | $service->registerUriParamOverride( EntitySearchElastic::WIKIBASE_PREFIX_QUERY_BUILDER, |
90 | LexemeSearchEntity::CONTEXT_LEXEME_PREFIX, 'cirrusWBProfile' ); |
91 | |
92 | // Determine query builder profile for fulltext search |
93 | $service->registerDefaultProfile( SearchProfileService::FT_QUERY_BUILDER, |
94 | LexemeFullTextQueryBuilder::CONTEXT_LEXEME_FULLTEXT, |
95 | LexemeFullTextQueryBuilder::LEXEME_DEFAULT_PROFILE ); |
96 | $service->registerUriParamOverride( SearchProfileService::FT_QUERY_BUILDER, |
97 | LexemeFullTextQueryBuilder::CONTEXT_LEXEME_FULLTEXT, 'cirrusWBProfile' ); |
98 | |
99 | // Determine the default rescore profile to use for fulltext search |
100 | $service->registerDefaultProfile( SearchProfileService::RESCORE, |
101 | LexemeFullTextQueryBuilder::CONTEXT_LEXEME_FULLTEXT, |
102 | LexemeFullTextQueryBuilder::LEXEME_DEFAULT_PROFILE ); |
103 | $service->registerConfigOverride( SearchProfileService::RESCORE, |
104 | LexemeFullTextQueryBuilder::CONTEXT_LEXEME_FULLTEXT, $config, |
105 | 'LexemeFulltextRescoreProfile' ); |
106 | // add the possibility to override the profile by setting the URI param cirrusRescoreProfile |
107 | $service->registerUriParamOverride( SearchProfileService::RESCORE, |
108 | LexemeFullTextQueryBuilder::CONTEXT_LEXEME_FULLTEXT, 'cirrusRescoreProfile' ); |
109 | } |
110 | |
111 | /** |
112 | * @param SpecialSearch $searchPage |
113 | * @param SearchResult $result |
114 | * @param array $terms |
115 | * @param $link |
116 | * @param $redirect |
117 | * @param $section |
118 | * @param $extract |
119 | * @param $score |
120 | * @param $size |
121 | * @param $date |
122 | * @param $related |
123 | * @param $html |
124 | */ |
125 | public function onShowSearchHit( $searchPage, $result, |
126 | $terms, &$link, &$redirect, &$section, &$extract, &$score, &$size, &$date, &$related, |
127 | &$html |
128 | ) { |
129 | if ( empty( $GLOBALS['wgLexemeUseCirrus'] ) ) { |
130 | return; |
131 | } |
132 | if ( !( $result instanceof LexemeResult ) ) { |
133 | return; |
134 | } |
135 | |
136 | // set $size to size metrics |
137 | $size = $searchPage->msg( |
138 | 'wikibaselexeme-search-result-stats', |
139 | $result->getStatementCount(), |
140 | $result->getFormCount() |
141 | )->escaped(); |
142 | } |
143 | |
144 | } |