Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
90.00% covered (success)
90.00%
9 / 10
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
MediaSearchQueryBuilder
90.00% covered (success)
90.00%
9 / 10
66.67% covered (warning)
66.67%
2 / 3
4.02
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 build
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
2
 buildDegraded
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Wikibase\MediaInfo\Search;
4
5use CirrusSearch\Query\FullTextQueryBuilder;
6use CirrusSearch\Query\KeywordFeature;
7use CirrusSearch\Search\SearchContext;
8use Elastica\Query\BoolQuery;
9
10class MediaSearchQueryBuilder implements FullTextQueryBuilder {
11    public const SEARCH_PROFILE_CONTEXT_NAME = 'mediasearch';
12
13    /** @var KeywordFeature[] */
14    private $features;
15
16    /** @var MediaSearchASTQueryBuilder */
17    protected $queryBuilder;
18
19    /**
20     * @param KeywordFeature[] $features
21     * @param MediaSearchASTQueryBuilder $queryBuilder
22     */
23    public function __construct(
24        array $features,
25        MediaSearchASTQueryBuilder $queryBuilder
26    ) {
27        $this->features = $features;
28        $this->queryBuilder = $queryBuilder;
29    }
30
31    /**
32     * Search articles with provided term.
33     *
34     * @param SearchContext $context
35     * @param string $term
36     */
37    public function build( SearchContext $context, $term ) {
38        foreach ( $this->features as $feature ) {
39            $feature->apply( $context, $term );
40        }
41
42        $parsedQuery = $context->getSearchQuery()->getParsedQuery();
43        $context->setMainQuery(
44            ( new BoolQuery() )
45                ->addMust( $this->queryBuilder->getQuery( $parsedQuery ) )
46        );
47    }
48
49    public function buildDegraded( SearchContext $searchContext ): bool {
50        return false;
51    }
52}